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

Java如何处理多个UDP数据包?,java,udp,Java,Udp,想象一下UDP数据包中的以下场景: 服务器广播“Hello”消息并等待回答 客户1回答“嗨” 客户2也回答“嗨” 现在,我感兴趣的是,如果在服务器处理完第一个答案之前收到第二个答案,服务器会发生什么 一方面,UDP在设计上是不可靠的,因为我没有第二次调用datagramSocket.receive(myPacket),所以我假设第二个答案将被悄悄地丢弃 另一方面,套接字仍然是开放的,因此Java(甚至更低的级别,如内核网络堆栈)可能会对数据包进行排队 在这种情况下会发生什么?操作系统的网络堆栈会

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

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

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

    另一方面,套接字仍然是开放的,因此Java(甚至更低的级别,如内核网络堆栈)可能会对数据包进行排队


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

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

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


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

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

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

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