本帖最后由 VisualEleven 于 2011-02-18 09:25:04 编辑

解决方案 »

  1.   

    传输的时候都是作为字符串传输的
    即,发送和接受的时候,会有一个指针,然后有长度,至于里面是什么,socket并不关心
      

  2.   

    当使用Unicode的MFC工程,Client端发送【窄字符串】数据后,Server端却接受【宽字符串】数据
    这个绝对是不对的~我感觉不可能出现这一种状况
    MFC下LZ应该是用的CString类型吧?这个类型在ANSI下就是ANSI,在UNICODE下就是UNICODE
    如果你想在UNICODE环境下发送ANSI,先转换编码,再去发送(用CHAR类型)
      

  3.   

    Client-Server
    对于传输的内容格式与接收的格式必须一致!
    比如: 发送端 :第一位为指令,后7为数据位,那你的接收端也必须这样分解数据包其实不管你的工程是什么Unicode还是非Unicode,
    socket发送内容都是按位发送的!对与"abc"来说,如果是Unicode的它的长度 2倍的非Unicode的长度,
      

  4.   

    发送接收的参数是void* lpBuf,所以可以传接任意数据,问题是你接收了是怎么处理这些数据的
      

  5.   

    因为send函数是按照字符大小来发送的
    UNICODE你的字符串变成了宽字符串,试试下面这个
    pData是你准备发送的数据TCHAR*类型
    #ifdef UNICODE                                        //pData是宽字符需要进行转换
    char *pBuf = new char[len + 1];
    WideCharToMultiByte(CP_ACP, 0, pData,  -1,  pBuf,  len + 1,  NULL, NULL);
    send(sock, pBuf, len + 1, 0);
    #else
    send(sock, pData, len + 1, 0)
    #endif
      

  6.   

    To Sidyhe:
    确实如你所说 - MFC下CString在UniCode下引起的,我发送char字符串就没有问题了,多谢