2013-04-07 12 views
-1

我写了一个解析器来解析我在TCP中读取的数据,因为即使发送多个数据包时它们可能会在一次读取中,我的问题是如果一次数据包可能在2个读取命令中读取,或者如果我读取了一些数据的分组意味着所有分组数据都可用,并且将在相同的呼叫中被读取?附加tcp数据包是否有任何情况下只读取部分数据包? C#

+0

很难理解你在问什么。你能提供一些代码吗? – Xaqron 2013-04-07 11:53:46

回答

0

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

0

TCP是一个流 - 只有下面的IP层将它分成单独的数据包。您可以拨打Send()或类似的API,然后IP层以任何合适的方式将数据流分成数据包。所以,你不能依靠整个缓冲来到一个电话。

或者,用一个极端的例子来解释一下:假设您拨打Send(huge_1GB_buffer)。你会如何期待阅读行为?

相关问题