2012-02-22 3 views
3

Я пытаюсь разобраться с клиентскими разъединениями в простом java-приложении, которое отправляет чат-сообщения с использованием клиента и сервера.Серверный сокет Входной поток, возвращающий значение null перед отключением

Вот проблема

public void run() { 
    try { 
     System.out.println("Client Connected"); 
     String inputLine; 

     while ((inputLine = in.readLine()) != null) { 
      System.out.println(inputLine); 
      theServer.handle(inputLine, this); 
     } 
     out.close(); 
     in.close(); 
     socket.close(); 
     System.out.println("Client Disconnected"); 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

} 

С помощью этого кода здесь, он запускает время цикла, а строка ввода не является нулевым. Если он равен нулю, он остановит цикл и закроет потоки ввода и вывода, а также сокет. Теперь это все работает нормально, кроме выхода в консоли заключается в следующем:

Client Connected 
null 
Client(/127.0.0.1): null 
null 
Client(/127.0.0.1): null 
null 
Client(/127.0.0.1): null 
null 
Client(/127.0.0.1): null 
Client Disconnected 

Я не могу понять, почему цикл будет держать цикл, даже если вход нулевой !! Кажется, требуется некоторое время, чтобы понять, что перед запуском цикла он равен нулю. Мне нужно, чтобы он спустился без промедления.

Любая помощь будет оценена,

shadrxninga

ответ

4

Единственное объяснения, что я могу думать о том, является:

  • in.readLine() возвращает строку "null" (возможно, с задними пробелами),
  • in относится к какому-то пользовательский потоку или считывающей обертке которого readLine() метод делает что-то странное, или
  • это не тот код, который вы фактически выполняете.

Вы говорите:

«Кажется, потребуется некоторое время, чтобы понять, что это нуль перед выходом из цикла.»

Это объяснение «программирование вуду». Это не может быть правильным, если в вашей реализации Java нет ошибки. И это чрезвычайно маловероятно.

+0

В связи с этим: \t \t in = new BufferedReader (новый InputStreamReader (socket.getInputStream())); – shadrx

+0

Я знаю, что то, что я сказал, невозможно, это просто то, что, кажется, происходит. Код выполняется, так как код печатает информацию на консоли. – shadrx

+0

Итак - единственное решение, которое, как я думаю, будет работать, - это первое, что вы мне дали. – shadrx

0

Ну, похоже, что нулевая возвращается в виде строки, так вот почему он ведет себя таким образом.