網絡傳輸數據出錯問題

網絡上傳輸的數據採用大端方式,而存儲在x86平臺上數據採用小端方式,因此要注意轉換。

htonl()、htons()、ntohl()、ntohl()函數的使用。

網絡字節順序與本地字節順序之間的轉換函數:

之所以需要這些函數是因爲計算機數據表示存在兩種字節順序:NBO與HBO

網絡字節順序NBO(Network Byte Order):
      按從高到低的順序存儲,在網絡上使用統一的網絡字節順序,可以避免兼容性問題。

主機字節順序(HBO,Host Byte Order):
      不同的機器HBO不相同,與CPU設計有關,數據的順序是由cpu決定的,而與操作系統無關。 
如 Intel   x86結構下,short型數0x1234表示爲34   12, int型數0x12345678表示爲78   56   34   12   
如IBM   power PC結構下,short型數0x1234表示爲12   34, int型數0x12345678表示爲12   34   56   78

如果處理不好字節序的問題,接受得到的數據就不正確。

所以獲取到char型之外的數據應用ntohl()把他轉換成本地字節順序進行操作。




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章