【发布时间】:2011-03-07 18:17:41
【问题描述】:
为了研究,我已经实现了一个带有 UDP 和数据报的 Echo 服务器,但是 我对术语有疑问。
如果要发送DatagramPacket 我必须连接到服务器侦听端口
通过套接字发送为什么有些书说 UDP 是无连接协议?
需要连接还是我不懂什么?
谢谢。
【问题讨论】:
为了研究,我已经实现了一个带有 UDP 和数据报的 Echo 服务器,但是 我对术语有疑问。
如果要发送DatagramPacket 我必须连接到服务器侦听端口
通过套接字发送为什么有些书说 UDP 是无连接协议?
需要连接还是我不懂什么?
谢谢。
【问题讨论】:
在这种情况下,“无连接”是指 UDP 不通过握手来建立其连接。此外,除非设计了服务器协议来发送数据包,否则不会确认收到已发送的数据包。
虽然DatagramSocket 有一个连接方法,但 API 声明:
“如果套接字连接到的远程目标不存在,或者无法到达,并且如果已收到针对该地址的 ICMP 目标无法到达数据包,则后续调用发送或接收可能会引发 PortUnreachableException。注意,有不能保证会抛出异常。”
因此,您可以将数据发送到某个地址而没有任何迹象表明实际上没有连接。
【讨论】:
UDP 是一种无连接协议。您无需/无法连接即可使用 UDP。但是,如果您需要建立连接,我建议您使用 TCP。
编辑:DatagramSocket 有一个连接方法,但它所做的只是
将套接字连接到此套接字的远程地址。当套接字连接到远程地址时,数据包只能发送到该地址或从该地址接收。默认情况下,未连接数据报套接字。
它本身并没有建立连接。
【讨论】:
无连接意味着接收服务器不存储连接状态,并且您没有从接收服务器获得响应(确认或错误)。
但是,通信一如既往地通过端口/套接字,您需要一个本地端口和一个远程端口。
【讨论】: