【问题标题】:How does Java handle multiple UDP packets receipt?Java如何处理多个UDP数据包接收?
【发布时间】:2013-04-05 20:05:10
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

    标签: java udp


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2013-02-03
      • 1970-01-01
      • 2012-11-19
      • 2015-12-29
      • 2019-05-31
      • 2011-03-30
      • 2013-03-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多