关于UDP/Java数据报通道的工作方式,我读过一些相互矛盾的内容。我需要知道几件事:
发布于 2014-08-31 01:42:15
在调用.read(ByteBuffer b)之前,UDP是否有一种固有的方法来判断接收到的数据包是否完整、有序?我至少读过一篇文章,说UDP继承了不完整或无序的数据。
这两种说法都不正确。更准确的说法是,IP有一种方法可以判断数据报的碎片是否都到达了,然后,直到那时,它才会将它呈现给UDP。重组是IP层的责任,而不是UDP。如果碎片没有到达,UDP甚至看不到它。如果它们在重新组装完成之前过期,则IP会抛出它们。
在调用read()之前/之后是无关的。
数据通道是否将一个
send(buffer.. )视为一个数据报数据包?
是。
如果是部分发送呢?
在UDP中没有这样的东西。
read(.. )能读取多个数据包吗?
UDP读取将准确地返回一个数据报,或者失败。
如果仅将缓冲区作为命令参数设计为处理一个数据包,则会导致数据被丢弃?
不可能发生。
在下面的评论中,这是一个完全不同的问题,通常用于检测截断的技术是使用比最大的预期数据报更大的缓冲区。然后,如果您得到这样大小的数据报,(i)这是应用程序协议错误,(ii)它可能也被截断了。
https://stackoverflow.com/questions/25588201
复制相似问题