如何通过TCP / IP Winsock发送双类型数据

时间:2019-06-24 03:16:52

标签: c++ sockets tcp winsock

我正在尝试通过TCP / IP(Winsock)从客户端向服务器发送传感器数据(双重类型)。从理论上讲,成功连接后,我们将执行send()命令。

我使用2个变量:stringstream ss和string res来存储传感器数据并将double类型转换为char类型。但是当我发送数据时,在服务器上显示:日期时间当前电压气压000000000000000000000000000000000000000…所有数据均为0。

我尝试了其他方法,但服务器仅接收到空值或错误值。请建议我如何解决此问题。这是我的代码:

char Data_Send[10000];
char item[] = " Date\t" "Time\t" "Current\t" "Voltage\t" "Air-Pressure\t";
string res;
stringstream ss;

strcpy(Data_Send, item);    
for (int32 i = 0; i < returnedCount; i = i + channelCount)
{
    ss << userDataBuffer[i];  // Sensor data
    ss >> res;
    strcat(Data_Send, (char*)&res);
}

if (connect(socketClient, (sockaddr*)&clientAddr, sizeof(clientAddr)) == 0)
                    {
                        cout << "\nConnection success..!";
                        cout << "\nConnect with Server's IP: " << inet_ntoa(clientAddr.sin_addr);
                        cout << "\nStart communicating";

                        cin.getline(Data_Send, 5120);
                        send(socketClient, (char*)&Data_Send, sizeof(Data_Send), 0);                
                    }

1 个答案:

答案 0 :(得分:0)

我强烈建议您不要通过网络发送浮点数据。而不是发送此值的整数表示。

但是,如果您真的想这样做,更好的方法是以已知格式(例如IEEE 754)发送数据的二进制表示形式。

例如,您可以通过以下方式做到这一点:

send(socketClient, (void*)&userDataBuffer[i], sizeof(double), 0);