У меня есть сервер, который изначально делает это: -
BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
for (;;) {
String cmdLine = br.readLine();
if (cmdLine == null || cmdLine.length() == 0)
break;
...
}
, позже он передает сокет другому классу "foo". Этот класс ожидает сообщений, специфичных для приложения.
BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
appCmd=br.readLine();
Мой клиент отправляет эту последовательность:
- "bar \ n"
- "Как дела? \ N"
- "\ n"
- "передача его в foo \ n"
- "\ n"
Проблема в том, что иногда "foo" не получает ответ.Он зависает в readLine()
.
Какова вероятность того, что readLine()
на сервере буферизует данные с использованием опережающего чтения и класс "foo" становится голодным?
ЕслиЯ добавляю сон на стороне клиента, он работает.Но какова вероятность того, что он всегда будет работать?
- "bar \ n"
- "Как дела? \ N"
- "\ n"
sleep(1000);
- "передача его в foo \ n"
- "\ n"
Как исправитьэта проблема?Ценю любую помощь в этом отношении.