【问题标题】:Do UDP packets arrive in entirety?UDP数据包是否完整到达?
【发布时间】:2013-10-13 21:41:52
【问题描述】:

我知道 TCP 模拟流,因此通常会在收到任何数据后立即开始读取。这就是为什么我使用这个 sn-p 来确保它在处理之前等待整个数据包

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 实现类似的系统?

【问题讨论】:

    标签: java sockets networking tcp udp


    【解决方案1】:

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

    UDP 和 TCP 的行为变化不止于此。 UDP 不保证数据包的接收顺序与发送(甚至完全接收)相同,或者只接收一次。 UDP 更像是“一劳永逸”,而 TCP 保持连接状态。

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

    【讨论】:

      猜你喜欢
      • 2012-08-05
      • 2012-04-24
      • 2014-08-22
      • 2015-05-29
      • 2015-08-17
      • 2011-03-30
      • 2012-05-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多