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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top