繁体   English   中英

网络连接断开时如何保持 Java 客户端套接字处于活动状态?

[英]How to keep Java Client Socket alive when network connection drops?

当我的互联网连接中断几秒钟时,我经常不得不重新启动我的客户端应用程序。 我是否必须在每次断开连接时创建新连接,或者有没有办法在“等待”时保持客户端套接字处于活动状态? 重新建立连接? 我不确定断开连接的确切时间。 是当我们尝试写回输出流时,因为 readLine() 可能能够在断开连接后幸存下来吗? 还是“&& !kkSocket.isClosed()”检查是多余的并关闭了while循环? 提前致谢。

    try {
        kkSocket = new Socket("12.345.67.899", 1234);
        out = new PrintWriter(kkSocket.getOutputStream(), true);
    } catch (IOException e) {
        e.printStackTrace();
        return;
    }

    try (
       BufferedReader in = new BufferedReader(
       new InputStreamReader(kkSocket.getInputStream()));
    ) {
        String fromServer;
        while ((fromServer = in.readLine()) != null && !kkSocket.isClosed()) {
            doSomething(fromServer);
            out.println("Back to server");
        }
    } catch (IOException e) {
        Thread.currentThread().interrupt();
    } catch (InterruptedException e) {
        e.printStackTrace();
    }

不可能让客户端套接字“等待”重新建立连接。 可以做的是创建一个循环,该循环将在断开连接时重试连接到服务器,例如基于计时器(每 X 秒)。 这样您就不必手动重新启动应用程序。 请注意,您必须实现某种方式来退出此重试循环才能退出您的程序。 (例如:抛出键盘事件,在 X 次连续尝试失败后退出等...)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM