Как отправить данные двойного типа через TCP / IP Winsock - PullRequest
0 голосов
/ 24 июня 2019

Я пытаюсь отправить данные датчика (двойного типа) с клиента на сервер через TCP / IP (Winsock).Теоретически, после успешного подключения мы выполним команду send ().

Я использую 2 переменные: stringstream ss и string res для хранения данных датчика и преобразования двойного типа в тип 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 голосов
/ 24 июня 2019

Я настоятельно рекомендую вам не отправлять данные с плавающей запятой по сети. Вместо этого отправьте целочисленное представление этих значений.

Но если вы действительно хотите это сделать, лучше отправлять двоичное представление данных в известном формате (например, IEEE 754 ).

Вы можете сделать это, например, так:

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