Android套接字连接组合发送

tre*_*r-e 1 java sockets android 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":[]}
Run Code Online (Sandbox Code Playgroud)

这导致我的JSON解析器无法正常工作.我有能力通过蓝牙或Wifi连接到我的服务器,我注意到组合消息的问题只发生在使用Wifi而不是BluetoothSocket时.并不是说我不认为BluetoothSocket可能会滞后到这样的组合,但是在那里运行的流量要少得多.有没有办法确保我的数据包在发送时不会被合并?我环顾了各种Socket选择,不知道该找什么.这是我发送的一个例子,非常基本:

mmDataOut.write(buffer);

哪里mmDataOut只是一个DataOutputStream而且buffer是一个byte[].

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

Chr*_*ton 5

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

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