我有一台服务器,最初它执行以下操作:
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"
- "how are u?\n"
- "\n"
- "传递给foo\n"
- "\n"
问题在于有时候"foo"没有收到它的响应。它在readLine()
中挂起。
服务器中readLine()
使用的是预读取缓冲区吗?导致"foo"类被饿死的可能性有多大?
如果我在客户端加一个sleep,它可以工作。但这样做总会成功的几率是多少?
- "bar\n"
- "how are u?\n"
- "\n"
sleep(1000);
- "传递给foo\n"
- "\n"
如何解决这个问题?感谢任何关于此事的帮助。
ready()
方法来检查数据是否准备好,然后再尝试读取它。 - eeewhile(true) { if (br.ready()) { br.read(cb); cb.flip(); String msg = cb.toString(); if (msg == null) break; } }
中的cb是特定缓冲区大小的CharBuffer。这种技术将允许读取缓冲区内允许的多行。 - eee