//发送stMessage结构体
        stMessage LoginM;
LoginM.MessageType=LOGIN;
strcpy(LoginM.Message.login.userName,Name);
strcpy(LoginM.Message.login.userPassword,Password);        //发送字符串
DWORD dwSend;
CString str="成功发送了!";
WSABUF sendbuf;
int len=str.GetLength();
sendbuf.buf=str.GetBuffer(len);
sendbuf.len=len+1;
//发送字符串
        //if(SOCKET_ERROR==WSASendTo(UDPSocket,&sendbuf,1,&dwSend,0,(SOCKADDR*)&addrToServer,sizeof(SOCKADDR),NULL,NULL))
        //发送stMessage结构体
if(SOCKET_ERROR==WSASendTo(UDPSocket,(WSABUF*)&LoginM,1,&dwSend,0,(SOCKADDR*)&addrToServer,sizeof(SOCKADDR),NULL,NULL))
{
MessageBox("发送数据失败!");
return;
}
上面的代码,发送字符串成功,但发送结构体数据失败,这该怎么办啊!

解决方案 »

  1.   

    我一直玩发送结构体得,没看明白呢
    (WSABUF*)&LoginM 没问题啊stMessage 整个结构体什么东西,看看吧
      

  2.   

    stMessage LoginM;
    LoginM.MessageType=LOGIN;
    strcpy(LoginM.Message.login.userName,Name);
    strcpy(LoginM.Message.login.userPassword,Password);WSABUF sendbuf;
    int len=str.GetLength();
    sendbuf.buf=(char*) &LoginM;
    sendbuf.len=(unsigned long)sizeof(LoginM);//发送stMessage结构体
    if(SOCKET_ERROR==WSASendTo(UDPSocket,(WSABUF*)&LoginM,1,&dwSend,0,(SOCKADDR*)&addrToServer,sizeof(SOCKADDR),NULL,NULL))
    {
    MessageBox("发送数据失败!");
    return;
    }
      

  3.   

    int len=str.GetLength();
    我的回复中,这行是多余的,可以删除。在给WSABUF的buf和len赋值的过程中,如果出现编译错误,强转一下即可,总之,要把&LoginM赋给buf,把sizeof(LoginM)赋给len。
      

  4.   

    MessageBox("发送数据失败!");
    发送失败就是弹出上面的消息框
      

  5.   

    stMessage的内容:
    struct stMessage
    {
    int MessageType;
    union _Message
    {
    stLogin login;
    stLogout logout;
    }Message;
    };
    struct stLogin
    {
    char userName[10];
    char userPassword[20];
    };
    struct stLogout
    {
    int userID;
    };
      

  6.   

    唉,还是错了,不知道你理解我的意思没有:stMessage LoginM;
    LoginM.MessageType=LOGIN;
    strcpy(LoginM.Message.login.userName,Name);
    strcpy(LoginM.Message.login.userPassword,Password);WSABUF sendbuf;
    sendbuf.buf=(char*) &LoginM;
    sendbuf.len=(unsigned long)sizeof(LoginM);//发送stMessage结构体
    DWORD dwSend = 0;
    if(SOCKET_ERROR==WSASendTo(UDPSocket,&sendbuf,1,&dwSend,0,(SOCKADDR*)&addrToServer,sizeof(SOCKADDR),NULL,NULL))
    {
    MessageBox("发送数据失败!");
    return;
    }
      

  7.   


    这个我也想过,但是LoginM不知道怎么转换成char*赋值给buf
      

  8.   

    问题与你的stMessage结构无关,只要它里面没有指针,对象等。
    全是简单数据类型,肯定没问题。
      

  9.   

    感谢你 yang79tao问题解决了!