TCP粘包问题

来源:互联网 发布:电能量数据采集终端 编辑:程序博客网 时间:2024/04/27 20:51

最近需要用TCP传输大量数据,但是中间出现了一些问题。

又问本人菜鸟,什么都是自己摸索!

其中就出现了粘包问题。

粘包问题可以看看下面的链接,下面讲解的很详细

粘包问题链接:点击打开链接

 

 

而我发送的大量数据包,每次发送的长度不相等。

微软对TCP发送的数据优化算法还是有用的,可以不需要设置“发送不延迟”。

所以就在每次发送数据包的开头定义一个定长大小的结构体,里面描述一些信息,当然最重要的信息就是此次发送数据包的长度。

 

//定义接受压缩图片的信息 typedef struct bmpheader{int indexBitmap;  //图片索引号int x , y ;          //图片的   横向、纵向  块号int nLength ;    //块压缩之后的大小int nSum ;       //计数块int nDisplay ;}BMPHEADER , *pBMPHEADER;


 

 可以采用上面的结构体来定义数据包头。

然后接收端执行下面的代码:

//接受数据void sockRecv( char* recvdata , int len ){int lentotal = 0 ;int lenrecv = 0 ;while ( lentotal < len  ){lenrecv = recv( SockClient , recvdata+lentotal , len - lentotal , 0   );lentotal += lenrecv ;}}

 

sockRecv( (char*)&memBlock.recbmpheader , sizeof( BMPHEADER ) );//接受数据包头sockRecv( (char*)&memBlock.mem , memBlock.recbmpheader.nLength );//接受接受数据大小


 

 

 

 

 

 

 

 

 

 

原创粉丝点击