2015-05-17 64 views
2

我有一個Android應用程序。它將數據發送到基於Java的程序。 Android的代碼:writeUTF後的額外字符

 Socket socket = new Socket(InetAddress.getByName("10.0.3.2"), 5555); 

     OutputStream sout = socket.getOutputStream(); 
     DataOutputStream out = new DataOutputStream(sout); 


     out.writeUTF(jsonLoginData.toString()); 

//  IN jsonLoginData i put some values in another part of code 
//  jsonLoginData = new JSONObject(); 
//  jsonLoginData.put("login",login); 
//  jsonLoginData.put("password",password); 

     out.flush(); 
     out.close(); 

因此,在另一面,我有這一邊收聽5555端口和獲取數據的基於Java的proram:

// var "s" is a socked listening 5555 port 

InputStream is = s.getInputStream(); 

BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(s.getInputStream())); 

    String line; 
    String r = ""; 
    StringBuilder content = new StringBuilder(); 

     // read from the urlconnection via the bufferedreader 
      while ((line = bufferedReader.readLine()) != null) 
      { 
      r = r + line; 
      } 

    bufferedReader.close(); 

    System.out.println("\n ==>" + r); 

但問題是,每次我有多餘的字符變種「R 」。 控制檯顯示我:

==> <{"password":"6f3fa6ad89a459af8e1819c514059b3","login":"456"} 

==> ={"password":"e516fac382793b462d6a19fa849db53a","login":"456"} 

==> B{"password":"6f3fa6ad89a459af8e1819c514059b3","login":"456111414"} 

正如你可以看到有陌生前symboles 「{...}」 喜歡 「<」 或 「=」 或 「B」。 不明白爲什麼id會這麼...

+0

你記錄了'jsonLoginData.toString()'以確保它不包含奇怪的符號嗎? – pathfinderelite

+2

如果您正在寫入'DataOutputStream',那麼您應該從'DataInputStream'中讀取數據。如果你想從'InputStream'讀取,然後寫入'OutputStream'。不要混合流類型,否則你可能會得到意想不到的效果,就像你發現的那樣。 – rossum

+0

@rossum--他們不是自己決定拋出一個DataOutputStream。必須有一個神奇的教程,每個人似乎都在抄襲,我很想知道哪一個。 – ZhongYu

回答

3

不要使用DataOutputStream。只需將您的字節寫入OutputStream即可。

OutputStream sout = socket.getOutputStream(); 
byte[] bytes = jsonLoginData.toString().getBytes("UTF-8"); 
sout.write(bytes);