検索

ホームページ  >  に質問  >  本文

linux - ソケットのバイトオーダーについていくつか質問があります。

最近ソケットについて勉強していて、リクエストが送信される場合、リクエストされた IP アドレスとポート番号をネットワーク バイト オーダーに変換する必要があることがわかりました。そうしないと、リトル エンディアンとビッグ エンディアンが原因で解析の問題が発生します

しかし、ソケット作成後のテキスト データをバイト オーダーで処理すべきではないのはなぜでしょうか?

たとえば、私が送信するのは文字列です。ご存知のとおり、現在の Unicode 文字セットは 1 バイト以上です。複数のバイトがある場合、文字列の問題が発生します。なぜソケットはデータを正常に認識できるのでしょうか? ?

我想大声告诉你我想大声告诉你2765日前906

全員に返信(3)返信します

  • 为情所困

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

    ソケットはバイト単位のみを認識し、書き込まれたバイトは相手側でも同じ順序で読み取られます。

    Unicode エンコードにはすでにバイト順序が含まれています。たとえば、一方の側で UTF16LE を記述した場合、もう一方の側ではバイトを UTF16LE に従ってデコードする必要があります (特殊な場合: UTF8 のエンコード単位は 1 バイトであり、バイトはありません)。順序の問題)。

    一般的なデータを送信するためにソケットを使用する場合は、バイト順序を考慮する必要があります。この考慮事項は通常、シリアル化プロトコルの一部です。

    返事
    0
  • 大家讲道理

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

    バイトオーダーは整数に対するものです。ポート番号は 16 ビット整数であるため、ビッグエンディアンの問題が発生します。それ以外は関係ありません

    返事
    0
  • 滿天的星座

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

    TCP/UDP やその他の下位レベルのネットワーク プロトコルがこのように規定されているためです。ソケットが確立された後、送信されるデータは設計したプロトコルと同等になるため、送信側と受信側の両方が同じバイト順序を使用する限り、任意のバイト順序を使用できます。

    返事
    0
  • キャンセル返事