现在我与桌面服务器建立了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
只是DataOutputStream
而buffer
是byte[]
。
另外,我添加了asyncsocket标签,因为我的服务器正在使用它们,不确定这是否会影响任何内容。
答案 0 :(得分:5)
听起来你正在使用TCP。这是TCP的预期行为,您需要升级解析器以支持它。
您不能安全地假设读取端的一大块数据只包含一个命令,另外您不能假设您将在一次读取中获得完整的命令。