int recv_len; //接收缓冲长度 char buff[1024]; //接收缓冲区 //----------------------- //从字节缓冲检测字符串结束符符号,如果找不到NULL,则返回的长度为0 unsigned int __strlen(char *string, unsigned int max_len) { for (unsigned int i=0;i<max_len;i++) { if (string[i]==0) return i; } return 0; } void OnReceive() { int ret=Receive(buff+recv_len,1024-recv_len); if (ret>0) { recv_len+=ret; //粘包处理,以字符串结束符NULL做为包分割标记 while(true) { unsigned size=__strlen(buff,1024);//计算字符串长度 if (size==0) break; //如果没有字符串结束,则退出循环 size++; //UnPacket(buff); //解包 recv_len-=size; if (recv_len==0) break; memmove(buff,buff+size,recv_len); //向前移动未处理的数据 } } }
