Java Socket,小字符串不必要地分割成两个数据包

3
我试图使用Socket与设备服务器通信,但当我的Java程序在readLine时挂起后,我不得不用数据包嗅探器注入我的目标应用程序,并发现os.writeBytes("notify\n");被分成了两个数据包,第一个包含n,下一个包含otify,服务器不喜欢这样。我通过在前面添加另一个writeBytes来解决了这个问题:
os.writeBytes(" "); os.writeBytes("notify\n"); os.flush();
对我来说,这似乎有点繁琐和不稳定。有人能告诉我为什么我必须这样做并给我更好的解决方案吗?
谢谢

TCP套接字,还是其他什么? - Mat
你使用writeBytes而不是其他类型的write有什么原因吗? - Thomas
如果您正在通过TCP连接发送字符串,我想不出为什么会出现问题,因为TCP提供数据通信流。尝试在写入字符串后刷新输出流(os.flush())。 - smichak
1个回答

2
当使用原始套接字连接时,你永远不能假设你会一次性收到完整的消息。在生产环境中,你可能会收到部分消息或同时收到多个消息。
如果你不想处理这个问题,你应该考虑使用像Netty这样的库,它可以为程序员处理这些问题。
话虽如此,我同意Thomas的观点,你的问题可能与你选择的writeBytes有关。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接