是否有正确的方法来检测和处理突然断开的服务器



我使用此代码来检测服务器是否未连接

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);
}
}
});

问题是:

  1. 我认为该方法执行和返回花费了太多时间(大约4秒(。那么有合适的方法吗
  2. 无论服务器是否连接,这个Thread仍然显示JOptionPane并终止我的程序。在某个时刻我错了吗

没有适合所有人的通用解决方案。实际上,有不同类型的"丢失连接":

  1. 您的计算机断开连接,因此它立即知道连接已关闭
  2. 另一侧断开连接,可能会发生这种信号没有到达您的计算机,因此它仍然会认为您已连接
  3. 物理连接中断,双方都无法通知对方

Socket具有您应该使用的方法isConnected((和isClosed((。

检查连接的唯一方法肯定是发送消息并接收答案。然后,您的计算机可能需要60秒(默认情况下(才能注意到丢失的连接。

最新更新