簡體   English   中英

如何通過TCP / IP Winsock發送雙類型數據

[英]How to send double-type data via TCP/IP 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);                
                    }

我強烈建議您不要通過網絡發送浮點數據。 而不是這個發送這個值的整數表示。

但是,如果您真的想這樣做,更好的方法是以已知格式發送數據的二進制表示(例如IEEE 754 )。

例如,您可以通過以下方式執行此操作:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM