3

sockets/networkStream を使用してデータをエンコード、送信、およびデコードしています。しかし、メッセージを互いに効果的に分離するにはどうすればよいでしょうか?

たとえば、1024 バイトのバッファを使用すると、networkStream 経由でデータを受信します。次に、そのバッファーをデコーダー クラスに渡したいのですが、次のメッセージの一部が既にバッファーに潜んでいるかどうかはわかりません。メッセージが 50 バイトしかない場合、そのバッファに 20 個のメッセージがないことをどのように確認できますか? さらに悪いことに、バッファに部分的なメッセージが残っている可能性はありますか?

私のメッセージが 3000 バイトあるとしましょう。メッセージと 2 番目のメッセージの開始がバッファにある可能性はありますか? または、networkStream は、送信されたパッケージ内のメッセージを自動的に受信しますか?

4

1 に答える 1

4

2 つの一般的な選択肢があります。

  • 次のメッセージの長さを正確に指定する固定サイズのヘッダーを送信します。
  • メッセージ内に表示できないターミネータが後に続くメッセージを送信します。

ソケットを介して可変サイズのバイナリ データを送信するすべての方法は、これら 2 つのテーマのいずれかのバリエーションです。

于 2012-05-08T00:29:55.140 に答える