2012-04-03 7 views
0

私は、動作しなかったtTCPClientを試した後に、ストリームAPIへのhttpwebrequest接続を作成しました。私の心配は、私のコードが正しいかどうか、そして私が実際に新しいデータを読み込んでいることと、接続が維持されているかどうかです。最初はバッファを読み込んでいて、最大サイズの後にすべてをファイルにロードしましたが、各エントリが改行で区切られているので、行を読み込む方が簡単だと考えました。httpwebquestを使用したスト​​リーム接続

rStream = webrequest.GetResponse().GetResponseStream 
rStream = New GZipStream(rStream, CompressionMode.Decompress) 
If rStream.CanRead then 
    Dim bufferPit(8100) as byte 
    Do 
     Dim dStream as StreamReader = New StreamReader(rStream) 
     While not dStream.EndOfStream 
      rData = dStream.ReadLine() 
      pTools.appendToFile(rData) 
     End While 
    .....//some other exception handling 
    Loop While rStream.CanRead 

私はここで冗長なデータを読んでいるかどうかは私が絶えず読んでいるかどうかはわかりません。また、別の質問は、私がスレッドをappendToFileに使用すると、ストリームへの接続を維持するということでしょうか?

+1

「問題が正しいとは思わない」とは、問題の説明ではありません。 – Kiril

+0

上記のコードはストリームへの連続接続を実現するように見えます – vbNewbie

+1

出力はそれと同じように見えますか?あなたはあなたのコードを実行している人です。あなたはあなたが期待しているものを手に入れていますか?あなたの応答に感謝します。 –

答えて

1

あなたは誤って使用していますCanRead。ドキュメントをもう一度見てください。 CanReadは、ストリームにデータがある場合でなく、ループ状態で使用されるべきでない場合、ストリームが読み込み可能であるかどうかを通知します。

また、終了するときにストリームを閉じる必要があります。

+0

ループが終了したら、私はwebrequestを中止し、タイムスタンプの遅延に基づいて起動されるフラグを含めるように変更しました。しかし、私の懸念事項は、このコードを変更して接続を開いたままにし、この接続を通じてすべてのデータを消費することです。 – vbNewbie

+0

WebRequestは、永続的な無制限のストリームではありません。彼らは、接続が要求を送信し、応答を得て終了させることを意図しています。あなたはNetworkStreamのようなものを後にしています。また、この質問を見てくださいhttp://stackoverflow.com/questions/3089382/why-do-i-get-to-the-endofstream-in-a-webrequest-if-it-is-a-persistent- keepaliv – JamieSee

+0

あなたの応答をありがとう、それは私が欲しかったのは良いアドバイスでした。 – vbNewbie

関連する問題