java datagramchannel数据丢失
我读过一些关于UDP/Java数据报通道如何运行的相互矛盾的东西。我需要知道一些事情:java datagramchannel数据丢失,java,networking,network-programming,udp,datagram,Java,Networking,Network Programming,Udp,Datagram,我读过一些关于UDP/Java数据报通道如何运行的相互矛盾的东西。我需要知道一些事情: UDP是否有一种继承方式来判断在调用.read(ByteBuffer b)之前接收的数据包是否完整且按顺序?我至少读过一篇文章说UDP继承会丢弃不完整或无序的数据 datagramchannel是否将一次发送(缓冲区..)视为一个数据报数据包?如果是部分发送呢 如果作为commands参数提供的缓冲区仅设计用于处理一个数据包,那么.read(..)是否可以读取多个数据包,从而导致数据被丢弃 UDP是否有一
- UDP是否有一种继承方式来判断在调用.read(ByteBuffer b)之前接收的数据包是否完整且按顺序?我至少读过一篇文章说UDP继承会丢弃不完整或无序的数据
- datagramchannel是否将一次发送(缓冲区..)视为一个数据报数据包?如果是部分发送呢
- 如果作为commands参数提供的缓冲区仅设计用于处理一个数据包,那么.read(..)是否可以读取多个数据包,从而导致数据被丢弃
read()
之前/之后与此无关
datagramchannel是否将一个发送(缓冲区..)
视为一个数据报数据包
对
如果是部分发送呢
UDP中没有这样的东西
是否可以读取(…)
多个数据包
UDP读取将准确且仅返回一个数据报,否则将失败
如果作为commands参数提供的缓冲区仅设计用于处理一个数据包,会导致数据被丢弃吗
不可能
如果您在下面的评论是关于一个完全不同的问题,那么检测截断的常用技术是使用比最大预期数据报大的缓冲区。然后,如果您得到了如此大的数据报,(i)这是一个应用程序协议错误,(ii)它可能也被截断了 “不可能发生。”我指的是api中关于读取的这一行:如果数据报中的字节数超过了给定缓冲区中的剩余字节数,那么数据报的其余部分将被悄悄地丢弃。有没有办法在读取数据包之前告诉数据包的大小以避免这种情况?@user1908813没有。通常的技术是使用一个比最大预期数据报大的缓冲区。然后,如果你得到一个如此大的数据报,(i)这是一个应用程序协议错误,(ii)它可能也被截断了。你还说IP说明了丢失的数据包,但无序的数据包呢?IP不说明丢失的数据包,我没有说其他。我说的是IP负责重新组装。如果一个片段到达的顺序不正确,IP可能会保留它,也可能不会保留它,它是未定义的。