Почему операторы цикла while не выполняются?

1

Проблема для меня ничего не выполняется после цикла? в чем проблема? (Строки после окончания цикла while никогда не выполняются)

client = serverSocket.accept();
BufferedReader in = new BufferedReader(
                            new InputStreamReader(client.getInputStream())
);

while ((line = in.readLine()) != null) {
    Log.i("line",line);
    line111 +=line;
    Log.i("line111",line111);
}

//Any code below this is not executed
Log.i("shan","Shan");
  • 1
    Либо вы бросаете, либо цикл никогда не заканчивается.
  • 0
    Цикл заканчивается, когда я получаю выходные данные для первых 3 строк ... так что, включая разрыв после выполнения, в то время как цикл в течение 50 раз принесет пользу ??
Показать ещё 2 комментария
Теги:

2 ответа

6
Лучший ответ

Ваш цикл while застрял в очереди на следующую строку. Источнику потока необходимо закрыть соединение с его конца.

  • 0
    наконец-то хороший ответ! +1
3

Этот код "while ((line = in.readLine())! = Null)" имеет значение только тогда, когда вы читаете файл, который имеет постоянный размер, и, наконец, вы достигнете его. Когда вы читаете из сокета, вы вводите состояние блокировки (ожидая отправки удаленных клиентов для передачи данных).

Вам нужно добавить, может быть, тайм-аут по методу чтения docket, если вы хотите выйти из цикла.

  • 1
    Это также актуально при чтении из сокета. Вам просто нужно понять, что цикл закончится только тогда, когда другая сторона сокета закрыта.
  • 0
    Могут быть случаи, когда удаленный клиент закрыт, и вы не получаете событие сразу. Я знаю случаи в C #, когда вы можете оставаться заблокированным в течение длительного времени.
Показать ещё 7 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню