读取没有传输结束字符的套接字输入流



我正试图从一个没有编写的服务器程序中读取回数据。服务器程序不发送任何类型的传输结束字符,并且在发送响应后不会关闭套接字。我可以在服务器上按下一个按钮手动关闭连接,如果我在(安卓)客户端留出一点超时时间,以便有时间按下它,我会将服务器上的数据输入到我的客户端应用程序中。否则,它最终会超时,我没有得到任何回应。既然我无法控制服务器端的协议,我如何关闭连接并从服务器获得响应?谢谢你的帮助。

            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对于输入字节来说是一个糟糕的名称。它没有"测试"。我称之为ib

最新更新