Hallo Leute!
Ich befasse mich seit neustem mit Sockets bei c++. Klappt auch alles ganz prima, nur dass ich nicht die geringste Idee habe, wie ich wohl Daten/Informationen binär verschicken kann.
Ich finde überall nur die Funktion send(), und mit der kann man ja nur Daten vom Typ char versenden. Aber es MUSS doch möglich sein eine benäre Nachricht zu verschicken!
Achja: ich programmiere auf Windoof(falls ws da unterschide gibt)
Hallo Verim!
Ich finde überall nur die Funktion send(), und mit der kann
man ja nur Daten vom Typ char versenden. Aber es MUSS doch
möglich sein eine benäre Nachricht zu verschicken!
Was genau verstehst du denn unter binär? Unter nicht-binär würde ich verstehen, wenn die Daten als ASCII-Text verschickt werden, also z.B. XML, oder wenn Zahlen als Strings verschickt werden.
Verstehe ich richtig, dass du z.B. ein 4-byte Integer auch als 4 Byte versenden willst und nicht als char-Array (String) wie „1234567“ ?
Falls ja, dann ist doch char genau das, was du brauchst. Ich habe ewig lange kein C++ mehr programmiert, aber was im Prinzip funktionieren sollte, ist einfach die Adresse der Variable zu einem char* zu casten und zu übergeben. Den Code hier habe ich aus dem Netz, sollte aber so funktionieren:
int i = 1234567;
send(fd, (char*)&i, sizeof(i), 0); // fd ist der Socket
Deine Variable i wird hier einfach wie ein char-Array der Länge deiner Variable (also der Speicherplatz für ein int hier) behandelt und ausgelesen. Nix leichter als das *g*
Achja: ich programmiere auf Windoof(falls ws da unterschide
gibt)
Nein, sollte und Linux und Mac usw. identisch sein. Problematisch wird es dann, wenn die empfangende Seite eine andere Codierung verwendet (Big vs. Little endian). Aber das ist ein ganz anderes Problem.
Ich hoffe, das hilft dir.
Gruß
Florian
Theoretisch hast du recht.
Allerdings geht es u.a. darum z.B. eine Exe-Datei zu senden. Diese könnte z.B. binär ‚00000000‘ enthalten, was als char als ‚\0‘ interpretiert wird (also Ende des Strings heißen würde), obwohl dies garnicht der Fall ist.
Allerdings geht es u.a. darum z.B. eine Exe-Datei zu senden.
Diese könnte z.B. binär ‚00000000‘ enthalten, was als char als
‚\0‘ interpretiert wird (also Ende des Strings heißen würde),
obwohl dies garnicht der Fall ist.
Hast du es denn schon mal ausprobiert? Ich habe das hier gefunden: „Hierbei wird ein Block von Daten versendet, dessen Inhalt nicht beachtet wird (also keine Überprüfung auf \0 als Ende!).“
(http://www.pc-adviser.de/socket_programmierung.html#…)
Du musst die Länge ja explizit als dritten Parameter angeben, warum sollte er also bei \0 abbrechen?
Die Seite scheint generell einen guten Überblick über das Thema zu bieten.
Hallo Verim,
wie ich die Frage verstehe, reduziert sich das Problem auf die Konvertierung von Binärdaten (unsigned char[], also ein array aus unsigned char) auf einzelne char (d.h. signed char oder char, das ist dasselbe) und umgekehrt. Das Senden koennte m.E. so funktionieren:
unsigned char binaerdaten[32768];
// fuelle binaerdaten
for (int i = 0; i