2011-10-17 105 views
1

我读了this question about the error that I'm getting,我了解到UDP数据有效载荷不能超过64k。我读过的建议是使用TCP,但在这种情况下这不是一种选择。我正在通过UDP传输数据的外部系统进行连接,但此时我无法访问该外部系统,所以我正在模拟它。在Java中,如何处理大于最大UDP数据负载的UDP消息?

在某些情况下,我有超过1,400,000字节的数据消息,并且需要使用UDP协议。我无法更改协议(我更愿意使用TCP或基于UDP的可靠协议)。相反,我必须找到一种方法,通过UDP将测试应用程序中的大型有效负载传输到我正在构建的系统中,并读取系统中正在构建的大型有效负载。我不必担心丢包,如果我没有收到数据报,我不在乎 - 等待下一个有效负载到达。如果它不完整或丢失,请将它全部丢弃并继续等待。我也不知道数据报的大小(它们的范围从几百字节到1,400,000多字节)。

我已经将我的发送和接收缓冲区大小设置得足够大,但这还不够。否则我可以做什么?

+1

他们如何发送有效载荷大于最大尺寸?我的意思是,你需要将它们编组/合并成合法大小的信息。 – 2011-10-17 13:27:48

回答

4

UDP数据包有一个16位长的字段,它与Java没有关系,它们不能大一些,如果你所说的服务器是不可变的,那么你就会被卡住如果你可以更改服务器和协议,你可以自己重新实现TCP,因为UDP被定义为不可靠的,所以你需要完全的重传机制来处理那些正在运行的数据包在网络上某处。所以,你必须把'消息'分成块,发送块,并且有一个协议来请求重传丢失的块。

0

这是一个要求......

要求也应该因此决定了打包技术。您需要有关外部系统及其协议的更多信息。请注意,一旦路由器参与,最大IPv4 UDP有效负载为65535-28字节,并且最大有效负载为< 1500字节。