Empfangen von int mittels Sockets
-
Hallo,
ich versuche verzweifelt ein int-Wert über einen Socket vom Server zum Client zu schicken. Wenn ich den Wert vom Server losschicke erhalte ich nicht die Zahl 5 sondern die Zahl 152482752.
Beim Kompilieren des Clients erhalte ich folgende Fehlermeldung:
Warnung: Format »%d« erwartet Argumenttyp »int«, aber Argument 2 hat Typ »char *« [-Wformat]
Ich weiß jetzt nicht genau wo das Problem ist, ich vermute das ich die Zahl die ich beim Client vom Puffer lese wohl entweder casten muss, da der Puffer vom Typ char ist.Server:
int zahl = 5; int tmp = htonl((uint32_t)zahl); write(temp_sock, &tmp, sizeof(tmp));
Client:
read (sock, puffer, sizeof(int)); printf ("%d\n", puffer);
Vielleicht hat ja jemand einen Tipp wie ich die richtige Zahl aus dem Puffer lesen kann.
Ich hab jetzt nicht den ganzen Code gepostet, da Client und Server jeweils 100 Zeilen lang sind.
-
Würdest du auch
char puffer[] ="Hallo Welt"); printf ("%d\n", puffer);
machen?
Nein, denn puffer ist ja ein char-Array.
Und in diesem Fall wird deie Adresse von dem Array übergeben.Zudem solltest du auch wieder von der Network-Byte-Order zur Host-Byte-Order zurück wandeln.
-
DirkB schrieb:
Würdest du auch
char puffer[] ="Hallo Welt"); printf ("%d\n", puffer);
machen?
Nein, denn puffer ist ja ein char-Array.
Und in diesem Fall wird deie Adresse von dem Array übergeben.Zudem solltest du auch wieder von der Network-Byte-Order zur Host-Byte-Order zurück wandeln.
Okay, es muss natürlich anstatt d ein s dort stehen.
char puffer[] ="Hallo Welt"); printf ("%s\n", puffer);
Aber da ich auf Client-Seite vom Puffer lese, welcher vom Typ ja dann char ist wird der Wert der vom Server kommt nicht angezeigt, da char ausgegeben wird.
Muss ich beim Client den Puffer vom Typ char in int konvertieren?
-
Du meinst
printf ("%d\n", *(int*)puffer);
Probier es aus.
Aber das ist nicht der richtige Weg.
-
Dynamaik schrieb:
Okay, es muss natürlich anstatt d ein s dort stehen.
Nein, Du musst in eine Variable vom Typ int einlesen:
int tmp; int zahl; read (sock, (char *)&tmp, sizeof(int)); zahl = ntohl(tmp); printf ("%d\n", zahl);