关于使用SOCKET传送结构体的问题:
我想通过CSocket类或其相关类在局域网内传送这样一个简单的数据结构: struct
{
char msg1[100];
char msg2[100];
}msg;
请问在VC中如何实现???
有DEMO更好.^^嘿嘿^^
我想通过CSocket类或其相关类在局域网内传送这样一个简单的数据结构: struct
{
char msg1[100];
char msg2[100];
}msg;
请问在VC中如何实现???
有DEMO更好.^^嘿嘿^^
{
char msg1[100];
char msg2[100];
}msg;
byte lpBuff[500];
msg data;strcpy(data.msg1,"asdf");
strcpy(data.msg2,"asdf");socket.Send(&data,sizeof(msg));..
msg dataRecv;
socket.Recv(dataRecv,sizeof(msg));
MessageBox(dataRecv.msg1);
{
LPCTSTR RechNum;
int RoomID;
int SeatID;
}收的时候可以的啊。
当使用 xiaohyy(醉大饿极) 说的方法的时候,要注意字节对齐的问题,有可能你定义的结构体的实际大小是7字节,但系统编译的时候给你字节对齐分配了8字节,而通讯程序的接收边可能使用了不同的编译设置或者运行于不同的系统之上时,可能会按照7字节接收,这样的错误很难查出来,要注意。在不明朗的情况下,最好使用#pragma pack(1)和#pragma pack()强制结构体字节对齐。
还有一个问题就是字节顺序给平台也是可能不同的,如果你的结构体内含有integer,传送接收使用强制转化可能得到的结构体域值会与期望的不一样
另外就是如 [brytison(辉子)] 所说,如果结构体内含有运行时才能确定大小的域就不可以用这种强制转化了。其实最好是如 [sharkhuang(爱情和程序都读不懂)] 所说:串行化!反串行化!