Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
附加tcp数据包是否存在只读取数据包的一部分的情况?C#_C#_Networking_Tcp - Fatal编程技术网

附加tcp数据包是否存在只读取数据包的一部分的情况?C#

附加tcp数据包是否存在只读取数据包的一部分的情况?C#,c#,networking,tcp,C#,Networking,Tcp,我写了一个解析器来解析我在TCP读取中获得的数据,因为即使发送多个数据包,它们也可能在一次读取中获得,我的问题是,一次数据包是否可以在两个读取命令中读取,或者如果我读取数据包的一些数据,这意味着所有数据包数据都可用,并且将在同一次调用中读取?一段代码就很好了,但我想你说的是通过tcp套接字接收的数据。。。在这种情况下,答案是:不,当网络设备读取数据包时,您将看不到数据包的内容。。。一旦它通过TCP堆栈检查数据包的校验和,就会得到它。。。在校验和被验证之前,您不会得到数据,因此您能得到的最小数据块

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

一段代码就很好了,但我想你说的是通过tcp套接字接收的数据。。。在这种情况下,答案是:不,当网络设备读取数据包时,您将看不到数据包的内容。。。一旦它通过TCP堆栈检查数据包的校验和,就会得到它。。。在校验和被验证之前,您不会得到数据,因此您能得到的最小数据块是一个完整数据包的内容。TCP是一个流,只有下面的IP层将其划分为单独的数据包。您可以调用
Send()
或类似的API,然后IP层将流按其认为合适的方式划分为数据包。所以,您不能依赖于一次调用中到达的整个缓冲区


或者,用一个极端的例子来解释:假设您调用
Send(巨大的1GB缓冲区)
。你希望读者表现如何?

很难理解你在问什么。你能提供一些代码吗?