Java套接字,不必要地将小字符串拆分为两个数据包
我试图用套接字与设备服务器通信,在Java套接字,不必要地将小字符串拆分为两个数据包,java,sockets,Java,Sockets,我试图用套接字与设备服务器通信,在readLine上挂起我的小Java程序后,我不得不向目标应用程序注入数据包嗅探器,并发现os.writeBytes(“notify\n”)被拆分为两个数据包,第一个包含n,下一个包含otify,服务器不喜欢这些数据包。我通过在前面添加另一个writeBytes来解决这个问题: os.writeBytes(“”) os.writeBytes(“通知”) os.flush(); 对我来说,这似乎有点骇客和潜在的不稳定,有人能告诉我为什么我要这么做,并给我一个更
readLine
上挂起我的小Java程序后,我不得不向目标应用程序注入数据包嗅探器,并发现os.writeBytes(“notify\n”)
被拆分为两个数据包,第一个包含n
,下一个包含otify
,服务器不喜欢这些数据包。我通过在前面添加另一个writeBytes
来解决这个问题:
os.writeBytes(“”)
os.writeBytes(“通知”)
os.flush();
对我来说,这似乎有点骇客和潜在的不稳定,有人能告诉我为什么我要这么做,并给我一个更好的解决方案
干杯当使用原始套接字连接时,您永远不能假设您将以离散块的形式收到消息。在生产环境中,您完全有可能同时收到部分消息或多条消息
如果你不想处理这个问题,你应该考虑使用一个类似的程序库来处理程序员的这些问题。
话虽如此,我同意Thomas的观点,您的问题可能与您选择的
writeBytes
TCP套接字有关,或者别的什么?你使用writeBytes而不是另一种写入方式有什么原因吗?如果你通过TCP连接发送字符串,我想不出这会导致问题的原因,因为TCP提供了数据通信流。写入字符串后,尝试刷新输出流(os.flush())。