2012-04-03 93 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