2013-04-13 34 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'。 –