打开的插座和连接的插座有什么区别?

Aad*_*hah 11 java sockets datagram closesocket

Java Socket类有两种方法isClosed,isConnected分别检查套接字是关闭还是连接.我想知道一个只打开的TCP套接字和一个打开并连接的TCP套接字有什么区别,这与UDP有什么不同.

Rus*_*rez 9

为了把事情简单地说,Socket这是开放的是要么等待连接或已与另一个成功连接的插座Socket.当套接字关闭时,意味着此套接字不再可用于连接,并且它的资源已经被释放.一个Socket连接好的,这意味着套接字连接到另一个Socket.

所以一个Socket可以......

  • 同时打开和连接.
  • 是开放的,不能同时连接.
  • 关闭时不要连接.

UPDATE

来自@Bryan

显然,TCP套接字有半封闭半开状态; 哪个用法(今天)与其原始含义不同.更多关于此链接.


And*_*ter 7

此页面提供了有关套接字状态的相当好的概述:http://diranieh.com/SOCKETS/SocketStates.htm以及TCP和UDP套接字之间的区别.尤其:

  • 状态"打开"(TCP和UDP):已创建未命名的套接字.未命名的套接字是未绑定到本地地址和端口的套接字
  • 状态"已连接"(仅限TCP):已在本地和远程主机之间建立关联(虚拟电路).现在可以发送和接收数据.

请注意,java.net.DatagramSocket的较新实现支持TCP/IP网络状态的扩展:DatagramSocket也可以处于"已连接"状态,因此即使数据报套接字从不,isConnected()也不一定返回false在网络层"连接".特别是:"当DatagramSocket连接到远程地址时,数据包只能发送到该地址或从该地址接收.默认情况下,数据报套接字未连接."

有关更多信息,请参阅源代码JavaDoc.