Envoi d’un nombre à virgule flottante du serveur au client

J’utilise la programmation de socket TCP / IP . J’ai une valeur en virgule flottante stockée dans une variable ret_val dans le code de mon serveur que je veux envoyer au client qui attend pour la recevoir.

Comment puis-je le faire?

Si vous savez que le client et le serveur sont la même plate-forme, etc., vous pouvez simplement utiliser sizeof(float) pour déterminer la taille de votre tampon et copier autant d’octets que l’adresse de votre float.

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

Dès que votre client / serveur utilise différentes plates-formes / différentes langues, vous devez commencer à vous demander comment coder de manière portable le flottant. Mais pour une approche simple, ce qui précède fonctionnera bien.

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

Ce code fonctionnera correctement si le serveur et le client utilisent la même plate-forme. Si les plates-formes sont différentes, vous devrez négocier explicitement la taille des messages et leur finalité.

Utiliser une représentation textuelle?

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

Vous pouvez lire cette chaîne et la ré-parsingr avec sscanf. (Peut-être même que la ligne se termine – “% f \ n” – pour que vous sachiez quand le numéro se termine.)

L’approche directe consiste simplement à

 write(fd,&ret_val,sizeof ret_val); 

Dans les deux cas, vous devriez vérifier la valeur de retour de write et prendre les mesures qui s’imposent, ou write () a écrit moins d’octets que ce que vous lui avez indiqué.