linux - 關於 socket 的字節序 有點疑問
我想大声告诉你
我想大声告诉你 2017-05-31 10:37:36
0
3
877

最近在學socket,發現如果發送請求的話 請求的 ip位址和 連接埠號碼需要轉換成網路位元組序。否則會因為 小端 和 大端 而導致解析出問題

但是socket建立後 的正文資料為什麼不用針對字節序處理呢 ?

比如說我發的是字串 眾所周知 現在的Unicode 字元集已經不只一個字節了 這樣多個字節就會有字串問題 socket接受來資料為什麼還能正常辨識呢?

我想大声告诉你
我想大声告诉你

全部回覆(3)
为情所困

socket只認識位元組這一單位, 寫進去的位元組會以同樣順序被另一端讀到.

Unicode的編碼已經包括字節序了, 比如在一端寫UTF16LE, 要在另一端把字節同樣按UTF16LE解碼. (特例: UTF8的編碼單位就是一字節, 沒有字節序問題).

如果你用socket發一般資料是要考慮字節序的, 這種考慮一般是序列化協定的一部分.

大家讲道理

字節序是針對整數而言。連接埠號碼是一個16位元整型,所以有大小端的問題。其他的都沒關係

滿天的星座

因為TCP/UDP以及其它更底層的網路協定就是那麼規定的。 socket建立之後,傳輸的資料相當於你設計的自己的協議,所以想用什麼字節序都可以,只要收發方都用同樣的字節序。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板