UDP聊天器03 同时接收和发送数据

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()

测试
在同一个进程中,在发送的数据的同时,接受到网络调试助手发送的数据
在这里插入图片描述在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_41566700/article/details/87605385