划分udp数据报消息

时间:2017-06-17 18:01:07

标签: python json sockets udp datagram

我正在尝试通过UDP(我在其上使用json.dumps的字典列表)发送消息,我收到此错误: OSError:[WinError 10040]在数据报套接字上发送的消息大于内部消息缓冲区或其他一些网络限制,或用于接收数据报的缓冲区小于数据报本身

这是客户端代码:

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
server_address = (SRVR_NAME,DST_PORT)
packet_info = json.dumps(packet_info)
packet_info = packet_info.encode()
sock.sendto(packet_info,server_address)
sock.close()

这是服务器端代码:

listening_sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
server_address = (IP, PORT)
listening_sock.bind(server_address)
client_msg, client_addr = listening_sock.recvfrom(MSG_SIZE)
d = json.loads(client_msg)
d = d.decode()
print(d)

1 个答案:

答案 0 :(得分:0)

我的通灵能力建议你试图将超过64KB的数据放入一个UDP数据包中。

包括所有标头的IP数据包的最大大小为65535字节。 IP和UDP标头组合至少28个字节。因此,UDP数据报的数据部分的最大大小为65535-28 == 65507

发送前检查编码packet_info的大小。如果它太大而不适合,则分成多个消息并相应处理。