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

2018-09-23 20:27

阅读:449

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


评论


亲,登录后才可以留言!