Invio di un numero in virgola mobile dal server al client
-
06-07-2019 - |
Domanda
Sto usando la programmazione socket TCP / IP . Ho un valore in virgola mobile memorizzato in una variabile ret_val nel mio codice server che desidero inviare al client che è in attesa di riceverlo .
Come posso farlo?
Soluzione
Se sai che sia il client che il server sono la stessa piattaforma ecc., puoi semplicemente usare sizeof (float)
per determinare la dimensione del tuo buffer e copiare quel numero di byte dall'indirizzo del tuo float.
float number = 123.45;
send(sockfd, &number, sizeof(float),0);
Non appena il tuo client / server sono piattaforme / lingue diverse, ecc. dovrai iniziare a preoccuparti di come codificare in modo portabile il float. Ma per un approccio semplice, quanto sopra funzionerà bene.
Altri suggerimenti
float f = ...;
size_t float_size = sizeof(float);
const char* buffer = (const char *) &f;
send(mySocket, buffer, float_size, 0);
Questo codice funzionerà correttamente se sia il server che il client utilizzano la stessa piattaforma. Se le piattaforme sono diverse, dovrai negoziare esplicitamente le dimensioni dei messaggi e le endianess.
Utilizzare una rappresentazione testuale?
char buf[32] ;
snprintf(buf,sizeof buf,"%f",ret_val);
write(fd,buf,strlen(buf));
Puoi leggere quella stringa e analizzarla di nuovo con sscanf. (Forse potresti anche terminare la riga - "% f \ n " - così saprai quando il numero finisce.)
L'approccio diretto è semplicemente
write(fd,&ret_val,sizeof ret_val);
In entrambi i casi dovresti controllare il valore di ritorno di write e prendere le misure appropriate se si verifica un errore, oppure write () ha scritto meno byte di quanto gli hai detto.