サーバーからクライアントへの浮動小数点数の送信
-
06-07-2019 - |
質問
TCP / IP ソケットプログラミングを使用しています。サーバーコードの変数 ret_val に格納されている 浮動小数点値 を、受信を待機しているクライアントに送信したい。
どうすればいいですか?
解決
クライアントとサーバーの両方が同じプラットフォームなどであることがわかっている場合は、単に sizeof(float)
を使用してバッファーサイズを決定し、floatのアドレスからそのバイト数をコピーできます。
float number = 123.45;
send(sockfd, &number, sizeof(float),0);
クライアント/サーバーが異なるプラットフォーム/異なる言語などになったらすぐに、フロートを移植可能にエンコードする方法について心配する必要があります。ただし、単純なアプローチの場合、上記の方法で問題なく動作します。
他のヒント
float f = ...;
size_t float_size = sizeof(float);
const char* buffer = (const char *) &f;
send(mySocket, buffer, float_size, 0);
サーバーとクライアントの両方が同じプラットフォームを使用している場合、このコードは正常に機能します。プラットフォームが異なる場合、メッセージサイズとエンディアンを明示的にネゴシエートする必要があります。
テキスト表現を使用しますか?
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()は指定したバイト数より少ないバイトを書き込みました。
所属していません StackOverflow