Java的UDP _DatagramSocket.connect()_有什么作用?

时间:2014-12-26 16:46:07

标签: java sockets udp protocols connection

我最近看过一个关于Java的UDP API的小教程,我查看了DatagramSocketDatagramPacket类的javadoc。课程DatagramSocket包含多个connect()和一个disconnect()方法。但UDP不是没有连接的协议吗?

这些connectdisconnect方法有何作用?

2 个答案:

答案 0 :(得分:4)

来自DatagramSocket#connect(InetAddress address, int port)的javadoc:

  

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

     

...

     

连接套接字时,receivesend不会对传入和传出的数据包执行任何安全检查,除了匹配数据包和套接字的地址和端口。 在发送操作中,如果数据包的地址已设置且数据包的地址与套接字地址不匹配,则会引发IllegalArgumentException。连接到多播地址的套接字只能用于发送数据包。

因此,它不是以与TCP相同的方式建立“连接”的方式,而是一种防止向/从其他地址发送或接收数据包的方法。

答案 1 :(得分:0)

一个实际用例是管理方法receive()的并发调用。

例如您有2个与2个网络节点的单独通信流,分别在2个中处理 分隔的控制流/ Thread-s,每个Thread-s在receive上被阻止以接收传入消息。

现在,DatagramSocket处于断开状态时,Thread会捕获什么消息。

但是,如果将每个套接字连接到其相应节点的地址,则传入的消息将委派给正确的控制流。