簡體   English   中英

通過服務器和客戶端之間的網絡傳遞原始結構

[英]Passing raw structure through network between server and client

服務器和客戶端軟件都使用GCC編譯,並在Linux上運行。 但是,它們運行在不同的平台上。

如果已經處理了字節順序,如果我們為每個成員使用固定大小的stdint類型,那么傳遞結構原始是否安全? 沒有特別注意對齊/填充的意思。

編輯:我們控制服務器和客戶端軟件。 它們是由我們使用相同的gcc版本編譯的,即服務器和客戶端之間沒有不同的包屬性。

不會。即使你使用的是固定大小的整數類型,服務器和客戶端上不同版本的GCC仍然可能不同意相鄰結構成員之間的填充,也可能是整個結構的對齊。 例如,服務器上的GCC使用單字節填充,而客戶端上的GCC則不使用。

這就是XDR的發明之作。 或者,如果數據量很小,請使用XML或JSON。

在生產系統中,即使用於網絡傳輸的機器/ OS- /語言/補丁級特定字節流是使用當今技術實現目標的唯一可能方式,您也必須對數據進行正式定義流編碼。 而且你必須在系統的整個生命周期中使用它。 特別是如果用於網絡傳輸的機器/ OS- /語言/補丁級特定字節流是使用當今技術實現目標的唯一可能方式,則必須對數據流編碼進行正式定義。

請記住,“過早優化是所有邪惡的根源。”

正如@EricZ建議的那樣,在你的數據被破壞的情況下存在很多極端情況。 我建議使用庫來打包/解包數據,例如Protobuf

暫無
暫無

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

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