pSocket->Receive(buf,16,0);  //接收16位的数据头
    buf[16] = 0;
    if(!memcmp(head,buf,16))   //如果接收16位数据头与发送过来的相同,就开始接收4为表示数据长度的数据
    {
memset(buf,0,MAXDATASIZE);
pSocket->Receive(buf,4,0);
buf[4] = 0;
memcpy(&xml_len,&buf[0],4);//得到需要接收的实际数据长度
memset(buf,0,MAXDATASIZE);
while(xml_len > 0)//循环接收
{
    err = pSocket->Receive(&buf[i],xml_len);
    xml_len -= err;
    i += err;
}
    }
     现在问题是,如果实际需要接收的数据较大时(比如13K,其实也不算大),while循环就会卡住,谁能告诉是什么原因么?

解决方案 »

  1.   


    跟踪到while循环里,比如读取的到xml_len=13247,那么while循环第一次会接收7856个长度,然后再继续就直接卡在循环里不能接收了
      

  2.   

    先mak.err = pSocket->Receive(&buf[i],xml_len);
    xml_len -= err;
    i += err;这里是不是有问题??
    是不是超出buf定义的长度了。
      

  3.   

    pSocket->Receive(buf,16,0);
    pSocket->Receive(buf,4,0);这些做法都是有问题的,你怎么知道,你传个16或者4,就一定能得到16或者4个字节?
    如果它返回15个或者3个字节呢,你的程序还能跑?协议头都被破坏了。socket编程不是你这么简单的,一定要有粘包分包的概念,否则你就用udp吧,就没有粘包与分包了。