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


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


8110
2017-10-02 05:39


起源



答案:


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

那么一个 Socket 能够..

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

UPDATE

来自@Bryan

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


8
2017-10-02 05:47



+1简洁而清晰 - Mukul Goel
不要混淆事情,但TCP也有半封闭状态,但仍然存在连接,但它现在是单向的。 - Brian White


答案:


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

那么一个 Socket 能够..

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

UPDATE

来自@Bryan

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


8
2017-10-02 05:47



+1简洁而清晰 - Mukul Goel
不要混淆事情,但TCP也有半封闭状态,但仍然存在连接,但它现在是单向的。 - Brian White


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

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

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

有关更多信息,请参阅 来源 和 的JavaDoc


7
2017-10-02 05:49