我想在客户端传递一个文件名的字符串,在服务端保存。代码如下
客户端:
sockClient.Send(filename,filename.GetLength());//filename是CString类型的服务端:
CString filename;
CString s1("c:\\");
char buff[20]={0};
int ret1=0;
for(;;)
{
 ret1=recSo.Receive(buff,sizeof(buff));
 if(ret1==0)
 break; 
 filename+=buff;
 }
filename=s1+filename;
发送的filename内容是"aa.txt"为什么接收到的字符串是"aa.txt后面加一大堆乱码"? 

解决方案 »

  1.   

    我觉得sockClient.Send(filename,filename.GetLength());//filename是CString类型的 
    改为
    sockClient.Send((void*)filename,filename.GetLength());//
      

  2.   

    要么:
    客户端: 
    sockClient.Send(filename,filename.GetLength());//这里当二进制数据发送服务端: 
    ...
    char buff[20]={0}; 
    memset(buff,0,sizeof(buff));//先初始化buff接受缓冲,目的是构造字符串的结束符\0
    ...要么:
    客户端: 
    sockClient.Send(filename,filename.GetLength()+1);//这里当字符串发送
      

  3.   

    客户端:
    BYTE btTemp[20];
    memset(btTemp,0,20);
    int nLen=filename.GetLength();
    for(int i=0;i<nLen;i++)
      btTemp[i]=(BYTE)(filename.GetAt(i));
    sockClient.Send(btTemp,nLen+1);//这里得把字符串的结束符0也得发送出去,所以长度为“实际字符串长度+1”
      

  4.   

    客户端: 
    sockClient.Send((void*)(char*)filename,filename.GetLength());试试。
    我想这样也会有问题的。
    因为在服务器端RECV时是有多少收多少,你又不能区分这次是要收多少个BYTE。
    所以我想是你要在数据的前面加上一个LENGTH。