2011-10-31 53 views
0

对于新项目,我正在使用GPS跟踪设备。该设备每10秒发送一次信息给我的java服务器。我也创建了一个android应用程序。在android应用程序中,我打开与服务器的连接,发送数据并再次关闭连接。从GPS跟踪设备读取,输入流

问题是跟踪设备不会每次都关闭连接。

我有什么:

我有一个启动一个新线程时,有一个新的连接multithreades服务器。 我可以阅读跟踪器发送给我的信息,但只有第一个点,然后我不再收到信息(好吧,我收到它,但我不能让它显示)。

当我使用的代码.readLine()它的工作原理,如果我关闭跟踪器(和连接。但那不是解决办法,这不叫现场跟踪

这是我现在用的阅读部分

public Request(Socket connectionSocket) throws IOException { 
    System.out.println(connectionSocket.getInetAddress().toString()); 
    InputStreamReader temp = new InputStreamReader(connectionSocket.getInputStream()); 
    StringBuilder out = new StringBuilder(); 
    int read = 0; 
    out = new StringBuilder(); 

    char[] buffer = new char[0x127]; 
    do { 
     System.out.println("test"); 
     read = temp.read(buffer, 0, buffer.length); 
     System.out.println(temp.toString()); 
     if (read > 0) { 
      out.append(buffer, 0, read); 
     } 
     System.out.println(out.toString()); 
     this.handleRequest(out.toString()); 

    } while (temp.read() != 0); 


    connectionSocket.close(); 

    clientSentence = out.toString(); 
    System.out.println(out.toString()); 
} 

有人能帮助我,我怎么会阅读所有信息,这些信息串总是长127个字符。

感谢

Wouter

+0

如果你需要长度为127,用char [] buffer = new char [127];替换'char [] buffer = new char [0x127];''。 0x值被解释为十六进制,它是十进制的295。如果您尝试读取295个字节并仅发送127个字节,则read()将永远等待,否则缓冲区永远不会被填充。 – Stephan

+0

我改变了,但那不是解决方案。抱歉。事实上,我会打开连接。该设备发送127个字符...我需要这些字符。 10秒钟后设备再次发送。然后。我再次需要这些字符......所以连接必须保持开放,但每次需要127个字符。 – TwinsIT

回答

0

while表达式包含试图读取第128个字符的第二个“read()”。这是阻止并失去同步。

我认为应该只有一个“读取(缓冲区,0,127)”在循环中只读127个字符。