Winsock int oder char senden.
-
Hi.
Ich bekomme warnmeldungen wenn ich versuche "int" oder "char" variablen über ein Socket zu senden. Mit strings gehts ohne probleme aber ich will nur ein zeichen übertragen und in ein Array in dem anderen Programm schreiben.
Ich arbeite in C unter Windows mit MSVS 6.
-
send() will nunmal einen (const char*) haben, also casten

int einInteger; einInteger=12; send(socket,(const char*)&einInteger,sizeof(int),0);
-
Oh man und ich denk da nich dran zu casten... XD
Danke für den TippWas noch fehlt ist recv() das will noch nicht so wirklich. 0o?
-
Was will recv() denn nich ?
-
Ich bekomm die warnung:
'function' : Inkompatible Typen - von 'int *' zu 'char *'edit: Es geht bis zu dem zeitpunkt nach dem sich beide 1 mal was senden. dann bricht alles ab und empfängt keiner mehr vom anderen was.
-
Zeig doch mal etwas Quellcode

-
Hab die Variablen als char deklariert. Nun bekomm ich keine warnungen wegen recv().
[...]// den teil geht der nur 1 oder 2 mal durch oder wartet ewig auf antwort weil client nicht antworten kann printf("warte auf eingabe von %s ...",name2); recv(serversocket,&wahl,1,0); feld[wahl-1]=zeichen; else { printf("\nFeld - auswaehlen: "); scanf("%i",&wahl); if(wahl > 0 && wahl < 10) { if(feld[wahl-1]==' ') { feld[wahl-1]=zeichen; draw++; send(serversocket,(const char*)&wahl,sizeof(int),0); }edit: Möglich das es ein variablen oder übertragungs fehler ist weil entweder nicht überschrieben wird oder etwas gesendet/empfangen wird...
-
hallo
int wahl;
recv(serversocket,(char*)&wahl,sizeof(wahl),0);mfg
-
Aufpassen:
Platform SDK: recv() schrieb:
calling recv will return as much data as is currently available — up to the size of the buffer specified
...ein integer ist auf 32bit-Rechnern ja meistens 4 Byte groß

Nun kann es aber sein das recv() nur die ersten 3 Byte überträgt und dann bei einem 2. recv() Aufruf den letzten Byte!Also am besten Daten in einem BYTE-Array oder so erstmal sammeln bis 4 Bytes zusammengekommen sind!
Also: Der Integer ist nach einem recv()-Aufruf möglicherweise noch nicht komplett übertragen, da kann man den 3. Parameter von recv() so groß gemacht haben wie man will.
Beim testen auf dem lokalen Rechner wird man davon vermutlich nicht unbedingt was merken, aber sobald die Daten übers iNet gehen wird man sich sonst wundern, warum Müll ankommt
-
hallo,
richtig ! Auch könnte es sein, ein 16Bit Client z.B PalmOS möchte mit dem Protokoll arbeiten oder ein MAC.
Besser ist eh Integer mal in die Networkbyteorder zu bringen und ein ordentliche Funktion wie save_recv zu implementieren als revc "nackig" zu verwenden ...
rb
-
Server und Client sind Windows 32 Bit.
Geht jetzt. Die zu sendende variable hab ich gecastet und die zu empfangende als char deklariert.
Der fehler war das ich eine variable genutzt habe um zu senden und empfangen... blöder denkfehler...Das Programm hab ich fertig bekommen, thx
