Отправка числа с плавающей запятой с сервера на клиент - PullRequest
2 голосов
/ 31 июля 2009

Я использую TCP / IP программирование сокетов. У меня значение с плавающей запятой , хранящееся в переменной ret_val в коде моего сервера, которое я хочу отправить клиенту, который ожидает его получения.

Как я могу это сделать?

Ответы [ 3 ]

5 голосов
/ 31 июля 2009
float f = ...;
size_t float_size = sizeof(float);
const char* buffer = (const char *) &f;
send(mySocket, buffer, float_size, 0);

Этот код будет работать нормально, если и сервер, и клиент используют одну и ту же платформу. Если платформы разные, вам придется явным образом согласовывать размеры и порядок сообщений.

5 голосов
/ 31 июля 2009

Если вы знаете, что и клиент, и сервер являются одной и той же платформой и т. Д., Вы можете просто использовать sizeof(float), чтобы определить размер буфера и скопировать столько байтов с адреса вашего float.

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

Как только ваш клиент / сервер будет работать на разных платформах / разных языках и т. Д., Вам нужно будет начать беспокоиться о том, как переносить код с плавающей запятой. Но для простого подхода вышеописанное будет работать нормально.

3 голосов
/ 31 июля 2009

Использовать текстовое представление?

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

Вы можете прочитать эту строку и снова проанализировать ее с помощью sscanf. (Возможно, даже сделайте так, чтобы строка была завершена - "% f \ n" - чтобы вы знали, когда закончится число.)

Прямой подход - просто

write(fd,&ret_val,sizeof ret_val);

В обоих случаях вы должны проверить возвращаемое значение write и предпринять надлежащие действия в случае возникновения ошибки, или write () записал меньше байтов, чем вы сказали.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...