O
Oliver Gerlich
Hello,
I want to transfer messages between a client and a server (over TCP
sockets). A message consists of a message type (like a message "subject"
, the size of the attached data, and the data itself. The data part
should then be able to contain some information whose layout depends on
the message type...
So now I thought I could define some structs which represent the layout
of the additional information, like this:
typedef struct
{
char versionString[30]
bool paused;
int uptime;
} MsgCoreInfoStruct;
And then I use something like this:
MsgCoreInfoStruct myData;
strcpy(myData.versionString, "Server V1.0");
myData.uptime = getUptime();
myData.paused = false;
Message m;
m.setData( (char*)(&myData) , sizeof(myData) );
The Message object then sends the data to the other side.
Question: When I receive such a message, can I just cast the char*
(which points to the data) into MsgCoreInfoStruct* myRecvData?
And can I then use myRecvData->uptime to get the value I sent out?
And, last but not least , can I use this concept if client and server
are running on different platforms (in this case, Linux and Win)?
I have doubts about this (because of data packing, and because
sizeof(bool) might be inconsistent between compilers...), but I'm not
sure...
Can someone tell me if this concept is right or wrong? Or has someone a
better solution for this problem (maybe something else than structs)?
Thanks in advance,
Oliver Gerlich
I want to transfer messages between a client and a server (over TCP
sockets). A message consists of a message type (like a message "subject"
, the size of the attached data, and the data itself. The data part
should then be able to contain some information whose layout depends on
the message type...
So now I thought I could define some structs which represent the layout
of the additional information, like this:
typedef struct
{
char versionString[30]
bool paused;
int uptime;
} MsgCoreInfoStruct;
And then I use something like this:
MsgCoreInfoStruct myData;
strcpy(myData.versionString, "Server V1.0");
myData.uptime = getUptime();
myData.paused = false;
Message m;
m.setData( (char*)(&myData) , sizeof(myData) );
The Message object then sends the data to the other side.
Question: When I receive such a message, can I just cast the char*
(which points to the data) into MsgCoreInfoStruct* myRecvData?
And can I then use myRecvData->uptime to get the value I sent out?
And, last but not least , can I use this concept if client and server
are running on different platforms (in this case, Linux and Win)?
I have doubts about this (because of data packing, and because
sizeof(bool) might be inconsistent between compilers...), but I'm not
sure...
Can someone tell me if this concept is right or wrong? Or has someone a
better solution for this problem (maybe something else than structs)?
Thanks in advance,
Oliver Gerlich