我想客户端通过socket传送一个CStirng变量Path,也就是文件路径到服务器端,然后服务器端返回指定Path路径的文件信息,但是传送中文路径时服务器端收到的是乱码,怎么办啊?
传送字符串:
CString Path=_T("E:\新建文件夹");
clientsocket.Send(Path,Path.GetLength(),0);服务器端:
char buffer[100];
clientsocket.Receive(buffer,100,0);
CString path;
path.Format(_T("%s"),buffer);结果服务器端收到的path是乱码,不过英文字母E正常。

解决方案 »

  1.   

    你发送的是对象还是字符串
    估计你想发送字符串把 那么不要把对象的地址传递给send
      

  2.   

    CString Path=_T("E:\\新建文件夹"); 
    clientsocket.Send((LPSTR)(LPCTSTR)Path, _tcsnbcnt(Path, Path.GetLength()), 0);
    char buffer[100] = 0;
    clientsocket.Receive(buffer, 100, 0);
    CString path(buffer);
      

  3.   

    问题也可能是出在了char buffer[100];
    你看看你程序的其它问题,特别是客户端的发送过程和服务器端的接收过程,在vc中的中文的编码每个字占用的字节数是两个字节,你那样输出的话就把每个汉字给拆开了,所以汉字会出现乱码.
    我也不太肯定就是这个问题,只不过是提供你一个思路,这个问题我曾经遇到过.
      

  4.   

      在传送的时候你要多传递一个长度的字符过去。send的时候改成101试试。
      

  5.   

    我要发送的是CString类型的字符串啊
    CString path=_T("E:\新建文件夹"); 发送"E:\新建文件夹"
    上面的方法我试了,还是不行啊,该怎么Send呢?
      

  6.   

    对于socket来说,你要发送和接收的是“字节流”而不是字符串更不是CString类型的字符串。
      

  7.   

    你的代码我试了,不行啊,最后传过去的path只有E一个字母。
    有好多聊天程序传送聊天信息时怎么传送的啊?
      

  8.   

    将char buffer[100]改为:char buffer[100]={0};
      

  9.   

    我照着上面的代码写了,但是还是不行啊,传过去的buffer只能显示字母,中文不行。而且CString path(buffer) 这一句最后path值只为buffer的第一个元素。
    我调了好长时间了,中文始终不知怎么传过去,郁闷死了!
      

  10.   

    光看代码好像没有什么大问题,是不是你编码的问题,看看你的编译环境,是不是选择了Unicode的
      

  11.   

    CString str;
    str=_T("新建文件夹");  
    clientsocket->Send((LPSTR)(LPCTSTR)str, _tcsnbcnt(str, str.GetLength()), 0);
    char buffer[200]={0};
    int n=clientsocket->Receive(buffer,200,0);
    CString ReceiveString(buffer);我用的vs2005,客户端和服务器用的都是Use Unicode Character Set
      

  12.   

    我之所以在代码中使用_tcs宏就是为了考虑UNICODE兼容,因为你原来的代码根本就没考虑,包括CString的赋值和初始化。不过忘了一点,就是CString的构造函数对char*和w_char*都适用。改成这样:
    CString ReceiveString((LPCTSTR)buffer); 
      

  13.   

    我又试了下,发现收到的只有5字节内容,发送“新建文件夹”五个字只收到“新建”还有一个乱码,我在发送方str.GetLength()+5后就正常了,不知为什么?是不是哪个地方还要改一下啊 ?
      

  14.   

    CString Path=_T("E:\\新建文件夹"); 
    int nsize = clientsocket.Send(Path.GetBuffer(0),Path.GetLength(),0); 服务器端: 
    char buffer[100]; 
    memset(buffer,0,100);
    int nsize = clientsocket.Receive(buffer,100,0); 
    CString path; 
    path.Format(_T("%s"),buffer); 
    lz你可以调试看看. 发送的size和接收的是不是一样,
      

  15.   

    _T("E:\新建文件夹"); 改成_T("E:\\新建文件夹"); 注意\是转义符
      

  16.   

    CString Path=_T("E:\新建文件夹"); 
    clientsocket.Send(Path.GetBuffer(0),Path.GetLength(),0); 
      

  17.   

    buff 方式非常难控制. 我现在也有这个问题存在