0

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

  1. 服务器广播“Hello”消息并等待应答
  2. 客户 1 回答“嗨”
  3. 客户 2 也回答“嗨”

现在,如果在服务器完成处理第一个答案之前收到第二个答案,我对服务器会发生什么感兴趣。

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

另一方面,套接字仍然是打开的,所以也许 Java(或者甚至更低级别,如内核网络堆栈中的)会将数据包排队。

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

4

1 回答 1

3

操作系统的网络堆栈缓冲数据报。

只要套接字保持打开状态,额外.receive()的调用就会获取数据报内容。

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

于 2013-04-05T20:07:16.903 回答