Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.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
C# 套接字数据处理-用于数据打包(TCP)_C#_Sockets_Tcp - Fatal编程技术网

C# 套接字数据处理-用于数据打包(TCP)

C# 套接字数据处理-用于数据打包(TCP),c#,sockets,tcp,C#,Sockets,Tcp,我在做一个插座项目。我想用TCP发送~4kb的数据。我需要在这里问一个问题。也就是说:如果我使用TCP发送~4kb的数据,我的数据处理函数是否可以再次接收该数据?即可以接收(服务器端)功能返回2次(如果我发送~4kb数据一次)?如果我能理解这一点,我将开始制作自己的数据包处理系统 简而言之:是的 TCP传输字节流,在TCP连接中没有提及消息(及其边界)。即使您发送两个字节,它们也可以在两个单独的块中接收(当然,理论上,这在实践中是不太可能的)。因此,您应该在数据流中添加一些标记。我建议在每条消息

我在做一个插座项目。我想用TCP发送~4kb的数据。我需要在这里问一个问题。也就是说:如果我使用TCP发送~4kb的数据,我的数据处理函数是否可以再次接收该数据?即可以接收(服务器端)功能返回2次(如果我发送~4kb数据一次)?如果我能理解这一点,我将开始制作自己的数据包处理系统

简而言之:是的


TCP传输字节流,在TCP连接中没有提及消息(及其边界)。即使您发送两个字节,它们也可以在两个单独的块中接收(当然,理论上,这在实践中是不太可能的)。因此,您应该在数据流中添加一些标记。我建议在每条消息之前写一个“消息头”,其中头至少包含以下消息正文的长度。请注意,在接收时,报头本身也可能被分割。

TCP是一种流协议。您将按照发送顺序接收字节流。要重建消息,您应该在每条消息前面加上消息长度的前缀,或者使用分隔符来标记消息的结尾


我不知道您的业务需求,但您可以使用类似二进制协议或基于文本的协议。

这是一个常见的主题:我在@MarcGravel中介绍了一些内容,谢谢!我会读这篇文章:)相反的情况也可能发生;多次发送可能导致一次接收。TCP只是一个没有离散“消息”概念的流。正如其他人指出的,您需要开发一个协议,允许您识别何时收到完整的消息或多个消息。@Idle_Mind“…您需要开发一个协议…”?也就是说,我应该在TCP上开发一个*协议?这是一个函数还是像UDP-HTTP-TCP这样的真正的套接字协议?您可以在TCP上开发一个协议。我指的是一种发送字节流的方法,并且仍然能够确定离散消息的开始和结束位置。这可以通过固定和/或可变长度消息、分隔符、标题等的组合来实现。。