Java如何处理多个UDP数据包接收?

时间:2013-04-05 20:05:10

标签: java udp

想象一下UDP数据包中的以下场景:

  1. 服务器广播“Hello”消息并等待答案
  2. 客户1以“嗨”回答
  3. 客户2也回答“嗨”
  4. 现在,如果在服务器处理完第一个答案之前收到第二个答案,我对服务器会发生什么感兴趣。

    一方面,UDP在设计上是不可靠的,因为我第二次没有调用datagramSocket.receive(myPacket),我认为第二个答案将被默默地丢弃。

    另一方面,套接字仍处于打开状态,因此Java(或者更低级别,如内核网络堆栈中)可能会对数据包进行排队。

    在这种情况下会发生什么?

1 个答案:

答案 0 :(得分:3)

OS的网络堆栈缓冲数据报。

只要套接字保持打开状态,对.receive()的其他调用将获取数据报内容。

如果在缓冲数据包时套接字被关闭,那么它们将被静默丢弃。