0

私は現在、UNIXドメインソケットを使用してプログラミングすることを学んでいますが、それについて質問があります。メッセージを分離する標準的な方法は何ですか?たとえば、サーバーは2つのメッセージを書き込み、クライアントはメッセージを取得するために2つの読み取りを行う必要があります。各メッセージの最後に常に特定のcharシーケンスを追加することで、独自のプロトコルを「定義」できると思いますが、これは正しくないようです。null文字は、ソケットに書き込むときに破棄されるようです。特に次の2時間以内に来る場合は、いくつかの説明に本当に感謝します:D。

4

2 に答える 2

3

ソケットを使用SOCK_DGRAMすると、ソースからの書き込みと宛先での読み取りが 1 対 1 で対応します。

ソケットが提供するストリームの上にアプリケーションレベルのプロトコルSOCK_STREAMが必要です。通常の選択肢は次のとおりです。

  • 固定長のメッセージ, 十分なバイトが得られるまで読むだけです,
  • 各メッセージの短い固定長ヘッダーで、メッセージの長さとそれに続くメッセージのタイプを示します。
  • 区切られたメッセージ(ここでの欠点は、区切り文字がメッセージ自体に表示されないことです)、
  • 自己記述形式 (xml、asn.1 など)
于 2012-12-17T20:43:17.787 に答える
2

最初の「unixソケット」は通常、IPCの特殊な形式である「unixドメインソケット」を指します。

ソケットに書き込むときにnull文字が破棄されるようです

それはありそうもない。あなたはおそらく書く権利がありません。

しかし、これは正しくないようです

より簡単な方法は、各「メッセージ」の前に長さを含むヘッダーを付けることです。例えば

         +---+---------+---+-------+
         | 3 |         | 5 | ...   |
         +---+---------+---+-------+

さらに簡単なアプローチは、メッセージの概念を持つプロトコルを使用することです。つまり、UDPやSCTPのようsendに、多くても1つに相当しrecvます。

于 2012-12-17T20:41:17.520 に答える