我正试图从一个没有编写的服务器程序中读取回数据。服务器程序不发送任何类型的传输结束字符,并且在发送响应后不会关闭套接字。我可以在服务器上按下一个按钮手动关闭连接,如果我在(安卓)客户端留出一点超时时间,以便有时间按下它,我会将服务器上的数据输入到我的客户端应用程序中。否则,它最终会超时,我没有得到任何回应。既然我无法控制服务器端的协议,我如何关闭连接并从服务器获得响应?谢谢你的帮助。
cSocket.setSoTimeout(timeOut);
cOut = new PrintWriter(cSocket.getOutputStream(), true);
cOut.println(msgIn);
cIn = new BufferedReader(new InputStreamReader(
cSocket.getInputStream()));
int intTest;
while ((intTest = cSocket.getInputStream().read()) != -1) {
System.out.println(cIn.readLine());
来自服务器的消息如下所示:char(60)。。。char(62)char(60)。。。char(62)char(60)。。。char(62)char(60)。。。焦(62)
是字符中的随机数据不重复。
*最终编辑
它是这样工作的:
int c;
int intCount = 0;
StringBuilder response= new StringBuilder();
while ((c = cIn.read()) != -1) {
response.append( (char)c ) ;
if (c == 62) {
intCount = intCount + 1;
}
if (intCount >=4) {
cSocket.close();
String result = response.toString();
System.out.println(result);
break;
}
}
while ((intTest = cSocket.getInputStream().read()) != -1) {
System.out.println(cIn.readLine());
这没有任何意义。仅仅因为你读了一个字节并不意味着你可以读另一整行,你就是在扔掉你读过的字节。应该是:
while ((intTest = cSocket.getInputStream().read()) != -1) {
System.out.println(intTest);
而intTest
对于输入字节来说是一个糟糕的名称。它没有"测试"。我称之为i
或b
。