【发布时间】:2010-11-15 18:36:09
【问题描述】:
我正在使用 TCP/IP 套接字编程。我有一个 浮点值 存储在我的服务器代码中的变量 ret_val 中,我想发送给等待接收它的客户端.
我该怎么做?
【问题讨论】:
-
如果您指定发送方和接收方正在使用的语言和/或运行时,这可能会有所帮助。
标签: c sockets floating-point client
我正在使用 TCP/IP 套接字编程。我有一个 浮点值 存储在我的服务器代码中的变量 ret_val 中,我想发送给等待接收它的客户端.
我该怎么做?
【问题讨论】:
标签: c sockets floating-point client
如果您知道客户端和服务器是同一个平台等,您可以简单地使用sizeof(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() 写入的字节数少于您告诉它的字节数。
【讨论】: