2016-10-26 11 views
1

サーバーのTCPキープアライブ時間をデフォルトの7200秒から500秒に引き下げました。
私は、実際にこれらの更新された設定を使用していることを確認するために、小さなJavaプログラムを作成しようとしています。 コマンドラインから手動でホストにtelnetを実行すると、予想通りにタイムアウトします。 このプログラムを実行すると、if(out.checkError())はtrueを返しますが、そうではありません。何が問題なの?Java KeepAliveチェックプログラムが.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.."); 
     } 
    } 
} 

答えて

0

あなたは、ソケットの送信バッファがいっぱいになるように、書き込みブロックするように検出され、戻ってアプリケーションに送信されているエラーの一部possibiltyがあるように、十分なデータを記述する必要があります。それ以外の場合、書き込み処理はアプリケーションに非同期で、エラーが検出される前にソケットを閉じます。

このタスクではPrintWriterを使用しません。

+0

どのくらいのデータで十分でしょうか? PrintWriterでない場合は何をお勧めしますか? – Seattle427

関連する問題