该主题对此主题进行了一些有用的讨论。事实证明,
Socket.isConnected如果(曾经)成功连接,则返回true。
从上面的线程:
使用
Socket()似乎已被忽略的时,它会Socket.isConnected()告诉您是否Socket.connect()已被调用。isClosed()和和类似close()。这些方法的混淆是由于将受应用程序控制的 套接字 状态与受协议控制的整个 连接 状态混淆 。
isConnected()并isClosed()告诉您您对套接字做了什么。除了读取和写入外,没有其他API可用于确定连接状态。
文档说:
如果套接字成功连接到服务器,则返回true
而不是像人们期望的那样“ 如果套接字连接到服务器,则返回true ”。
可以通过查看Socket的来源来确认该行为:
public boolean isConnected() { // Before 1.3 Sockets were always connected during creation return connected || oldImpl;}您还可以运行以下小测试代码段:
Socket s = new Socket();System.out.println("isConnected: " + s.isConnected() + " isBound: " + s.isBound() + " isClosed: " + s.isClosed());s.connect(new InetSocketAddress("google.com", 80));System.out.println("isConnected: " + s.isConnected() + " isBound: " + s.isBound() + " isClosed: " + s.isClosed());s.close();System.out.println("isConnected: " + s.isConnected() + " isBound: " + s.isBound() + " isClosed: " + s.isClosed());哪些打印:
isConnected: false isBound: false isClosed: falseisConnected: true isBound: true isClosed: falseisConnected: true isBound: true isClosed: true
我必须说,文档在这一点上还不清楚,并且方法名有点误导。



