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

标签 java sockets

在我的小 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/

相关文章:

c# - 通过套接字从 C++ wchar_t 到 C# char

java - Spring-Boot JPA - 使用 JSON RequestBody 中的外键插入数据库会导致空对象

java - Jpa语法错误解析

创建ip网络数据包

c# - 允许处理无响应消息的请求-响应逻辑

java - 在套接字编程中,我在服务器端接收字符串时出错,该字符串的代码是用 c 编写的

java - 将序列的下一个值与字符串连接起来

java - GitHub 在不同的分支上工作,但在同一个类上。我们如何 merge 这个?

java - 并行处理: class file has wrong version 49. 0,应该是48.0

iphone - iPhone EDGE/3G网络端口范围?有人知道吗