没有根据收到的字节长度,对缓冲区的最后一位设置\0,而直接把缓冲区当字符串使用,所以后面都是未初始化的内存内容。另外"/r/n",是笔误吧,"\r\n"才是C字符串换行标准。

解决方案 »

  1.   

    wsabuf.buf=new char[200];
    ZeroMemory(wsabuf,200);
      

  2.   

    但是我在发送的时候多发了一个,不可以吗,这是在发送端的程序wsbuf.len=strSend.GetLength()+1; //多一个字节用于存放结束操作符
      

  3.   


    但是我在发送的时候多发了一个,不可以吗,这是在发送端的程序wsbuf.len=strSend.GetLength()+1; //多一个字节用于存放结束操作符
      

  4.   

    把UNICODE字符集改成多字节字符集试试,方法:项目-》项目属性-》常规-》字符集
      

  5.   

    还有就是str.Format(_T("from %s said:%s "),(LPTSTR)inet_ntoa(addrFrom.sin_addr),(LPTSTR)wsabuf.buf),这条语句(LPTSTR)wsabuf.buf不要进行强制转换,会导致数据的丢失,不进行可能会出错,但改了字符集就应该没有问题了
      

  6.   

    问题已经解决,真的很感谢你。请问你能不能详细的给我说一下VS和VC中字符集的区别,在网上也搜过,但不是很理解啊,我在用VS8的时候,字符集这些地方经常出问题,真的很感激你
      

  7.   

    问题已经解决,真的很感谢你。请问你能不能详细的给我说一下VS和VC中字符集的区别,在网上也搜过,但不是很理解啊,我在用VS8的时候,字符集这些地方经常出问题,真的很感激你
    VS平台默认工程默认设置是采用“Unicode字符集”(Unicode Character Set)的,以前用VC6工程的时候默认是“多字符集”(Multi-Byte Character Set)的。“多字符集”是在ASCLL编码基础上加上各国语言扩展而来,所以你用VC6的那种字符处理函数,就会出现字符串转换错误啊,转换之后又导致数据丢失等等错误,。总之就是,如果采用UNICODE字符集,就使用UNICODE这方面的函数。采用多字节字符集就采用多字节处理函数。关于字符集的问题,建议还是找一些关于信息在计算机系统中的表示资料来看。网上也有很多博主写的博客