在没有传输字符结束的情况下读取套接字输入流?
Reading Socket Inputstream Without End Of Transmission Character?
我正在尝试从不是我编写的服务器程序中读回数据。服务器程序不会发送任何类型的传输结束字符,并且在发送响应后不会关闭套接字。我可以在服务器上按下一个按钮来手动关闭连接,如果我在 (android) 客户端留了一点超时时间,那么我有时间按下它,我确实从服务器进入我的客户端应用程序。否则它最终会超时,我得不到任何回应。由于我无法控制服务器端的协议,我该如何关闭连接并从服务器获取响应?感谢您的帮助。
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());
来自服务器的消息如下所示:
字符(60)...字符(62)字符(60)...字符(62)字符(60)...字符(62)字符(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
是输入字节的糟糕名称。没有关于它的 'test'。我会称之为 i
或 b
.
我正在尝试从不是我编写的服务器程序中读回数据。服务器程序不会发送任何类型的传输结束字符,并且在发送响应后不会关闭套接字。我可以在服务器上按下一个按钮来手动关闭连接,如果我在 (android) 客户端留了一点超时时间,那么我有时间按下它,我确实从服务器进入我的客户端应用程序。否则它最终会超时,我得不到任何回应。由于我无法控制服务器端的协议,我该如何关闭连接并从服务器获取响应?感谢您的帮助。
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());
来自服务器的消息如下所示: 字符(60)...字符(62)字符(60)...字符(62)字符(60)...字符(62)字符(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
是输入字节的糟糕名称。没有关于它的 'test'。我会称之为 i
或 b
.