2012-04-03 96 views
0

我嘗試了一個tTCPClient後,我創建了一個httpwebrequest連接流媒體API,它只是從未結束工作。我的擔心是我的代碼是否正確,並且我實際上正在讀取新數據,並且連接保持不變。最初,我一直在讀入一個緩衝區,並將所有內容都加載到一個文件中,但是最後讀取一行會更簡單,因爲每個條目都是由換行符分隔的。使用httpwebrequest流連接

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 2012-04-03 20:27:52

+0

上面的代碼看起來像是實現了一個連續的流連接 – vbNewbie 2012-04-03 21:06:04

+1

輸出看起來像它嗎?你是一個運行你的代碼的人..你得到你所期望的嗎? – 2012-04-03 22:29:48

回答

1

您錯用CanRead。最好再看一遍文檔。 CanRead只會告訴你一個數據流是否可以被讀取,而不是它是否有數據,所以不應該在循環條件下使用。

另外,您需要在完成後關閉流。

+0

感謝您的回覆。如果循環結束並且現在已將其更改爲包括基於時間戳延遲激活的標誌,則中止Web請求。但我擔心的是,如何更改此代碼以保持連接打開並消耗通過此連接發送的所有數據。 – vbNewbie 2012-04-03 22:07:15

+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 2012-04-03 22:45:41

+0

謝謝你的迴應,這就是我想要的一些好建議。 – vbNewbie 2012-04-04 12:22:18