如何详细实现C语言编写的TCP客户端和服务器端接收数据并进行筛选处理?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1742个文字,预计阅读时间需要7分钟。
目录+正文+代码解析+1:当TCP缓冲区的数据小于3个字节时,不进行判断+2:判断包头是否一致?+3:包头匹配后,判断是否达到了数据包的固定协议长度+4:判断有效数据是否接收完成
目录
- 正文
- 代码解析
- 1:当Tcp缓冲区的数据小于3个字节时,不进行判断
- 2:判断包头是不是一致?
- 3:包头匹配后,判断是否达到了数据包的固定协议长度?
- 4:判断有效数据是否接收完整?
- 5:数据校验位判断
正文
对于一个简单的tcp通讯这里我就不再讲述了,今天主要为大家讲解下,如何从::recv中筛选出一个完整包逻辑。
就简单的以客户端为例(服务器接收方也是同样的逻辑),假设服务器一直在频繁发送数据,在recv函数中并不能保证每次接收的都是一个完整的包,当设置recv的缓冲区过大时,就会出现多个包同时接收的问题。
对于这种情况,初出茅庐的我们有时会想不到居然还有多个包共同出现的问题,甚至有些还没学会如何高效的分离出一个有效的数据包。
一般在进行tcp通讯协议时,为了各个指令的区分,通常都会用以下方式进行发送,如下图:
具体的通信协议规格可以按照各个业务需求来定义,这里只是列举了一个简单的例子。
在这篇文章中根据上图中的协议格式,进行举例讲解。
本文共计1742个文字,预计阅读时间需要7分钟。
目录+正文+代码解析+1:当TCP缓冲区的数据小于3个字节时,不进行判断+2:判断包头是否一致?+3:包头匹配后,判断是否达到了数据包的固定协议长度+4:判断有效数据是否接收完成
目录
- 正文
- 代码解析
- 1:当Tcp缓冲区的数据小于3个字节时,不进行判断
- 2:判断包头是不是一致?
- 3:包头匹配后,判断是否达到了数据包的固定协议长度?
- 4:判断有效数据是否接收完整?
- 5:数据校验位判断
正文
对于一个简单的tcp通讯这里我就不再讲述了,今天主要为大家讲解下,如何从::recv中筛选出一个完整包逻辑。
就简单的以客户端为例(服务器接收方也是同样的逻辑),假设服务器一直在频繁发送数据,在recv函数中并不能保证每次接收的都是一个完整的包,当设置recv的缓冲区过大时,就会出现多个包同时接收的问题。
对于这种情况,初出茅庐的我们有时会想不到居然还有多个包共同出现的问题,甚至有些还没学会如何高效的分离出一个有效的数据包。
一般在进行tcp通讯协议时,为了各个指令的区分,通常都会用以下方式进行发送,如下图:
具体的通信协议规格可以按照各个业务需求来定义,这里只是列举了一个简单的例子。
在这篇文章中根据上图中的协议格式,进行举例讲解。

