1

现在我已经Socket与我的桌面服务器建立了连接。一般来说,它工作正常,我正在尝试找到任何剩余的错误。我无法解决的一个问题是当我向“发送”按钮发送垃圾邮件时。有时它会将原本要单独发送的消息组合成一条消息。我相当确定这是一个 Android 问题,而不是我的服务器的问题。这是一个发生的例子(来自服务器的控制台输出):

XX.XX.XX.XX: {"control":[],"commands":[]}
XX.XX.XX.XX: {"control":[],"commands":[]}
XX.XX.XX.XX: {"control":[],"commands":[]}
XX.XX.XX.XX: {"control":[],"commands":[]}{"control":[],"commands":[]}

这导致我的 JSON 解析器无法正常工作。我能够通过蓝牙或 Wifi 连接到我的服务器,并且我注意到合并消息的问题仅在使用 Wifi 而不是 BluetoothSocket 时发生。并不是说我认为 BluetoothSocket 的延迟不足以像这样组合,但是那里运行的流量要少得多。有什么方法可以确保我的数据包在发送时不会被合并?我环顾四周,Socket不知道要寻找什么。这是我如何发送的示例,非常基本:

mmDataOut.write(buffer);

where mmDataOutis just a DataOutputStreamand bufferis a byte[]

另外,我添加了 asyncsocket 标签,因为我的服务器正在使用它们,不确定这是否会影响任何事情。

4

1 回答 1

5

听起来您正在使用 TCP。这是 TCP 的预期行为,您需要升级解析器以支持它。

您不能安全地假设来自读取端的一大块数据将仅包含一个命令,此外您也不能假设您将在一次读取中获得整个命令。

于 2012-07-12T23:14:51.533 回答