首页 > 解决方案 > 是否有适当的方法来检测和处理突然断开的服务器

问题描述

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

    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并终止我的程序。我在某些时候错了吗?

标签: javasocketsserversocket

解决方案


没有适合所有人的通用解决方案。基本上有不同类型的“丢失连接”:

  1. 您的计算机断开连接,因此它立即知道连接已关闭。
  2. 对方断线,有可能是这个信号没有到达你的电脑,所以还是会认为你已经连接上了。
  3. 物理连接中断,双方无法通知对方。

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

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


推荐阅读