我的代码是这样的,但在收接时总出错:
typedef struct Message
{
CString strUserName;     //user name
CString strMessage;      //the content of message
}Message;//send
Message Msg;
Msg.strUserName = m_strName;      
Msg.strMessage = m_strMessage; //if (send(m_hSocket,m_strMessage.GetBuffer(0),m_strMessage.GetLength(),0) == 0)
int nSendLen = 0;
nSendLen = send(m_hSocket,(char *)&Msg,sizeof(Msg),0);
if ( nSendLen= 0 || nSendLen == SOCKET_ERROR)
{
     AfxMessageBox(GetErrorString(WSAGetLastError()));
     return;
}
//Receive
      Message Msg ;
ZeroMemory(&Msg,sizeof(Msg)); nMessageLen = recv(hSocket,(char *)&Msg,1024,0);
if (nMessageLen ==0 || nMessageLen == SOCKET_ERROR)
{
MessageBox(GetErrorString(WSAGetLastError()),"Server    ead",MB_OK|MB_ICONINFORMATION);
return 0;
}

解决方案 »

  1.   

    PBYTE pBuffer=new BYTE[strUserName.GetLength()+strMessage.GetLength()];
    CopyMemory(pBuffer,strUserName.GetBuffer(),strUserName.GetLength());
    CopyMemory(pBuffer+strUserName.GetLength(),strMessage.GetBuffer(),strMessage.GetLength());
    //Send
    ...//Recv
    strUserName=pBuffer;
    strMessage=(pBuffer+szUserName.GetLength());
      

  2.   

    你得结构不应该用CString定义为char,你就不会出错了
      

  3.   

    DentistryDoctor(雅克医生(潜心修内功)):
    //=======================================
    他说的方法绝对没问题,我想补充的就是
    如果你发送的都是cstring,建议序列化
      

  4.   

    typedef struct Message
    {
         CString strUserName;     //user name
         CString strMessage;      //the content of message
    }Message;Message Msg ;
    ZeroMemory(&Msg,sizeof(Msg)); //导致指向实际数据区的指针指空,以后当然装不了数据啦,所以当recv的数据填入后要出错。sizeof(Msg)=4*2=8;strUserName,strMessage其实只是一个指针,而且CString类型不能存储\0字符,遇\0就会把后面的字符自动截断(很恐怖的哟)。
    想传结构最好用以下方式: 
    #define NAMELEN 32
    #define MSGLEN  256
    typedef struct Message
    {
         char czUserName[NAMELEN];     //user name
         char czMessage[MSGLEN];      //the content of message
    }Message;Message Msg;
    //Msg.czUserName   
    //Msg.czMessage         填充//Send
    nSendLen =(send(m_hSocket,&Msg,sizeof(Msg),0); //Receive
    Message Msg ;
    ZeroMemory(&Msg,sizeof(Msg));
    nMessageLen = recv(hSocket,(char *)&Msg,sizeof(Msg),0);