Входной поток сокета сервера, возвращающий ноль перед отключением - PullRequest
3 голосов
/ 22 февраля 2012

Я пытаюсь справиться с клиентскими отключениями в простом Java-приложении, которое отправляет сообщения чата с использованием клиента и сервера.

Вот проблема

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();
    }

}

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

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

Ответы [ 2 ]

4 голосов
/ 22 февраля 2012

Единственное объяснение, которое я могу придумать:

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

Вы говорите:

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

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

0 голосов
/ 22 февраля 2012

Похоже, что возвращаемый ноль находится в строке формы, поэтому он ведет себя так.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...