TCP包是附加的,在任何情况下,只有一部分包会被读取吗?c#

本文关键字:包会 一部分 读取 在任何情况下 TCP | 更新日期: 2023-09-27 18:08:06

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

TCP包是附加的,在任何情况下,只有一部分包会被读取吗?c#

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

TCP是一个流——只有下面的IP层把它分成单独的数据包。您调用Send()或类似的API,然后IP层将流分成任何它认为合适的数据包。所以,你不能指望整个缓冲区在一次调用中到达。

或者,用一个极端的例子来解释:假设你呼叫Send(huge_1GB_buffer)。你期望读取器表现如何?

相关文章: