【问题标题】:Java UDP DatagramPacketJava UDP 数据报包
【发布时间】:2011-03-07 18:17:41
【问题描述】:

为了研究,我已经实现了一个带有 UDP 和数据报的 Echo 服务器,但是 我对术语有疑问。

如果要发送DatagramPacket 我必须连接到服务器侦听端口 通过套接字发送为什么有些书说 UDP 是无连接协议?

需要连接还是我不懂什么?

谢谢。

【问题讨论】:

    标签: java udp


    【解决方案1】:

    在这种情况下,“无连接”是指 UDP 不通过握手来建立其连接。此外,除非设计了服务器协议来发送数据包,否则不会确认收到已发送的数据包。

    虽然DatagramSocket 有一个连接方法,但 API 声明:
    “如果套接字连接到的远程目标不存在,或者无法到达,并且如果已收到针对该地址的 ICMP 目标无法到达数据包,则后续调用发送或接收可能会引发 PortUnreachableException。注意,有不能保证会抛出异常。”

    因此,您可以将数据发送到某个地址而没有任何迹象表明实际上没有连接。

    【讨论】:

      【解决方案2】:

      UDP 是一种无连接协议。您无需/无法连接即可使用 UDP。但是,如果您需要建立连接,我建议您使用 TCP。

      编辑:DatagramSocket 有一个连接方法,但它所做的只是

      将套接字连接到此套接字的远程地址。当套接字连接到远程地址时,数据包只能发送到该地址或从该地址接收。默认情况下,未连接数据报套接字。

      它本身并没有建立连接。

      【讨论】:

      • 但是 DatagramSocket 还有一个连接方法,我在其中指定地址和端口...
      【解决方案3】:

      无连接意味着接收服务器不存储连接状态,并且您没有从接收服务器获得响应(确认或错误)。

      但是,通信一如既往地通过端口/套接字,您需要一个本地端口和一个远程端口。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-07-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多