void als Datentyp ? oder eine Alternative ?
-
Hi, mal schnell FRage! Ich programmiere grade eine Netzwerk Library und will nun ein struct benutzen um Daten zu verschicken bzw. zu empfangen! So, ich hatte mir das so vorgestellt:
struct SPackage { char cMsgType; void vDATA; };Soweit meine idee.. mir ist klar dass diese Struktur so nicht klappt!.. aber ihr seht bestimmt was ich vorhab... jenachdem welchen Wert cMsgType hat, soll void vDATA anders interpretiert werden bzw.. konvertiert in einen bestimmten datentypen.. und dann soll jenachdem welcher MSGTYPE gesendet wurde auch dementsprechend anders damit verfahren werden! Wie geht das ?!
Gruß Chris
-
Es würde höchstens void* in C++ gehen, aber das ist auch nicht grade der tollste Stil.
-
ja würde das denn gehen ? void* ist doch ein zeiger auf void.... ?! aber wenn ich den übers lan wieauch immer schicke erhält der andere pc ja nur die adresse auf mienem pc und folge ist doch dass dann keinerlei daten geschickt wurden odeR ? gibt es alternativen ? du hast grad geschrieben dass es kein toller stil sei.. hast du ne bessere idee ?
-
das zauberwort heißt union
-
stimmt, danke daran hab ich zuerst nicht gedacht!
Gruß Chris
-
Hallo
Foxx90 schrieb:
ja würde das denn gehen ? void* ist doch ein zeiger auf void.... ?!
void* ist ein Zeiger auf einen typlosen Speicherbereich. void (ohne
als Variablentyp gibt es nicht.aber wenn ich den übers lan wieauch immer schicke erhält der andere pc ja nur die adresse auf mienem pc und folge ist doch dass dann keinerlei daten geschickt wurden odeR ?
Deshalb sollt du ja auch nicht nur die Adresse schicken sondern die Daten die hinter der Adresse liegen. Wenn das ein Speicherbereich mit dynamischer Größe ist (char*) dann must du dir ein System überlegen wie du zuerst Größe und dann Inhalt überträgst. So oder so muß in dem struct immer die lokale Adresse des lokalen Speicherbereichs stehen.
gibt es alternativen ?
In der boost-Bibliothek gibt es eine solche Klasse (boost::any oder so)
du hast grad geschrieben dass es kein toller stil sei.. hast du ne bessere idee ?
Darauf verzichten irgendwelche Daten zu übermitteln. Denk dir lieber ein Protokoll aus wo der Datentyp statisch ist.
das zauberwort heißt union
Bestimmt nicht.
bis bald
akari
-
Habe mal für die Uni ein Netzwerkprotokoll entwicklet. Da haben wir nen char-array verwendet, die die Daten hält. Je nach Typ der Message hatten die char's bzw. die Bytes eine andere Bedeutung. Je nach Typ der Nachricht konnten diese auch unterschiedlich lang sein. Zuerst wurde immer ein Header Paket verschickt. Darin war vor allem die Info, wie viele Daten Pakete noch folgen, damit die Message komplett übertragen wird.
Lirumlarum. Nimm einfach nackte bytes zum Verschicken. Bau dir eine Klasse, die dir deine Pakete zusammenbaut (als byte-stream) und eine Klasse, die den Byte-Stream wieder auspackt.
Typischer Aublauf:
Du hast ein Objekt X, dass Du verschicken willst.
Klasse MessageZusammenbauer macht Dir daraus nen byte-stream.
Byte-Stream geht über den Bus (wird verschickt)
Empfänger empfängt Byte-Stream und rekonstruiert sich daraus mit einer Klasse
MessageExtrahierer wieder das Objekt.Für jeden MessageTyp brauchst Du dann ne eigene Klasse, die das Zusammenbauen und das Extrahieren der Pakete übernimmt. Typischerweise werde alle diese Klassen von einer Klasse MessageBase abgeleitet.
By the way...Vielleicht hast du schon mal von der Big und Little Endian Problematik gehört. Du musst daraus achten, dass die Daten immer in der gleichen Reihenfolge im SPeicher stehen.