TcpClient から継承するクラスがあります。そのクラスには、応答を処理するメソッドがあります。そのメソッドで、MyBase.GetStream を使用して NetworkStream を取得し、Read を呼び出します。
ブロックを読み取るための最初の呼び出しが長すぎることを除いて、これは正常に機能します。そして、長すぎるということは、ソケットが大量のデータを受信したにもかかわらず、任意の制限に達するまでそれを読み取らないことを意味します。パケット スニファ WireShark を使用して、大量のデータを受信したことがわかります。
受信バッファーを少量に設定しましたが、非常に少量 (ほんの数バイトなど) は役に立ちません。read メソッドに渡すバッファ バイト配列でも同じことを行いましたが、それでも遅延が発生します。
または別の言い方をすれば。私は600kをダウンロードしています。ダウンロードには 5 秒かかります (サーバーへの接続が 100k/秒を少し超える場合、これは理にかなっています)。最初の Read 呼び出しには 2 ~ 3 秒かかり、256 バイトしか使用できないことがわかります (256 は受信バッファーであり、読み込んだ配列のサイズです)。次に、魔法のように、残りの数十万バイトは、わずか数プロセスティックで 256 バイトのチャンクとして読み取ることができます。パケット スニファを使用すると、最初の 2 ~ 3 秒間に、ソケットが 256 バイトをはるかに超える量を受信したことがわかりました。私の接続は、3 秒間は 0.25k/秒ではなく、2 秒間は 400k ではありませんでした。
入ってくるバイトをソケットから取得するにはどうすればよいですか?