首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java数据通道数据丢失

java数据通道数据丢失
EN

Stack Overflow用户
提问于 2014-08-31 01:28:24
回答 1查看 661关注 0票数 2

关于UDP/Java数据报通道的工作方式,我读过一些相互矛盾的内容。我需要知道几件事:

  • 在调用.read(ByteBuffer b)之前,UDP是否有继承的方式来判断接收到的数据包是否完整、有序?我至少读过一篇文章,说UDP继承了不完整或无序的数据。
  • 数据通道是否处理一次发送(缓冲区.)作为一个数据报包?如果是部分发送呢?
  • 一个.read(..。)读取多个数据包,如果缓冲区作为命令参数仅用于处理一个数据包,则会导致数据被丢弃?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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)它可能也被截断了。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25588201

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档