c++ TCP协议分包

该博客探讨了在TCP协议中如何处理粘包问题,介绍了数据包的特定格式,包括长度字段和包头数据内容,并展示了使用C++自定义TCP通信类进行分包的代码实现,强调了内存拷贝的正确性和消息处理方法。
摘要由CSDN通过智能技术生成

前言

    TCP是一种流式协议,存在粘包的现象,所以需要分包处理。

数据包格式

    不同格式的数据包的分包方法也不相同,本文使用的格式为:

                    #长度,包头:数据内容@

    其中,长度是从包头到数据内容总字节数,4位定长

代码

void RecvThread::run()
{
	char buffer[2048] = {0};    // 用于存放读取到的数据
	char *buf = buffer;         //
	int len = 0;                // TCP通信读取到的数据长度
	int bufferLen = 0;          // 当前数据长度
	int needLen = 0;            // 还需要读取的数据长度

	while(m_tcpConnectionClient->isOpen())
	{
		memset(buffer, 0, 2048);

                // 查找开始标志
		while(buf[0] != '#')
		{
			needLen = 1 - bufferLen < 0 ? 0 : 1 - bufferLen;
			if (needLen == 0)
			{
				bufferLen -= 1;
				memmove(buf, buf + 1, bu
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值