我有一個小型的客戶端服務器應用程序,我希望通過C++而不是C++的TCP套接字發送整個結構。假設結構爲以下:傳遞一個結構通過TCP(SOCK_STREAM)套接字C
struct something{
int a;
char b[64];
float c;
}
我發現有很多帖子說,我需要使用編譯包或發送和recieveing之前序列化的數據。
我的問題是,使用JUST pragma pack或只是序列化足夠了嗎?或者我需要使用兩者?
此外,由於序列化是處理器密集型過程,這使得你的性能急劇下降,所以什麼是序列化一個結構沒有使用外部庫(我喜歡示例代碼/算法)的最佳方式?
我會嘗試這種方法,我只想問,如果我只是使用sprintf,並使用分隔符將所有數據寫入字符串來分離結構的元素並通過套接字發送,然後使用strtok提取每個元素另一邊 ?這也是一個可行的解決方案嗎? – user434885
是的,sprintf會工作,但*只*爲整數;如果你想發送一個字符串(即原始字節數組),使用這種方法,你必須把它們當作一個字節數組,並把每個字節轉換成一個整數,在它們之間插入空格。例如,「abc」將作爲「97 98 99」發送。這可能更好,因爲它在調試時分析起來更容易些,但編碼/解碼很笨拙,尤其是在解碼時需要全面的錯誤檢查。 –
第二個要點背後的動機是什麼 - 只使用無符號整數。爲什麼不能在結構(或字符數組)中使用字符來發送字母,字節或字符串? – aaronsnoswell