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

问题描述 投票:0回答:1

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

    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并终止我的程序。我在某个时候错了吗?
java sockets serversocket
1个回答
0
投票

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.