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

时间:2013-06-15 14:16:23

标签: c# sockets tcp

我正在开发一个socket项目。我想用TCP发送~4kb数据。我需要在这里问一个问题。那就是:如果我用TCP发送~4kb数据,我的数据处理函数可能会再次接收到这些数据吗?即RECEIVE(服务器端)功能返回2次(如果我发送~4kb数据一次)?如果我能理解这一点,我将开始制作自己的数据包处理系统。

2 个答案:

答案 0 :(得分:3)

简而言之:是的。

TCP传输字节流,TCP连接中没有提及消息(及其边界)。即使你发送两个字节,它们也可以在两个不同的块中接收(理论上当然;在实践中它是不太可能的)。所以你应该在数据流中添加一些标记。我建议在每个消息之前写一个“消息头”,其中头部至少包含以下消息正文的长度。请注意,标题本身在接收时也可能会碎片化。

答案 1 :(得分:0)

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

我不了解您的业务需求,但您可以使用MQTT等二进制协议或STOMP等基于文本的协议。