2016-10-26 3 views
1

Мы снизили время TCP KeepAlive на наших серверах по умолчанию от 7200 до 500.
Я пытаюсь написать небольшую программу java для проверки того, что этот сервер фактически использует эти обновленные настройки. Если я вручную сделаю telnet для хоста из командной строки, он истечет, как и ожидалось. Когда я запускаю эту программу, if (out.checkError()) должен возвращать true, но это не так. Что может быть проблемой?Программа проверки Java KeepAlive не возвращает true для .checkError

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

Смежные вопросы