gpt4 book ai didi

java - UDP 数据包是否完整到达?

转载 作者:可可西里 更新时间:2023-11-01 02:45:27 25 4
gpt4 key购买 nike

我知道 TCP 模拟流,因此通常在收到任何数据后立即开始读取。这就是为什么我使用这个片段来确保它在对它采取行动之前等待整个数据包

int packetSize = inputStream.readShort() ;
byte packetBuffer[] = new byte[packetSize];
int byteTrans = 0;
while ( byteTrans < packetSize )
{
inputStream.read( packetBuffer , byteTrans , 1 );
byteTrans++;
}//

但是,对于 UDP,我仍然需要解决同样的问题吗?我不这么认为,因为 TCP 基本上是通过将数据分解成更小的数据包并发送它来模拟流,而在 UDP 中,您可以更好地控制整个过程。

我用的是UDP读取

byte[] packetByte = new byte[packetSize];
DatagramPacket packet = new DatagramPacket(packetByte, packetByte.length);
socket.receive(packet);

我是否必须为 UDP 实现类似的系统?

最佳答案

当你发送一个数据报包时,它会被完整地接收,是的(当它实际被接收时 - 继续阅读答案)。

UDP 和 TCP 的行为远不止于此。 UDP 不保证数据包的接收顺序与发送顺序相同(甚至根本不接收),也不保证只接收一次。 UDP 更像是“即发即弃”,而 TCP 保持连接状态。

简而言之,如果收到数据包,您将获得整个数据包。但也可能根本收不到。

关于java - UDP 数据包是否完整到达?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19350611/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com