Android套接字连接组合发送

时间:2012-07-12 22:47:21

标签: java android sockets asyncsocket

现在我与桌面服务器建立了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);

其中mmDataOut只是DataOutputStreambufferbyte[]

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

1 个答案:

答案 0 :(得分:5)

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

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