Socket连接 - Java添加字节

4
我希望将一个字符串从我的Android设备通过socket发送到我的node.js服务器。连接已经建立,但是每当我发送该字符串时,服务器会接收到额外的字符。
当我向node.js服务器发送字符串“hans”时,这就是我收到的内容:
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();

那么这是为什么呢?

你的接收代码是什么样子的?你是如何期望接收方知道字符串的长度的? - David Schwartz
1
ن½؟用OutputStream而ن¸چوک¯ObjectOutputStreamم€‚ - hardartcore
1个回答

6

您正在使用一个ObjectOutputStream,它用于发送序列化对象,并且必须由另一端的ObjectInputStream进行解码。如果您只是在发送字节并在另一端读取字节,则应该使用OutputStreamInputStream


最好使用“Writer”,而不是原始的输入/输出流。 - Lukas Knuth
你仍然需要以某种方式对数据进行编码。否则,接收者将无法知道事物何时开始和结束。基本上,操作员只是编写了发送和接收数据的代码,而没有先设计一个协议来准确地指定何时、如何以及发送什么内容。 - David Schwartz
1
ObjectOutputStream 不是用于发送原始数据类型的,而是用于发送 Java 中的任何可序列化数据类型。我猜您在提到原始数据类型时想的是 DataOutputStream - Mark Rotteveel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接