//发送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;
}
上面的代码,发送字符串成功,但发送结构体数据失败,这该怎么办啊!
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;
}
上面的代码,发送字符串成功,但发送结构体数据失败,这该怎么办啊!
(WSABUF*)&LoginM 没问题啊stMessage 整个结构体什么东西,看看吧
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;
}
我的回复中,这行是多余的,可以删除。在给WSABUF的buf和len赋值的过程中,如果出现编译错误,强转一下即可,总之,要把&LoginM赋给buf,把sizeof(LoginM)赋给len。
发送失败就是弹出上面的消息框
struct stMessage
{
int MessageType;
union _Message
{
stLogin login;
stLogout logout;
}Message;
};
struct stLogin
{
char userName[10];
char userPassword[20];
};
struct stLogout
{
int userID;
};
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;
}
这个我也想过,但是LoginM不知道怎么转换成char*赋值给buf
全是简单数据类型,肯定没问题。