84669 人學習
152542 人學習
20005 人學習
5487 人學習
7821 人學習
359900 人學習
3350 人學習
180660 人學習
48569 人學習
18603 人學習
40936 人學習
1549 人學習
1183 人學習
32909 人學習
最近在學socket,發現如果發送請求的話 請求的 ip位址和 連接埠號碼需要轉換成網路位元組序。否則會因為 小端 和 大端 而導致解析出問題
但是socket建立後 的正文資料為什麼不用針對字節序處理呢 ?
比如說我發的是字串 眾所周知 現在的Unicode 字元集已經不只一個字節了 這樣多個字節就會有字串問題 socket接受來資料為什麼還能正常辨識呢?
socket只認識位元組這一單位, 寫進去的位元組會以同樣順序被另一端讀到.
Unicode的編碼已經包括字節序了, 比如在一端寫UTF16LE, 要在另一端把字節同樣按UTF16LE解碼. (特例: UTF8的編碼單位就是一字節, 沒有字節序問題).
如果你用socket發一般資料是要考慮字節序的, 這種考慮一般是序列化協定的一部分.
字節序是針對整數而言。連接埠號碼是一個16位元整型,所以有大小端的問題。其他的都沒關係
因為TCP/UDP以及其它更底層的網路協定就是那麼規定的。 socket建立之後,傳輸的資料相當於你設計的自己的協議,所以想用什麼字節序都可以,只要收發方都用同樣的字節序。
socket只認識位元組這一單位, 寫進去的位元組會以同樣順序被另一端讀到.
Unicode的編碼已經包括字節序了, 比如在一端寫UTF16LE, 要在另一端把字節同樣按UTF16LE解碼. (特例: UTF8的編碼單位就是一字節, 沒有字節序問題).
如果你用socket發一般資料是要考慮字節序的, 這種考慮一般是序列化協定的一部分.
字節序是針對整數而言。連接埠號碼是一個16位元整型,所以有大小端的問題。其他的都沒關係
因為TCP/UDP以及其它更底層的網路協定就是那麼規定的。 socket建立之後,傳輸的資料相當於你設計的自己的協議,所以想用什麼字節序都可以,只要收發方都用同樣的字節序。