这个问题捆饶我很久了,  就是TCP粘包问题,     这个原理就不说了,
就是我定义一个结构体 里面包括结构体大小 和数据大小 和缓冲区,如
struct test
{
int lenMsg;
int dataLen;
byte[]data;
}
服务器服务器接受的时候能根据LENMSG 字段来判断数据包的大小,来分配缓冲区但有个问题,
假如 我写了三个 test 大小都是 20字节 连续发送后还是要粘包,  是不是要先发送 包头 就是int lenMsg;
int dataLen; 这个  然后在发送 数据 ,但这样 数据和包就没的关联了吗.
我写了个函数 就是(byte[]*data)
{int total=strlen(data);
while(total>leng)
{}
大楷就是先发送数据大小然后就发送数据的方法  能使用,如果用这种发送就不需要定义结构体了哦,我想用结构体的方法,大家能我我详细的解答一下吗 我为这个问题都要崩溃了.
}

解决方案 »

  1.   

    int total=sizeof(data);不要用strlen
      

  2.   

    我的处理方案是,先接受一个int大小(4字节)的lenMsg,
    然后根据lenMsg循环接收指定大小的包!
    1.
    recv(sock, buf,4, 0);2.
    while()
    {
    recv(sock,buf2,Len - HasRecv,0);
    }
      

  3.   

    其实这本来不是一个问题,主要是很多人对TCP原理太不了解导致,TCP是流,它其实和读文件是一样的道理教楼主一个方法,就是直接在文件中把你写的多个包放进去,如放10个包,每个1024字节,然后你来解析这个文件,每次读取500字节来解析。你把这个文件解析出来,基本上你的socket解析代码就可以解决了