2013-05-26 45 views
1

你好,所以即時通訊工作在一個應用程序的Windows(C#)和Android(Java),兩者通過TCP通信,我已經讓他們都互相發送字符串,但是當我想看看是否收到的字符串等於「abc」,它不會因爲某種原因與java端(我認爲)工作。這是爲Android側如果在字符串上的語句不會工作

int bytesRead; 
byte[] outputOutStream = new byte[1024]; 
bytesRead = ins.read(outputOutStream, 0, outputOutStream.length); 

String received; 
received= Integer.toString(bytesRead); 

String str = new String(outputOutStream); 

txtView1.setText(str); 

String code = "abc"; 
if (str.equals(code)) { 
    AlertDialog alertDialog = new AlertDialog.Builder(MainActivity.this).create(); 
    alertDialog.setTitle("You Said..."); 
    alertDialog.setMessage(str); 
    alertDialog.show(); 
} 

位的Java代碼但由於某些原因,它不會有AlertDialog彈出,當我使Windows(C#)通過發送字符串「ABC」。

+1

你確定字符串確實是一樣的嗎?嘗試轉儲字節。您可能有編碼問題。 –

+0

什麼是str?你應該檢查。 –

+0

當我有它顯示字符串,它顯示「abc」,但是當我檢查它是否等於「abc」它說它不是 – jLynx

回答

1

使用Arrays.toString(str.getBytes())轉儲字符串的字節內容。

我懷疑字符串在最後會有很多空字節,因爲outputOutStream沒有完全填充。你需要的構造函數是String(byte[] bytes, int offset, int length)。用0作爲偏移調用它,並以bytesRead作爲長度。

+0

謝謝你是正確的,最後有很多空字節,所以現在我有點困惑我將如何使用字符串(字節[]字節,int偏移量,int長度)來修復這個,請給我一個例子嗎?我想你的意思是'bytesRead = ins.read(outputOutStream,0,bytesRead.length);'但是我有點困惑) – jLynx

+0

'String str = new String(outputOutStream,0,bytesRead);' – tom

+0

你這麼多:) – jLynx