UDP聊天器03 同时接收和发送数据
之前使用while True + if 判断的方式可以实现循环收和发的半双工的数据传输。现在我们可以使用多线程的方式实现收发的同步进行,实现正真意义上的全双工。
具体代码如下:
import threading
import socket
# 定义发送的方法,后期用线程方式调用,方法内部进行循环发送数据
def send_msg(udp_socket, ip, port):
while True:
msg = input('请输入要发送的内容:')
udp_socket.sendto(msg.encode('gbk'), (ip, port))
# 定义接收的方法,后期用线程方式调用,方法内部进行循环接收数据
def recv_msg(udp_socket):
while True:
recv_data = udp_socket.recvfrom(1024)
print('[%s:%s]:%s' % (recv_data[1][0], recv_data[1][1], recv_data[0].decode('gbk')))
def main():
# 创建套接字
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 绑定端口
local_addr = ('', 6666)
udp_socket.bind(local_addr)
# 循环接收或发送udp信息
ip = input('请输入ip地址:')
port = int(input('请输入端口号:'))
# 创建收和发两个线程
send = threading.Thread(target=send_msg, args=(udp_socket, ip, port))
recv = threading.Thread(target=recv_msg, args=(udp_socket,))
# 启动线程
send.start()
recv.start()
if __name__ == "__main__":
main()
测试
在同一个进程中,在发送的数据的同时,接受到网络调试助手发送的数据