在我的小 Java 程序在 readLine
上挂起后,我试图用套接字与设备服务器通信。我最终不得不用数据包嗅探器注入(inject)我的目标应用程序并发现 os.writeBytes("notify\n");
被分成两个数据包,第一个包含 n
和下一个otify
,其中服务器不喜欢。我通过添加另一个 writeBytes
来解决这个问题之前:
os.writeBytes(" ");<br/>
os.writeBytes("notify\n");<br/>
os.flush();
这对我来说似乎有点 hacky 并且可能不稳定,有人可以阐明为什么我必须这样做并给我一个更好的解决方案。
干杯
最佳答案
当使用原始套接字连接时,您永远不能假设您将以离散 block 的形式获取消息。在生产环境中,您完全有可能一次收到部分消息或多条消息。
如果你不想处理这个问题,你应该考虑使用像 Netty 这样的库。它为程序员处理了这些问题。
话虽如此,我同意 Thomas 的观点,您的问题可能与您选择的 writeBytes
有关。
关于Java Socket,小字符串不必要地分成两个数据包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10588299/