NetworkStream.DataAvailable は、送信者の送信バッファが空かどうかを認識していますか? それとも、受信側の読み取りバッファにデータがあるかどうかを単に示していますか? 私の推測は後者です...
具体的には、進行中の会話を含む一部のソケット作業では、現在、受信者が現在のバッチ内のデータ量を正確に把握できるように、長さプレフィックスを使用しています。ただし、代わりに NetworkStream.DataAvailable を使用することを提案する .patch が送信されました。私の懸念は、これは送信者が最初に送信したものではなく、受信者が何を持っているかを教えてくれるだけだということですが、私はソケットの専門家ではありません。
私が間違っている?それとも、length-prefix が進むべき道ですか?
(複数のバッチが同じ接続で送信されるため、ストリームが閉じられるまで単純に Read() できないことに注意してください。各バッチを個別に扱うことが重要です。1 つのバッチで読みすぎた場合 (たとえそれがバッファリングされて破棄されます)、会話は中断されます)。