我正在尝试发送 UDP 数据报(包含协议缓冲区消息)并收到消息太长的异常:
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 );
Outputs:
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
IPv4 中 UDP 数据报负载的限制是 65535-28=65507 字节,实际限制是路径的 MTU,如果幸运的话,它更像是 1460 字节。
当UDP分片时,loses数据报如果一个片段丢失,因为有no重传。
Use TCP.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)