python网络编程之udp通信实例(含服务器端、客户端、udp广播例子)

udp广泛应用于需要相互传输数据的网络应用中,如qq使用的就是udp协议。在网络质量不好的情况下,使用udp协议时丢包现象十分严重,但udp占用资源少,处理速度快,udp依然是传输数据时常用的协议。

下面是用python实现udp服务器的代码:

代码如下:

#!/usr/bin/env pythonimport socketaddress=(‘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 datas.close()

udp客户端的代码:

代码如下:

#!/usr/bin/env pythonimport socketaddr=(‘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 pythonimport sockethost=”port=10000s=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 pythonimport socket,sysaddr=(”,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’,(,10000))

Posted in 未分类

发表评论