У меня есть сервер, который изначально делает это: -
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();
Мой клиент отправляет эту последовательность:
- "бар\п"
- "как u?\n"
- "\ п"
- ", передавая его foo\n"
- "\ п"
Проблема в том, что иногда "foo" не получает ответа. Он зависает в readLine()
.
Какова вероятность того, что readLine()
на сервере буферизует данные с помощью чтения вперед, а класс "foo" становится голодным?
Если я добавляю сон на стороне клиента, он работает. Но какова вероятность того, что он всегда будет работать?
- "бар\п"
- "как u?\n"
- "\ п"
-
sleep(1000);
- ", передавая его foo\n"
- "\ п"
Как устранить проблему? Оцените любую помощь в этом отношении.