python之UDP实现同时收发

概述

由于接收数据的recvfrom()方法会引起阻塞,在执行此方法时,不会接收键盘事件,也不会发送数据,为了解决此问题,就要用多线程编程

将接收数据的recvfrom()方法放到子线程中,主线程处理业务,也就是接收键盘事件,发送数据等

#coding=utf-8

import socket,threading

def recv():
    while True:
        data,addr=udp.recvfrom(1024)
        print(data,addr)

if __name__ == "__main__":
    udp=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
    udp.bind(('0.0.0.0',8000))
    print('绑定8000成功,开始接收数据...')

    t=threading.Thread(target=recv)
    t.start()

    while True:
        s=input('>')
        udp.sendto(s.encode('UTF-8'),('172.20.10.2',8000))

原文出处:/show_1EF3BRzXxTn4.html