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

时间:2012-10-02 05:39:30

标签: java sockets datagram closesocket

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

2 个答案:

答案 0 :(得分:8)

简单地说, open Socket是一个等待连接或已成功与另一个Socket连接的套接字。当套接字关闭时,意味着此套接字不再可用于连接,并且它的资源已被释放。连接的Socket,这意味着套接字连接到另一个Socket

所以Socket可以......

  • 同时打开并连接。
  • 打开并且不能同时连接。
  • 关闭时无法连接。

<强>更新

来自@Bryan

显然,TCP套接字有半封闭半开状态;哪个用法(今天)与其原始含义不同。有关link的更多信息。

答案 1 :(得分:7)

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

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

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

有关详细信息,请参阅sourcesJavaDoc