2013-04-05 149 views
0

想象以下场景在UDP包:Java如何处理多个UDP数据包接收?

  1. 服务器广播“你好”消息,并等待答案
  2. 客户端1个回答与“喜”
  3. 客户端2也与“喜”
回答

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

一方面,UDP在设计上不可靠,而且由于我没有第二次调用datagramSocket.receive(myPacket),所以我假设第二个答案将被默默丢弃。另一方面,套接字仍然是打开的,所以也许Java(甚至更低的层次,就像在内核网络堆栈中一样)会对数据包进行排队。

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

回答

3

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

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

如果在数据包被缓冲时关闭了套接字,那么它们会被无声地丢弃。

+0

非常感谢! – 2013-04-05 20:08:33