Question

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 souhaite envoyer au client qui attend pour la recevoir. .

Comment puis-je le faire?

Était-ce utile?

La solution

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 à partir de 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.

Autres conseils

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é.

Utilisez 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é-analyser avec sscanf. (Vous pouvez peut-être même mettre fin à la ligne - "% 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 devez vérifier la valeur de retour write et prendre les mesures appropriées en cas d'erreur, ou écrire () écrit moins d'octets que vous ne l'auriez indiqué.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top