我想在客户端传递一个文件名的字符串,在服务端保存。代码如下
客户端:
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后面加一大堆乱码"?
客户端:
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后面加一大堆乱码"?
改为
sockClient.Send((void*)filename,filename.GetLength());//
客户端:
sockClient.Send(filename,filename.GetLength());//这里当二进制数据发送服务端:
...
char buff[20]={0};
memset(buff,0,sizeof(buff));//先初始化buff接受缓冲,目的是构造字符串的结束符\0
...要么:
客户端:
sockClient.Send(filename,filename.GetLength()+1);//这里当字符串发送
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”
sockClient.Send((void*)(char*)filename,filename.GetLength());试试。
我想这样也会有问题的。
因为在服务器端RECV时是有多少收多少,你又不能区分这次是要收多少个BYTE。
所以我想是你要在数据的前面加上一个LENGTH。