Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中,如何处理大于最大UDP数据负载的UDP消息?_Java_Network Programming_Udp - Fatal编程技术网

在Java中,如何处理大于最大UDP数据负载的UDP消息?

在Java中,如何处理大于最大UDP数据负载的UDP消息?,java,network-programming,udp,Java,Network Programming,Udp,我阅读并了解到UDP数据有效负载不能超过64k。我读到的建议是使用TCP,但在这种情况下,这不是一个选项。我正在与一个通过UDP传输数据的外部系统进行接口,但我目前无法访问该外部系统,因此我正在模拟它 在某些情况下,我有超过1400000字节的数据消息,需要使用UDP协议。我无法更改协议(我更愿意使用TCP或基于UDP的可靠协议)。相反,我必须找到一种方法,通过UDP将大型有效负载从测试应用程序传输到我正在构建的系统中,并读取我正在构建的系统中的大型有效负载进行处理。我也不必担心丢包——如果我没

我阅读并了解到UDP数据有效负载不能超过64k。我读到的建议是使用TCP,但在这种情况下,这不是一个选项。我正在与一个通过UDP传输数据的外部系统进行接口,但我目前无法访问该外部系统,因此我正在模拟它

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


我已经设置了足够大的发送和接收缓冲区大小,但这还不够。我还能做什么呢?

UDP数据包有一个16位长度的字段。这与Java无关。它们不能更大,句号。如果您正在与之交谈的服务器是不可变的,那么您将无法适应数据包中的内容


如果您可以更改服务器,从而更改协议,您可以或多或少地为自己重新实现TCP。由于UDP被定义为不可靠的,因此您需要完整的重新传输机制来处理掉在网络某处的数据包。因此,您必须将“消息”拆分为块,发送块,并为请求提供协议正在重新传输丢失的数据块。

UDP数据包有一个16位长度的字段。这与Java无关。它们不能更大,句号。如果您正在与之交谈的服务器是不可变的,则您将无法适应数据包中的内容

如果您可以更改服务器,从而更改协议,您可以或多或少地为自己重新实现TCP。由于UDP被定义为不可靠的,因此您需要完整的重新传输机制来处理掉在网络某处的数据包。因此,您必须将“消息”拆分为块,发送块,并为请求提供协议正在重新传输丢失的块

这是一个要求

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

这是一个要求


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

他们如何发送有效负载大于最大值的数据包嗯,大小?我的意思是,你需要将它们打包/解包成合法大小的邮件。它们如何使用大于最大大小的有效负载发送它们?我的意思是,你需要将它们打包/解包成合法大小的邮件。