struct MsgInfo
{
CString  m_SendID;
CString  m_ReceiveID;
CString  m_SendMsg;
};//发送结构体
CString strMsg;
GetDlgItemText(IDC_EDIT1,strMsg);
MsgInfo msg;
GetDlgItem(IDC_Client_ID)->GetWindowText(msg.m_SendID);
msg.m_ReceiveID.Format("10002");
msg.m_SendMsg = strMsg;
send(m_ConnectSock,(char *)&msg,sizeof(msg)*2,0);//其中那个size我设置不来,请老鸟指点//接收结构体
MsgInfo temp;
int iRet = recv(m_ClientItem.m_Socket, (char *)&temp, sizeof(temp)*2, 0);//同样是size不知道设置撒
if ( iRet > 0 ) 
{
    strMsg.Format("%s",temp.m_SendMsg);
    AfxMessageBox(strMsg);
}请老鸟们给小弟指点了,谢谢

解决方案 »

  1.   

    我发送char*是成功了的
    自以为结构体是一样的
    结构不然急需了。
    谢谢大家
      

  2.   

    只能send连续的数据结构虽然struct是连续的
    但CString不是连续用char[]
      

  3.   

    sizeof(msg)是不行的。因为你的结构里是CString,是copy-on-write的,只有4字节。你可以理解成一个指针。显然把指针传给别的进程没意义。
    如果结构是这样可以用sizeof:
    struct stru
    {
    char field1[10];
    char field2[10];
    char field3[244];
    };
    但也不好,要求两端对齐边界一致,高低位一致...
    应该定协议,比如定长协议,N个字节表示m_SendID,随后N1字节表示m_ReceiveID...
    或不定长的:1字节表示field1长度n1,后面n1字节的field1内容;再1字节field2长度n2,跟着n2字节的field2...
    你这个可以用结束0标志。即每个报文包含3个'\0',分别表示3个字串的结尾。