【问题标题】:Dividing udp datagram messages划分 udp 数据报消息
【发布时间】:2017-06-17 18:01:06
【问题描述】:

我正在尝试通过 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)

【问题讨论】:

    标签: python json sockets udp datagram


    【解决方案1】:

    我的通灵能力表明您正试图将超过 64KB 的数据放入单个 UDP 数据包中。

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

    发送前检查您编码的packet_info 的大小。如果太大而放不下,则拆分为多条消息并进行相应处理。

    【讨论】:

      猜你喜欢
      • 2012-04-10
      • 2016-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多