附加tcp包是否有任何情况只会读取一部分数据包? C#

时间:2013-04-07 11:47:11

标签: c# networking tcp

我写了一个解析器来解析我在TCP读取中得到的数据,因为即使发送多个数据包,它们也可能在一次读取中得到,我的问题是,如果一次数据包可能在2个读取命令中读取,或者我读取了一些数据这意味着所有分组数据都可用,并且将在同一个呼叫中读取?

2 个答案:

答案 0 :(得分:0)

一段代码可以肯定,但我认为你在谈论通过tcp套接字收到的数据......在这种情况下答案是:不,你不会看到一个内容数据包正在被网络设备读取...一旦它通过TCP堆栈检查数据包的校验和,你就得到它...你在验证校验和之前不会获得数据,因此是最小的数据你可以得到的是一个完整数据包的内容

答案 1 :(得分:0)

TCP是一个流 - 只有下面的IP层将其划分为单个数据包。您调用Send()或类似的API,然后IP层将流划分为任何它认为合适的方式。因此,您不能依赖于一次调用中的整个缓冲区。

或者,用一个极端的例子来解释:想象一下你打电话给Send(huge_1GB_buffer)。您期望读取行为如何?