搜尋

首頁  >  問答  >  主體

linux - 關於 socket 的字節序 有點疑問

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

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

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

我想大声告诉你我想大声告诉你2735 天前884

全部回覆(3)我來回復

  • 为情所困

    为情所困2017-05-31 10:39:36

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

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

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

    回覆
    0
  • 大家讲道理

    大家讲道理2017-05-31 10:39:36

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

    回覆
    0
  • 滿天的星座

    滿天的星座2017-05-31 10:39:36

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

    回覆
    0
  • 取消回覆