2011-10-31 42 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個字符。