質問

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()は指定したバイト数より少ないバイトを書き込みました。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top