最近ソケットについて勉強していて、リクエストが送信される場合、リクエストされた IP アドレスとポート番号をネットワーク バイト オーダーに変換する必要があることがわかりました。そうしないと、リトル エンディアンとビッグ エンディアンが原因で解析の問題が発生します
しかし、ソケット作成後のテキスト データをバイト オーダーで処理すべきではないのはなぜでしょうか?
たとえば、私が送信するのは文字列です。ご存知のとおり、現在の Unicode 文字セットは 1 バイト以上です。複数のバイトがある場合、文字列の問題が発生します。なぜソケットはデータを正常に認識できるのでしょうか? ?
ソケットはバイト単位のみを認識し、書き込まれたバイトは相手側でも同じ順序で読み取られます。
Unicode エンコードにはすでにバイト順序が含まれています。たとえば、一方の側で UTF16LE を記述した場合、もう一方の側ではバイトを UTF16LE に従ってデコードする必要があります (特殊な場合: UTF8 のエンコード単位は 1 バイトであり、バイトはありません)。順序の問題)。バイトオーダーは整数に対するものです。ポート番号は 16 ビット整数であるため、ビッグエンディアンの問題が発生します。それ以外は関係ありません
TCP/UDP やその他の下位レベルのネットワーク プロトコルがこのように規定されているためです。ソケットが確立された後、送信されるデータは設計したプロトコルと同等になるため、送信側と受信側の両方が同じバイト順序を使用する限り、任意のバイト順序を使用できます。