您好,欢迎访问一九零五行业门户网

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

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=('',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))
其它类似信息

推荐信息