我有一个正在运行的套接字,使用选择器。我正在尝试检查我的套接字是否已连接到服务器。
Boolean connected = _channel.isConnected();
不管怎样都返回true。我关闭了电脑的Airport(网络连接),但是当我检查套接字是否连接时,它仍然返回true。 有任何想法吗? 我每3秒尝试向服务器写入数据,但仍无法将我的套接字状态更改为断开连接。
我有一个正在运行的套接字,使用选择器。我正在尝试检查我的套接字是否已连接到服务器。
Boolean connected = _channel.isConnected();
不管怎样都返回true。我关闭了电脑的Airport(网络连接),但是当我检查套接字是否连接时,它仍然返回true。 有任何想法吗? 我每3秒尝试向服务器写入数据,但仍无法将我的套接字状态更改为断开连接。
public class ChannelTest {
public static void main(String[] args) throws UnknownHostException, IOException {
Socket google = new Socket(InetAddress.getByName("www.google.com"), 80);
SocketChannel channel = SocketChannel.open(google.getRemoteSocketAddress());
System.out.println(channel.isConnected());
channel.close();
System.out.println(channel.isConnected());
}
}
我的电脑上的输出结果是
true
false
isConnected() == false
。 - Andreas DolkisConnected()函数告诉你当前的通道对象是否已经连接,这个对象是你自己创建的,但是它没有指定在关闭后是否返回false,虽然显然它会返回false:详见安德烈亚斯的回答。它并不能告诉你底层的连接是否仍然存在。你只能通过使用它来判断:从读取中得到-1或者异常,这样可以知道连接已经断开。
isConnected()
在我的机器上返回false
。请参见我的答案以获取一个可行的示例。 - Andreas Dolkread
返回的 -1
也不起作用。我添加了一个 read
,它被阻塞(等待字节)。然后我拔掉了网络电缆,应用程序仍然被阻塞(没有 -1
作为结果)。 - Andreas Dolk