我使用此代码来检测服务器是否未连接
private boolean isServerListening() {
try {
s = new Socket("localhost", PORT);
return true;
} catch (IOException e) {
System.out.println(e);
return false;
}
}
和线程来处理突然断开的服务器
Thread checkServer = new Thread(() -> {
while (true) {
if (isServerListening()==false) {
JOptionPane.showMessageDialog(null, "Server is disconnected!");
System.exit(0);
}
}
});
问题是:
- 我认为该方法执行和返回花费了太多时间(大约4秒(。那么有合适的方法吗
- 无论服务器是否连接,这个
Thread
仍然显示JOptionPane
并终止我的程序。在某个时刻我错了吗
没有适合所有人的通用解决方案。实际上,有不同类型的"丢失连接":
- 您的计算机断开连接,因此它立即知道连接已关闭
- 另一侧断开连接,可能会发生这种信号没有到达您的计算机,因此它仍然会认为您已连接
- 物理连接中断,双方都无法通知对方
Socket
具有您应该使用的方法isConnected((和isClosed((。
检查连接的唯一方法肯定是发送消息并接收答案。然后,您的计算机可能需要60秒(默认情况下(才能注意到丢失的连接。