Python达成UDP通信
发布时间:2021-11-20 17:34:36 所属栏目:教程 来源:互联网
导读:UDP,用户数据报传输协议,它位于TCP/IP协议的传输层,是一种无连接的协议,它发送的报文不能确定是否完整地到达了另外一端。UDP广泛应用于需要相互传输数据的网络应用中,如QQ使用的就是UDP协议。在网络质量不好的情况下,使用UDP协议时丢包现象十分严重,
UDP,用户数据报传输协议,它位于TCP/IP协议的传输层,是一种无连接的协议,它发送的报文不能确定是否完整地到达了另外一端。UDP广泛应用于需要相互传输数据的网络应用中,如QQ使用的就是UDP协议。在网络质量不好的情况下,使用UDP协议时丢包现象十分严重,但UDP占用资源少,处理速度快,UDP依然是传输数据时常用的协议。 下面是用Python实现UDP服务器的代码: #!/usr/bin/env python import socket address=('127.0.0.1',10000) s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) s.bind(address) while 1: data,addr=s.recvfrom(2048) if not data: break print "got data from",addr print data s.close() UDP客户端的代码: #!/usr/bin/env python import socket addr=('127.0.0.1',10000) s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) while 1: data=raw_input() if not data: break s.sendto(data,addr) s.close() 运行这两个程序,会显示以下结果: 服务器端: 客户端: UDP的应用 在局域网中,如果要想局域网内所有计算机发送数据,可以使用广播,广播不能用TCP实现,可以用UDP实现,接受方收到广播数据后,如果有进程在侦听这个端口,就会接收数据,如果没有进程侦听,数据包会被丢弃。 广播的发送方: #!usr/bin/env python import socket host='' port=10000 s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) s.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) s.setsockopt(socket.SOL_SOCKET,socket.SO_BROADCAST,1) s.bind((host,port)) while 1: try: data,addr=s.recvfrom(1024) print "got data from",addr s.sendto("broadcasting",addr) print data except KeyboardInterrupt: raise 广播的接收方: #!/usr/bin/env python import socket,sys addr=('<broadcast>',10000) s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) s.setsockopt(socket.SOL_SOCKET,socket.SO_BROADCAST,1) s.sendto("hello from client",addr) while 1: data=s.recvfrom(1024) if not data: break print data 运行广播程序,发送端会显示以下结果: got data from (‘<地址>’,<端口号>) hello fromclient 接收端会显示以下结果: (‘broading’,(<IP地址>,10000)) (编辑:江门站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |