Linux – Ich habe einige Fragen zur Bytereihenfolge von Sockets.
我想大声告诉你
我想大声告诉你 2017-05-31 10:37:36
0
3
878

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? ?

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

Antworte allen(3)
为情所困

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

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

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

大家讲道理

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

滿天的星座

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

Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage