V
wird da eine struktur in einen char* zeiger umgewandelt?
nicht ganz. es wird nur der zeiger &message in einen char* verwandelt.
hab gehört man sollte reinterpret_cast nicht so oft verwenden ---> man sehr gefährliche Sachen machen...
jo. stell dir mal das hier vor:
struct Message
{
string name;
unsigned int size;
};
Message message;
message.name=message;
message.size = 100;
socket.send(reinterpret_cast<char*>(&message), sizeof(message));
das würde unfug sein. nicht nur unfug, nach dem einlesen mit read() auf die selbe weise wird es sogar ein wenig crashen.
also muß man bem hantieren mit reinterpret_cast selber aufpassen, daß nix schief geht. und schiefgehen kann schon allerhand. das ist natürlich kein grund, es sein zu lassen.
grund, es sein zu lassen, finden wir eher, wenn wie die alternative angcken:
struct Message
{
char name[256];
unsigned int size;
};
void send(Message& msg,socket& sock){
send(sock,msg.size);
send(sock,msg.name);
}
also einfach vor dem string immer die size senden und dann die daten und beim einlesenb eben andersrum und für senden von int, sring, Message und was auch sonstnoch je ne send-funktion anbieten.
das hat sich auch den vorteil, daß nicht immer ein 256-bytes großes paket auf die reise geht, sondern nur die nutzdaten.