python网络聊天器多线程版
在之前的一篇文章(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和端口信息
- 启动两个线程,一个线程用于发送数据,一个线程用于接收数据