Завершение потока Java TCP - PullRequest
       4

Завершение потока Java TCP

0 голосов
/ 27 апреля 2010

Я пытаюсь прочитать из потока tcp сообщение, отправленное клиентом. Дело в том, что после прочтения последней строки моя функция readline не возвращает ноль, и я не могу отладить почему, так как контрольная точка потеряна. Короче говоря, после прочтения последней строки функция readLine должна вернуть ноль, но я ничего не получаю.

вот так выглядит мой код

        StringBuffer sipBuffer = null;
        String lineRead = null;
        readIn = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        try {
                sipBuffer = new StringBuffer();
                while ((lineRead = readIn.readLine()) != null) {
                    sipBuffer.append(lineRead);

                    sipBuffer.append("\n");
                }
            } catch (Exception ex) {
                sipConsole.addText("Error in message: \n");
                sipConsole.addText(ex.getMessage());
                return;
            }

формат сообщения

    String inviteReq = "INVITE sip:" + destIP + "@sip.umsy.edu SIP/2.0" + "\n"
            + "From: \"" + myName + "\" <sip:" + myIP + "@sip.umsy.edu>" + "\n"
            + "To: <sip:" + destIP + "@sip.umsy.edu>" + "\n"
            + "Allow: INVITE, ACK, BYE" + "\r\n";

Ответы [ 5 ]

1 голос
/ 27 апреля 2010

readLine () вернет ноль, когда поток закрыт. Вы действительно уверены, что поток закрывается?

Кажется, вы читаете SIP-сообщение, и в этом случае другой конец, вероятно, не закроет соединение до тех пор, пока вызов не будет завершен или, по крайней мере, пока он не ответит или не прекратит работу, пока не получит ответ. Вам нужно будет следовать протоколу SIP и обрабатывать сообщения в потоке в соответствии со спецификацией SIP.

1 голос
/ 27 апреля 2010

Клиент закрыл поток, в который пишет? Если это не так, ваш readLine() блокирует дополнительные данные от клиента. Протоколы клиент-сервер обычно устанавливают механизм (отличный от закрытия потока) для указания размера. Будь то длина контента или специальный токен.

0 голосов
/ 27 апреля 2010

Я подозреваю, что клиент не закрыл сокет после отправки сообщения, поэтому сервер заблокирован в ожидании новых строк. Это тот случай?

Помните, что readline () возвращает ноль, только если достигнут конец потока. Если ваш протокол требует постоянно открытого соединения между клиентом и сервером, вам придется определять конец сообщения другим способом.

0 голосов
/ 27 апреля 2010

Обязательно закройте соединение на стороне клиента после отправки сообщения. В противном случае серверная сторона заблокирует и будет ждать больше данных.

0 голосов
/ 27 апреля 2010

Пожалуйста, проверьте, сбрасываете ли вы и закрываете ли вы OutputStream на стороне клиента, чтобы ваш InputStreamReader не блокировался и постоянно ожидал на стороне сервера?

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