标签:高效 启动 处理 ddr bind 报错 客户 服务端 阻塞
基于udp协议的套接字s.recvfrom() 接收UDP数据
s.sendto() 发送UDP数据
UDP(user datagram protocol,用户数据报协议)是无连接的,面向消息的,提供高效率服务。
不会使用块的合并优化算法, 由于UDP支持的是一对多的模式,所以接收端的skbuff(套接字缓冲区)采用了链式结构来记录每一个到达的UDP包
在每个UDP包中就有了消息头(消息来源地址,端口等信息),这样,对于接收端来说,就容易进行区分处理了。
即面向消息的通信是有消息保护边界的。
udp的recvfrom是阻塞的,一个recvfrom(x)必须对唯一一个sendinto(y),收完了x个字节的数据就算完成
若是y>x数据就丢失,这意味着udp根本不会粘包,但是会丢数据,不可靠
udp是无链接的,先启动哪一端都不会报错
udp发送数据,对端是不会返回确认信息的,因此不可靠
服务端:
from socket import *
server = socket(AF_INET, SOCK_DGRAM) #创建一个服务器的套接字
server.bind((‘127.0.0.1‘, 8080)) #绑定服务器套接字
while True:
data, client_addr = server.recvfrom(1024)
server.sendto(data.upper(),client_addr)
server.close()
客户端:
from socket import *
client=socket(AF_INET,SOCK_DGRAM)
while True:
msg=input(‘>>: ‘).strip()
if not msg:continue
client.sendto(msg.encode(‘utf-8‘),(‘127.0.0.1‘,8080))
data,server_addr=client.recvfrom(1024)
print(data.decode(‘utf-8‘))
client.close()
标签:高效 启动 处理 ddr bind 报错 客户 服务端 阻塞
原文地址:http://blog.51cto.com/dzm911/2069063