现在我已经建立了与我的桌面服务器的Socket
连接。一般来说它工作正常,我试图找到任何剩余的错误。我无法解决的一个问题是当我发送“发送”按钮时。有时它会将意图分开发送的消息合并成一条消息。我很确定这是一个Android问题,而不是我的服务器的问题。这里是一个例子(从服务器输出控制台):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而不是BluetoothSocket时才会合并消息的问题。并不是说我不认为蓝牙插槽可能会有足够的差距来组合,但是这里的流量很少。有什么方法可以确保我的数据包在发送时不会被合并?我浏览过Socket
选项,不知道要寻找什么。下面是我如何发送一个例子,很基本的:
mmDataOut.write(buffer);
哪里mmDataOut
只是一个DataOutputStream
和buffer
是byte[]
。
此外,我添加了asyncsocket标签,因为我的服务器正在使用它们,不知道这是否会影响任何东西。
我有一种感觉,这是由于TCP。我正在使用的解析器无法处理它,所以我可以在解析之前手动遍历字符串以检查重复的JSON消息。现在,我只会抓住错误而忽略解析。谢谢。 – 2012-07-12 23:46:04
你真的应该重新装配成完整的东西。如果性能不是特别关注的话,一次读取一个字符直到找到终止条件很容易。 – 2012-07-12 23:50:20
@Atlos:虽然解析器可能无法处理部分或组合消息(这很好),但仍然有责任将消息拆分为解析器*可以处理的内容。如果因为给解析器不可分析的输入而随机丢弃了消息,那么您的通信将变得不可靠和片断。 – 2012-07-12 23:50:54