在之前的一篇文章(python网络编程-udp)中实现了一个简单的udp聊天器,只能在单线程下进行收发数据,在学习完多线程之后,实现一个能同时收发数据的udp聊天器。
说明:
编写一个有2个线程的程序
线程1用来接收数据然后显示
线程2用来检测键盘数据然后通过udp发送数据
要求:
实现上述要求
总结多任务程序的特点
示例程序:
import socket import threading def 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和端口信息
启动两个线程,一个线程用于发送数据,一个线程用于接收数据