Ganz simple Variable ausgeben / Socketprogrammierung
-
Hi !
Ich bin blutiger Anfänger, daher sorry für solch eine einfrage Frage aber ich komme einfach nicht dahinter:
Ich habe innerhalb eines Programmes mehrere Variablen die ich seriell in eine neue Variable packen möchte und per Socket ausgeben.
char test1
char test2
char test3
uswnun möchte ich
char msg[1024] = "test1;test2;test3"
und das ganze dann per
result = send(sock, msg, strlen(msg), 0);
ausgeben.
Wo ist mein Denkfehler ? BIsher bin ich nur php gewohnt, sorry !

-
Der Fehler liegt in der Zeile:
char msg[1024] = "test1;test2;test3";
Im Gegensatz zu PHP enthaelt msg hier nicht eine Aneinanderreihung von Werten mit denen die Variablen besetzt wurden, sondern den String selbst (dh msg enthält tatsächlich den String "test1;test2;test3")
Beachte auch, dass Du strlen(msg) bytes sendest. Dh, wenn Du den String später zB mit libc-Stringfunktionen bearbeiten möchtest, dass Du noch eine '\0' an diesen anhängen musst. Bzw du Versendest strlen(msg) + 1 bytes.
Gruß
-
Danke, bereits ist mir bereits klar, nur wie verändere ich den String entsprechend daß der Variableninhalt versendet wird und nicht nur die Aneinanderreihung ?
-
hessie schrieb:
Danke, bereits ist mir bereits klar, nur wie verändere ich den String entsprechend daß der Variableninhalt versendet wird und nicht nur die Aneinanderreihung ?
char msg[1024]; sprintf (msg, "%d;%d;%d", test1, test2, test3); result = send(sock, msg, strlen(msg), 0);und, wichtig, den rückgabewert von 'send' beachten...

-
HMPF !
Mann bin ich blöd, da hätte ich aber auch selbst draufkommen müssen

Warum ist es in C++ nur so kompliziert ne einfache Variable auszugeben ?

Vielen Dank, funktioniert !

-
hessie schrieb:
Warum ist es in C++ nur so kompliziert ne einfache Variable auszugeben ?

Ist es nicht unbedingt. Dies ist eine typische C lösung. In C++ könntest Du auch mit der eingebauten string Klasse arbeiten, die den Operator + zum Verketten kennt. Ausserdem ist es denkbar sich eine Eigene stream-socket Klasse als Ableitung von iostream zu erstellen, die dann Operatoren wie << oder >> kennt, und auf c++ strings arbeiten kann.
Gruss
-
linu(x)bie schrieb:
Ausserdem ist es denkbar sich eine Eigene stream-socket Klasse als Ableitung von iostream zu erstellen, die dann Operatoren wie << oder >> kennt, und auf c++ strings arbeiten kann.
..und das ist dann weniger kompliziert?

-
pale dog schrieb:
..und das ist dann weniger kompliziert?

hehe
... naja auf Dauer schon. Wer viel mit sockets arbeitet, sollte sich mal einmal ransetzen um dann auf Dauer einfachere Arbeit zu haben. Dies war auch der Grund wiso man die String-Klasse dammals eingeführt hat. Jeder hat sich vorher eine Eigene geschrieben, weil ihnen der Umgang mit C-Zeichenketten zu umständlich erschien.Soclche Vorgehensweise ist vielleicht für den C++ - Anfänger nicht die beste Lösung, für den Fortgeschrittenen jedoch Standart.
Gruss