我在CSocket编程中有一段接收函数代码,如下:
char buff[10]={0};
CString msg;
int ret=0;
for(;;)
{
ret=recSo.Receive(buff,10);
if(ret==0)
break;
msg+=buff; 
}
每次从缓存读取10个字符,全添加给msg。现在的问题是:当我发送的数据是小于等于9个字符的时候,接收正常;当发送10个字符的时候,数据都能接到,但后面多了几位乱码;当发送超过10个字符的时候,例如发送“1234567890qwe”,接收到的是“1234567890乱码qwe4567890乱码”,接收数据很混乱,而且qwe替代了第一次接收的123,后面还多了几个4567890,请问是什么原因呀???比较急,谢谢~!!

解决方案 »

  1.   

    但后面多了几位乱码 是因为 buff没有结束符,msg+=buff时是增加到下一个结束符,而不是你想要的10个,你这样做
    char buff[11];
    buff[10] = 0;
    然后每次还是接受10个字符
      

  2.   

    char buff[11];
    按你这么定义,我能正确接受11个字符,小于11个不行,有乱码,大于11个后,出现的问题就是我刚才所说的替代,发送“1234567890qWW”,接收到的是“123456789qWW3456789”,郁闷呀
      

  3.   

    char buff[11]={0};
    CString msg;
    int ret=0;
    for(;;)
    {
    ret=recSo.Receive(buff,10);
    if(ret==0)
    break;
    buff[ret] = 0;
             msg+=buff; 
    }
      

  4.   

    char buff[11]={0};<----------------sajdlfjksdl;fjsdalfklsa
    CString msg;
    int ret=0;
    for(;;)
    {
    ret=recSo.Receive(buff,10);
    if(ret==0)
    break;
    buffer[ret]='\0';
    msg+=buff; 
    }