Frage

Ich bin mit TCP / IP Socket-Programmierung. Ich habe ein Gleitkommawert in einer Variablen gespeichert RET_VAL in meinem Server-Code, den ich an den Client schicken will, das wartet, sie zu empfangen .

Wie kann ich es tun?

War es hilfreich?

Lösung

Wenn Sie wissen, dass Client und Server die gleiche Plattform usw. sind, können Sie einfach sizeof(float) verwenden Ihre Puffergröße zu bestimmen und zu kopieren, dass viele Bytes von der Adresse des Schwimmers.

float number = 123.45;
send(sockfd, &number, sizeof(float),0);

Sobald Ihr Client / Server verschiedene Plattformen / verschiedenen Sprachen etc. werden Sie beginnen müssen, um sich Gedanken darüber, wie der Schwimmer portably kodieren. Aber für einen einfachen Ansatz, wird die oben funktionieren.

Andere Tipps

float f = ...;
size_t float_size = sizeof(float);
const char* buffer = (const char *) &f;
send(mySocket, buffer, float_size, 0);

Dieser Code wird funktionieren, wenn sowohl der Server als auch Client die gleiche Plattform verwenden. Wenn die Plattformen unterschiedlich sind, müssen Sie Nachrichtengrößen verhandeln und Endianess explizit.

Verwenden Sie eine Textdarstellung?

char buf[32] ; 
snprintf(buf,sizeof buf,"%f",ret_val); 
write(fd,buf,strlen(buf));

Sie können diese Zeichenfolge lesen und es wieder mit sscanf analysieren zurück. (Vielleicht Linie beendet es auch machen - „% f \ n“ -., Damit Sie wissen, wenn die Zahl endet)

Der direkte Ansatz ist es, einfach

write(fd,&ret_val,sizeof ret_val);

In beiden Fällen sollten Sie den Rückgabewert des Schreib überprüfen und geeignete Maßnahmen ergreifen, wenn ein Fehler auftritt, oder schreiben () geschrieben weniger Bytes als du ihm gesagt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top