【问题标题】:Sending floating point number from server to client将浮点数从服务器发送到客户端
【发布时间】:2010-11-15 18:36:09
【问题描述】:

我正在使用 TCP/IP 套接字编程。我有一个 浮点值 存储在我的服务器代码中的变量 ret_val 中,我想发送给等待接收它的客户端.

我该怎么做?

【问题讨论】:

  • 如果您指定发送方和接收方正在使用的语言和/或运行时,这可能会有所帮助。

标签: c sockets floating-point client


【解决方案1】:

如果您知道客户端和服务器是同一个平台等,您可以简单地使用sizeof(float) 来确定您的缓冲区大小并从您的浮动地址复制那么多字节。

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

只要您的客户端/服务器是不同的平台/不同的语言等,您就必须开始担心如何对浮点数进行可移植编码。但是对于一个简单的方法,上述方法可以正常工作。

【讨论】:

  • 优秀。感谢反馈
  • @BrianAgnew 抱歉,这里是一个愚蠢的问题,你是什么意思,客户端和服务器都在同一个平台上?
  • 处理器类型? 32 与 64 位等
【解决方案2】:
float f = ...;
size_t float_size = sizeof(float);
const char* buffer = (const char *) &f;
send(mySocket, buffer, float_size, 0);

如果服务器和客户端都使用相同的平台,此代码将正常工作。如果平台不同,则必须明确协商消息大小和字节序。

【讨论】:

    【解决方案3】:

    使用文本表示?

    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() 写入的字节数少于您告诉它的字节数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-11
      • 2021-12-07
      • 1970-01-01
      • 2021-02-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多