Heim  >  Fragen und Antworten  >  Hauptteil

Linux – Ich habe einige Fragen zur Bytereihenfolge von Sockets.

Ich habe kürzlich etwas über Sockets gelernt und festgestellt, dass beim Senden einer Anfrage die angeforderte IP-Adresse und Portnummer in die Netzwerk-Byte-Reihenfolge umgewandelt werden müssen. Andernfalls kommt es aufgrund von Little Endian und Big Endian zu Parsing-Problemen

Aber warum sollten die Textdaten nach der Erstellung des Sockets nicht in Byte-Reihenfolge verarbeitet werden?

Was ich zum Beispiel sende, ist ein String. Wie wir alle wissen, besteht der aktuelle Unicode-Zeichensatz aus mehr als einem Byte. Warum können die vom Socket empfangenen Daten normal erkannt werden? ?

我想大声告诉你我想大声告诉你2721 Tage vor862

Antworte allen(3)Ich werde antworten

  • 为情所困

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

    socket只认识字节这一个单位, 写进去的字节会以同样顺序被另一端读到.

    Unicode的编码已经包括字节序了, 比如在一端写UTF16LE, 要在另一端把字节同样按UTF16LE解码. (特例: UTF8的编码单位就是一字节, 没有字节序问题).

    如果你用socket发一般数据是要考虑字节序的, 这种考虑一般是序列化协议的一部分.

    Antwort
    0
  • 大家讲道理

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

    字节序是针对整数而言。端口号是一个16位整型,所以存在大小端的问题。其他的都没关系

    Antwort
    0
  • 滿天的星座

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

    因为TCP/UDP以及其它更底层的网络协议就是那么规定的。socket建立之后,传输的数据相当于你设计的自己的协议,所以想用什么字节序都可以,只要收发方都用同样的字节序。

    Antwort
    0
  • StornierenAntwort