【问题标题】:Java KeepAlive check program not returning true for .checkErrorJava KeepAlive 检查程序没有为 .checkError 返回 true
【发布时间】:2016-10-26 18:33:34
【问题描述】:

我们已将服务器上的 TCP KeepAlive 时间从默认的 7200 秒降低到 500 秒。
我正在尝试编写一个小型 Java 程序来检查该服务器实际上是否正在使用这些更新的设置。 如果我从命令行手动对主机执行 telnet,它会按预期超时。 当我运行这个程序时, if (out.checkError()) 应该返回 true,但它没有。可能是什么问题?

public class keepAlive5 {
     public static void main(String[] args) {
//        String serverName = args[0];
        //String serverName = args[0];
//        int portNum = Integer.parseInt(args[1]);
       // tstSocket.setKeepAlive(true);
        int portNum = 5500;
        int timeToWait = 600;
        String serverName = “host1”;
        try {
            Socket tstSocket = new Socket(serverName, portNum);
            PrintWriter out = new PrintWriter(tstSocket.getOutputStream(), true);
            System.out.println("connected, now wait 10 minutes...");
            TimeUnit.SECONDS.sleep(timeToWait);
        System.out.println("Will now check the connection..");
                out.write("try writing something");
        out.flush();
                if (!out.checkError()){
                    System.out.println("Socket closed by remote host");
                }
       } catch (Exception ex) {
        //Exception
        System.out.println("Unknown host..");
         }
    }
}

【问题讨论】:

    标签: java linux sockets serversocket unix-socket


    【解决方案1】:

    您需要写入足够的数据以填充套接字发送缓冲区,以便写入阻塞,以便有可能检测到错误并将其传输回应用程序。否则写入过程与应用程序是异步的,应用程序将在检测到错误之前关闭套接字。

    我不会为此任务使用PrintWriter

    【讨论】:

    • 多少数据才足够?如果不是 PrintWriter,你有什么建议?
    猜你喜欢
    • 1970-01-01
    • 2014-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-19
    • 2021-03-16
    • 1970-01-01
    相关资源
    最近更新 更多