2011-05-28 58 views
0

我通過兩個步驟將數據發送到服務器: 1)我將使用字節發送的數據長度[4] 2)數據。Java - InputStream - 輸入測試

服務器偵聽數據的確切長度(先發貨),然後回覆。

所以我聽InputStream並嘗試獲取數據。

我的問題: 無論我在做什麼,我只得到我發送的流,但服務器明確地發送一個新的字符串。

看來我不能等待-1(字符串的末尾),因爲程序會超時,並且我確信服務器不會發送任何內容。

因此,我正在使用inputStream.available()來查找緩衝區中剩餘的字節數。

一旦我在讀完所有數據後發送inputStream.read(),它將會以「網絡空閒超時」超時。

但我需要聽取inputStream以確保我不會丟失信息。

爲什麼我只接收我發送的信息,而不是服務器發送的信息? 如何收聽新項目的連接?

這裏是我的代碼:

private void sendData (byte[] sendBytes){ 
     try { 
      os.write(sendBytes); 
      os.flush(); 
     } catch (IOException ex) { 
     } 
    } 

請幫 THD

+1

我不明白你想要做什麼,但使用is.available()不正確。服務器在做什麼?客戶在做什麼?它是什麼類型的服務器? – Kaj 2011-05-28 18:52:21

+0

我想要做什麼: 從服務器接收數據。 客戶端發送數據,服務器接收它們(正確測試服務器端的人員)。 服務器發送數據,但客戶端不讀取正確的數據,但只讀取客戶端發送之前的字符串,一旦服務器發送了某些內容(不同)。 我不知道它是什麼樣的服務器,我不能在星期一之前問服務器的傢伙。 – TDH 2011-05-28 18:58:43

+0

我可以看到我收到的數據: inputStream.parent.Inherited.buf.0-99 iStreams設置爲1,connectionOpen爲true 我可以發佈的任何其他內容,這會有所幫助嗎? – TDH 2011-05-28 19:01:55

回答

1

這就是你平時閱讀器讀取的所有數據(至另一端閉合):

//BufferedReader is 
StringBuilder data = new StringBuilder(); 
char[] buffer = new char[1024 * 32]; 
int len = 0; 
while ((len = is.read(buffer)) != -1) { 
    data.append(buffer, 0, len); 
} 

//data will on this line contain all code received from the server

+0

StringBuilder在我的Java中不可用。我用StringBuffer替換它。 is.read(buffer)不可用。最後,等待-1讓我暫停。 – TDH 2011-05-28 19:23:02

+0

你的Java?你在寫什麼? – Kaj 2011-05-28 19:39:08

+0

MIDP(Mobility) – TDH 2011-05-28 19:45:17