[英]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.