Socket, BufferedReader зависает при readLine ()

У меня есть сервер, который сначала делает это: -

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);
  • "pass it to foo \ n "
  • " \ n "

Как решить проблему? Благодарим за любую помощь в этом отношении.

13
задан bluish 7 March 2012 в 14:16
поделиться