2016-05-27 25 views
0

BinaryReaderに関連付けられたストリームで読み込み可能なバイトがあるかどうかを確認できるメソッドまたはプロパティがあるかどうかは疑問でした(私の場合、NetworkStream私はTCP通信を行っているからです)。 私はdocumentationを確認しましたが、私が見た唯一の方法はPeekChar()ですが、次のバイト(文字)があるかどうかを確認するだけですので、多くのバイトが読み込まれている場合は、whileループを作成してカウンタを増やすことができます不幸BinaryReader C# - バイトが残っているかどうかを確認

TCP通信に関して、問題は、TCPの背後にあるアプリケーションプロトコルが私によって定義されていないことです。私はそれがどのように動作するかを理解しようとしています!もちろん、読んでいくバイトについての手がかりを与える「長さフィールド」がありますが、それがどういう仕組みかどうかを確認していることを知っています。この質問が私の心に届きました。

+0

TCPはストリーミングプロトコルです...どういう意味なのかわかりませんが、 'length'は' streaming'の定義の反対です。 'BinaryReader'はプロトコルストリームのラッパーです。 – atlaste

+0

Mmm ...申し訳ありませんが、私はあなたの意見を理解していません! – Biurrun

+3

現在利用可能なバイトがない場合はどうしますか?それはもっと来ていないということを意味するものではありません... –

答えて

0

BinaryReaderは、必要なすべてのバイトを読み取るまでブロックします。唯一の例外は、ストリームの終わりを検出した場合です。しかし、NetworkStreamは開かれたストリームであり、ストリームの終了条件はありません。だから、読んだり読んだり読んだりする基本的な読者(ReadInt、ReadDoubleなど)を使ってクラスを作成するか、バイト単位で読んだりブロックしたりすることができます。別の非同期技術を使用することもできます。

関連する問題