在之前的一篇文章(python网络编程-udp)中实现了一个简单的udp聊天器,只能在单线程下进行收发数据,在学习完多线程之后,实现一个能同时收发数据的udp聊天器。
说明:
- 编写一个有2个线程的程序
- 线程1用来接收数据然后显示
- 线程2用来检测键盘数据然后通过udp发送数据
要求:
- 实现上述要求
- 总结多任务程序的特点
示例程序:
import socket
import threadingdef send_msg(udp_socket, dest_ip, dest_port):"""发送消息"""while True:send_data = input("请输入要发送的信息:")udp_socket.sendto(send_data.encode("utf-8"), (dest_ip, dest_port))def recv_msg(udp_socket):"""接收消息"""while True:recv_data = udp_socket.recvfrom(1024)recv_ip = recv_data[1]recv_msg = recv_data[0].decode("utf-8")print("\n>>%s:%s" % (recv_ip, recv_msg))def main():# 创建套接字udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)# 绑定本地端口udp_socket.bind(("", 8888))# 输入对方的ip和地址dest_ip = input("请输入对方的ip:")dest_port = int(input("请输入对方的port:"))t1 = threading.Thread(target=send_msg, args=(udp_socket, dest_ip, dest_port))t1.start()t2 = threading.Thread(target=recv_msg, args=(udp_socket,))t2.start()if __name__ == "__main__":main()
终端运行结果:
$ python3 聊天器-多线程版.py
请输入对方的ip:192.168.92.130
请输入对方的port:8080
请输入要发送的信息:hello
请输入要发送的信息:
>>('192.168.92.130', 8080):666
网络调试助手的结果:
程序运行过程解析:
- 首先创建套接字,并绑定到本地的端口
8888
- 输入要进行聊天的对方的ip和端口信息
- 启动两个线程,一个线程用于发送数据,一个线程用于接收数据