我编写了一个解析器来解析我在 TCP 读取中获得的数据,因为即使发送多个数据包它们可能会在一次读取中获得,我的问题是是否可以在 2 个读取命令中读取一次数据包,或者我是否读取了数据包的一些数据这意味着所有数据包数据都可用并且将在同一个调用中读取?
问问题
57 次
2 回答
0
一段代码肯定会很好,但我认为你是在谈论通过 tcp 套接字接收的数据......在这种情况下,答案是:不,你不会看到数据包的内容被网络设备读取...一旦它通过检查数据包校验和的 TCP 堆栈,您就会得到它...在校验和被验证之前您不会获得数据,因此您可以获得最小的数据是一个完整数据包的内容
于 2013-04-07T11:59:48.377 回答
0
TCP 是一个流——只有下面的 IP 层将它分成单独的数据包。您调用Send()
或类似的 API,然后 IP 层以任何它认为合适的方式将流分成数据包。因此,您不能依赖一次调用到达的整个缓冲区。
或者,用一个极端的例子来解释:想象你打电话给Send(huge_1GB_buffer)
. 您希望读取的行为如何?
于 2013-04-07T13:44:38.117 回答