gpt4 book ai didi

java - 设置 sendBufferSize() 后 UDP 套接字的消息太长

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:48:03 25 4
gpt4 key购买 nike

我正在尝试发送 UDP 数据报(包含 Protocol Buffer 消息)并收到消息太长异常:

java.io.IOException: Message too long
at java.net.PlainDatagramSocketImpl.send(Native Method)
at java.net.DatagramSocket.send(DatagramSocket.java:625)

我设置了发送缓冲区大小,并检查了 getBufferSize() 的返回值,它比消息大:

byte[] b = msg.toByteArray();
System.out.println( "Serialised message in " + b.length + " bytes (max length: " + network.getSendBufferSize() + ")");
DatagramPacket p = new DatagramPacket( b, b.length, host, port );
network.send( p );

输出:

VM version: 16.3-b01-279
Runtime version: 1.6.0_20-b02-279-9M3165
Vendor: Apple Inc.
Serialised message in 69424 bytes (max length: 531075)
Problem sending packet: java.io.IOException: Message too long

如果它拒绝设置大缓冲区,我能理解,但它似乎设置了我的要求,然后不遵守它。

这是在 OSX 上;我已经尝试过 1.6 和 1.5

最佳答案

  1. IPv4 中 UDP 数据报负载的限制是 65535-28=65507 字节,实际限制是路径的 MTU,如果幸运的话,它更接近 1460 字节。

  2. 当 UDP 分片时,如果分片丢失,它就会丢失数据报,因为没有重传。

使用 TCP。

关于java - 设置 sendBufferSize() 后 UDP 套接字的消息太长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3396813/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com