当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《设置sendBufferSize()后,UDP套接字的消息太长》经验,为你挑选了1个好方法。

我正在尝试发送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 );

输出:

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> user207421..:

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

    当UDP被分段时,如果片段丢失则丢失数据报,因为没有重传.

使用TCP.

推荐阅读
jerry613
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有