2013-04-13 38 views
4

我想通過套接字從我的Android設備向我的node.js服務器發送一個字符串。連接已經工作,但每當我發送字符串時,服務器都會收到其他字符。Socket連接 - Java添加字節

這是我收到的時候我送字符串「漢斯」到Node.js的服務器:

Buffer ac ed 
Buffer 00 05 77 04 68 61 6e 73 

爲UTF8字符串:

?? 
♣w♦hans 

這裏是一個發送了Java部分字符串:

clientSocket = new Socket("xxx.xxx.xxx.xxx",9988); 
ObjectOutputStream clientOut = new ObjectOutputStream(clientSocket.getOutputStream());    

String sendString = "hans";    
clientOut.write(sendString.getBytes()); 
clientOut.flush(); 

那麼爲什麼會發生這種情況呢?

+0

你的接收代碼是什麼樣的?你是如何期待接收者知道弦多長時間的? –

+1

只使用'OutputStream'而不是'ObjectOutputStream'。 – hardartcore

回答

6

您正在使用用於發送序列化對象的ObjectOutputStream,並且必須在另一端通過ObjectInputStream進行解碼。如果你只是在另一端發送字節和讀取字節,那麼你應該只使用一個OutputStream和一個InputStream

+0

最好是'Writer',而不是一個原始的輸出/輸入流。 –

+0

您仍然需要以某種方式對數據進行編碼。否則,接收器將無法知道事情的開始和結束。基本上,OP只是編寫代碼來發送和接收數據,而不是首先設計一個*協議*,它準確指定要發送什麼,何時以及如何發送。 –

+1

'ObjectOutputStream'不用於發送基本數據類型,而是用於Java中的任何可序列化的數據類型。我想你在引用原語時會考慮'DataOutputStream'。 –