我从我的教授那里了解到,使用 UDP 套接字发送的数据报包在较低层中会被分段,并且may作为多个数据包到达接收端。例如,如果我在数据报包中发送 1000 字节的数据,则在接收端might到达时,例如 2 字节、500 字节、12 字节等。因此,他建议执行多个receive(...)来接收发送方发送的整个1000字节数据包。
后来,当我浏览数据报套接字接收(...)的Java文档时,有一行内容如下:“此方法将阻塞,直到收到数据报。...”这是否意味着接收到整个数据报包当我们使用Java时不需要进行多次接收(尽管理论上是这样)?
请。阐明。如果每个数据包的多个 receive(...) 是解决此问题的唯一选择,请。就如何做到这一点提出建议。
任何电话至receive()
将为您提供整个数据包 - 片段处理发生在套接字下面的两层中。碎片和碎片整理发生在网络/互联网层(IP),因此套接字永远不会看到片段,而只会接收完整的 UDP/TCP 数据包(只有完整的数据包被发送到侦听端口)。
所以,不,你不需要多个receive()
获取单个数据包,但您应该意识到 UDP 不可靠,因此如果一个片段在网络层中丢失(并且在某些情况下如果它无序到达),您将无法获取该数据包。
您可能还想检查方法getReceiveBufferSize() and setReceiveBufferSize()如果您在接收数据包时遇到问题 - 如果缓冲区大小小于数据包大小,则不能保证您可以接收数据包。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)