我正在处理的应用程序有两个部分。服务器部分在Linux机器上运行。客户端部分是一个Android应用程序,它会查询服务器并获得必要的响应。这两个部分都是用Java编写的,使用基于套接字的通信,并传输文本数据。
发送请求后,客户端收到响应的方式如下:
public static String ReadAvailableTextFromSocket(BufferedReader input) throws IOException {
if (input.ready() == false) {
return null;
}
StringBuilder retVal = new StringBuilder();
while(input.ready()) {
char ch = (char) input.read();
retVal.append(ch);
}
return retVal.toString();
}
然而,这似乎并不可靠。由于服务器响应时间或传输延迟,输入并不总是准备就绪。
看起来input.ready()不是等待获取数据的正确方法。
我想知道是否有更好的方法来实现这一目标。也许我可以使用一些标准的练习。
答案 0 :(得分:0)
也许您应该使用Threads。将侦听器线程保留在while(true)
循环中,该循环在读入时读取更多数据,并简单地将数据缓存在与主线程共享的数据结构(比如队列)中。这样,主线程可以根据需要简单地将数据出列。如果队列为空,则可以推断没有收到新数据。
修改:请参阅此multithreaded chat server/client代码作为示例。
答案 1 :(得分:0)
以下是我解决这个问题的方法。由于我负责编写客户端和服务器端,当请求到达服务器时,我发送的第一行信息作为响应是客户端可以预期的字节数。这样,客户端首先等待读取一行。一旦读取了该行,客户端现在就知道服务器需要多少字节的数据。
希望这有助于其他人。
的问候,
彼得