当前位置: 首页 > 面试题库 >

Datagramsocket:receive(…)如何处理数据包的分段

宿洋
2023-03-14
问题内容

我从我的教授那里得知,使用UDP套接字发送的数据报包在较低层中被分段,并且 可能
以多个包的形式到达接收器端。例如,如果我以数据报包的形式发送1000字节的数据,则在接收端 可能会
到达2字节,500字节,12字节,依此类推。因此,他建议执行多次receive(…)以接收发送方发送的整个1000字节数据包。

稍后,当我浏览Java文档中有关数据报套接字的receive(…)时,一行的内容如下:“此方法阻塞,直到接收到数据报。…”这是否意味着已接收到整个数据报包并且在使用Java时不需要进行多次接收(即使理论上是这样)?

请 澄清。如果每个数据包都具有多个receive(…)是解决此问题的唯一选择,请。提供有关如何执行此操作的建议。


问题答案:

任何调用receive()都会给您一个完整的数据包-片段处理在套接字下面的两层中进行。碎片和碎片整理发生在网络/
Internet层(IP)中,因此套接字将永远不会看到碎片,而只会接收完整和完整的UDP
/ TCP数据包(只有完整的数据包才发送到侦听端口)。

因此,不,您不需要多个receive()数据包就可以获取一个数据包,但是您应该意识到UDP是不可靠的,因此,如果一个片段在网络层丢失(在某些情况下,如果出现乱序),您将赢得无法获取数据包。

您可能还需要检查方法,getReceiveBufferSize()并且setReceiveBufferSize()在接收数据包时遇到问题-
如果缓冲区大小小于数据包大小,则不能保证可以接收到数据包。



 类似资料:
  • Kafka Streams引擎将一个分区映射到一个工作者(即Java应用程序),以便该分区中的所有消息都由该工作者处理。我有下面的场景,并试图了解它是否仍然可行。 我有一个主题A(有3个分区)。发送到它的消息由Kafka随机分区(即没有密钥)。我发送给它的消息有一个如下的模式 因为我有3个分区,消息在它们之间随机分区,所以相同型号的汽车可以写入不同的分区。举个例子 现在假设我想计算carModel

  • (自己模拟的数据效果) 如上路径动画,目前的问题是运行的坐标数据是依照地图来的 需要转换为画布能够展示的范围,但运行数据之前差别大部分情况下都很小 我要怎样处理会合适一点? help大佬们

  • 我正在用c写一个抖动缓冲程序来处理rtp包。这里rtp使用UDP传输,所以连接不可靠,包会不整齐,也会有一些包丢失。如果包的顺序发生变化,我会通过序号(在rtp报头信息中)来排列,但是我怎么处理或者补偿包丢失呢?(因为包丢失不在我手上) 注意:我正在处理h264作为有效负载,他们要求我只使用RTP报头

  • 我目前正在测试将现有应用程序迁移到拼图模块。我的一个模块使用ElasticSearch及其Groovy插件。 org.elasticsearch:elasticsearch org.elasticsearch.module: lang-groovy 不幸的是,他们共享一个拆分包,所以给了我: X从lang.groovy和elasticsearch读取包org.elasticsearch.scrip

  • 本文向大家介绍如何处理缺失值数据?相关面试题,主要包含被问及如何处理缺失值数据?时的应答技巧和注意事项,需要的朋友参考一下 数据中可能会有缺失值,处理的方法有两种,一种是删除整行或者整列的数据,另一种则是使用其他值去填充这些缺失值。在Pandas库,有两种很有用的函数用于处理缺失值:isnull()和dropna()函数能帮助我们找到数据中的缺失值并且删除它们。如果你想用其他值去填充这些缺失值,则

  • 我一直在尝试创建一个,它也有一个处理程序。我阅读了这个问题的答案并知道如何做到这一点。 我的问题只是关于它的结束部分。 1) 我知道我可以写:或,但我不会写。在这里的注释中解释了这一点,因为您需要处理参数操作。 这是否意味着由于处理程序是