【TCP】TCP数据粘包/分包问题

cpp 复制代码
	/*4.阻塞等待上位机(客户端)连接请求*/
				if(netconn_accept(conn,&newconn)==ERR_OK){
					/*5.循环处理接收到的数据*/
					while((err=netconn_recv(newconn,&buf))==ERR_OK){//如果没有新的数据会进入阻塞态
						do{
							//从buf获取数据&data和len
							netbuf_data(buf,&data,&len);//使用线性数组,不用循环数组 为什么?
              memcpy(receiveBuffer+rc_count,data,len);//获取的数据拷贝给缓冲区
              rc_count+=len;//rc_count是当前缓冲区字节数  
              /*用于遍历receiveBuffer[]缓冲区*/
              while(((rc_count-1)-rc_header)>=15 ){//进入条件是:未处理数据>=16字节
                  uint32_t head=(receiveBuffer[rc_header]<<24|
                                 receiveBuffer[rc_header+1]<<16|
                                 receiveBuffer[rc_header+2]<<8|
                                 receiveBuffer[rc_header]);
                  if(head==0xAA55AA55){//*(uint32_t*)(receiveBuffer+rc_header)uint32_t 
                    if(CmdQueueHandle!=NULL){	           //     访问通常期望地址能被 4 整除 如不能对其可能会进入HardFault
									    TCP_Message_t *pPkg=(TCP_Message_t *)(receiveBuffer+rc_header);
									    msg.depth_tar=pPkg->depth_tar;
									    msg.pitch_tar=pPkg->pitch_tar;
									    msg.roll_tar =pPkg->roll_tar;
									    xQueueSend(CmdQueueHandle,&msg,(TickType_t)0);
                      rc_count-=16;
                      /*滑动平移窗口*///缓冲区想象成一条传送带,处理了一个包,就应该把这个包及其前面的所有垃圾全部"剪掉",
                      memmove(receiveBuffer,receiveBuffer+rc_header+16,rc_count-rc_header-16); //把剩下的东西拉到最前面
                      rc_header=0;
								    }					
                  }		
                  else{
                    rc_header++;
                  }
              }
						}while(netbuf_next(buf)>=0);//跳转到下一个内存链表节点 
						netbuf_delete(buf);
					}
					/*客户端断开连接,清理资源*/
					netconn_close(newconn);
					netconn_delete(newconn);
				}
				osDelay(1);


为什么会粘包,分包?

相关推荐
Yuiiii__3 分钟前
一次“在家连不上公司内网服务”的排障实战记录
网络·智能路由器
三言老师14 分钟前
mkdir创建多级目录,目录创建基础实操
linux·运维·服务器
2601_9638701721 分钟前
【计算机毕业设计】基于Spring Boot的社区老年大学课程报名与学习系统的设计与实现
java·spring boot·学习
llwszx35 分钟前
【Java/Go后端手撸原生Agent(第七篇):Token预算管理 + 滑动窗口上下文裁剪】
java·后端·python·agent开发·上下文工程·上下文裁剪·滑动窗口裁剪
普马萨特1 小时前
5G小基站对室内定位的影响
网络·5g
专业工业电源打工人1 小时前
F0505S-2WR3 适配优选 钡特电源 DF2-05S05LS|2W 隔离 DC-DC 模块电源5V转5V硬件选型参数规格解析
大数据·网络·人工智能
he39123771 小时前
ogg命令
运维·网络
其实防守也摸鱼1 小时前
Kimi K3深度测评:长文本之外的真实力
运维·开发语言·网络·人工智能·python·学习·安全
imc.111 小时前
linux EXT文件系统
linux·运维·服务器
weixin_BYSJ19871 小时前
springboot3家政平台小程序--附源码00904
java·javascript·spring boot·python·django·flask·php