11

JavaSocket类有两个方法isClosedisConnected分别检查套接字是关闭还是连接。我想知道仅打开的 TCP 套接字和打开并连接的 TCP 套接字之间有什么区别,以及这与 UDP 有何不同。

4

2 回答 2

11

简而言之,打开Socket的 a是一个正在等待连接或已与另一个成功连接的套接字。当一个套接字被关闭时,就意味着这个套接字不再可用于连接,并且它的资源已经被释放。A that is connected,嗯,这意味着套接字连接到另一个。SocketSocketSocket

所以Socket一罐..

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

更新

来自@Bryan

显然,TCP Sockets 有半关闭半打开状态;哪个用法(今天)与它的原始含义不同。更多关于这个链接

于 2012-10-02T05:47:08.350 回答
7

此页面对套接字状态进行了很好的概述: http: //diranieh.com/SOCKETS/SocketStates.htm以及 TCP 和 UDP 套接字之间的区别。特别:

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

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

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

于 2012-10-02T05:49:24.157 回答