【问题标题】:Java ServerSocket required for UDP communication?UDP通信需要Java ServerSocket?
【发布时间】:2024-01-11 02:45:01
【问题描述】:

我在考试中有以下问题:

“让我们假设您想为客户端使用 UDP。您是否需要创建一个新的套接字来管理 UDP 中的并行连接?为什么或为什么不?如果多个客户端连接到该套接字会发生什么? "

该问题还引用了一个 Java 类 TCPServer.java,它创建 ServerSocket,然后在 while(true) 循环中,它接受连接并为来自用户的传入连接请求创建套接字。

在我看来,TCP Server 仅用于 TCP 连接,因此无法为 UDP 客户端使用相同的服务器端代码。

【问题讨论】:

    标签: java udp serversocket


    【解决方案1】:

    你在正确的轨道上。

    ServerSockets 用于 TCP 连接。 DatagramSockets(仍然是无连接的)用于 UDP。

    然后回答另一部分,即“如果多个客户端连接到该套接字会发生什么?”答案是:

    1. 如果是 UDP,那就没问题,因为它是无连接的
    2. 如果是 TCP,那么 ServerSocket 应该会看到连接请求,并创建一个新的 Socket 用于与该客户端进行双向通信

    回答“为什么或为什么不” - UDP 是无连接的,因此不使用新的 Socket 进行通信。 UDP 只接收一个 DatagramPacket,然后丢弃它(如果应用程序确定它无效、格式错误等),或者它回复一个 DatagramPacket。在 UDP 中没有连接,没有连接状态,也没有输入/输出流。

    【讨论】:

      【解决方案2】:

      问题要求您解释为什么为什么不。因此,本质上,如果您不相信 ServerSocket 代码适用于 UDP,那么您必须说出原因。从你的最后一句话我相信你已经知道了问题的答案,现在你只需要自信地写下来。

      【讨论】: