Heim > Fragen und Antworten > Hauptteil
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? ?
为情所困2017-05-31 10:39:36
socket只认识字节这一个单位, 写进去的字节会以同样顺序被另一端读到.
Unicode的编码已经包括字节序了, 比如在一端写UTF16LE, 要在另一端把字节同样按UTF16LE解码. (特例: UTF8的编码单位就是一字节, 没有字节序问题).
如果你用socket发一般数据是要考虑字节序的, 这种考虑一般是序列化协议的一部分.
滿天的星座2017-05-31 10:39:36
因为TCP/UDP以及其它更底层的网络协议就是那么规定的。socket建立之后,传输的数据相当于你设计的自己的协议,所以想用什么字节序都可以,只要收发方都用同样的字节序。