【问题标题】:Socket connection - Java adds bytes套接字连接 - Java 添加字节
【发布时间】:2013-04-05 21:07:07
【问题描述】:

我想通过套接字将字符串从我的 Android 设备发送到我的 node.js 服务器。连接已经工作了,但是每当我发送字符串时,服务器都会收到额外的字符。

这是我将字符串“hans”发送到 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();

那么为什么会这样呢?

【问题讨论】:

  • 您的接收代码是什么样的?你怎么希望接收者知道字符串有多长?
  • 只使用OutputStream 而不是ObjectOutputStream

标签: java android node.js sockets


【解决方案1】:

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

【讨论】:

  • 最好是Writer,而不是原始的输出/输入流。
  • 您仍然需要以某种方式对数据进行编码。否则,接收者将无法知道事情的开始和结束。基本上,OP 只是编写了发送和接收数据的代码,而没有首先设计一个 protocol 来精确指定要发送的内容、时间和方式。
  • ObjectOutputStream 不是用于发送原始数据类型,而是用于 Java 中的任何可序列化数据类型。我猜你在提到原语时会想到DataOutputStream
  • 谢谢大家,成功了!
猜你喜欢
  • 2016-01-27
  • 2013-02-02
  • 1970-01-01
  • 2021-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多