java - 是否有适当的方法来检测和处理突然断开的服务器
问题描述
我正在使用此代码来检测服务器是否未连接
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 秒(默认情况下),直到您的计算机注意到连接丢失。
推荐阅读
- c++ - 如何找到不同项目生成的 DLL 的路径?
- azure - 在 Azure Devops 中使用文件转换转换 SSIS dtsx 文件时出现问题
- c# - 在 C# 中使用三元运算符
- c# - C# 测试框架循环测试用例
- apache-kafka - 如何组合来自 Kafka 主题的输出
- maven - 如何从主 POM.xml 调用另一个 POM.xml
- java - 匹配的通配符是严格的,但找不到元素“任务:注释驱动”的声明
- flutter - 让用户保持登录状态
- node.js - 读取当前目录nodejs中的文本文件
- javascript - 如何在浏览器中获取 Google Drive API 应用程序特定数据?