kus*_*agi 3 .net c# httpwebresponse
我怎样才能读取一些字节并断开连接?我使用这样的代码
using (HttpWebResponse resp = (HttpWebResponse)request.GetResponse())
{
using (Stream sm = resp.GetResponseStream())
{
using (StreamReader sr = new StreamReader(sm, Encoding.Default))
{
sr.Read();
sr.Close();
}
}
}
Run Code Online (Sandbox Code Playgroud)
但它等待流的结束
您可能不希望使用a StreamReader来读取WebResonse流,除非您确定该流包含换行符. StreamReader喜欢用线条思考,如果流中没有任何换行符,它就会挂起.
最好的办法是在byte[]缓冲区中读取所需的字节数,然后将其转换为文本.例如:
int BYTES_TO_READ = 1000;
var buffer = new byte[BYTES_TO_READ];
using (HttpWebResponse resp = (HttpWebResponse)request.GetResponse())
{
using (Stream sm = resp.GetResponseStream())
{
int totalBytesRead = 0;
int bytesRead;
do
{
// You have to do this in a loop because there's no guarantee that
// all the bytes you need will be ready when you call.
bytesRead = sm.Read(buffer, totalBytesRead, BYTES_TO_READ-totalBytesRead);
totalBytesRead += bytesRead;
} while (totalBytesRead < BYTES_TO_READ);
// Sometimes WebResponse will hang if you try to close before
// you've read the entire stream. So you can abort the request.
request.Abort();
}
}
Run Code Online (Sandbox Code Playgroud)
此时,缓冲区具有缓冲区中的第一个BYTES_TO_READ字节.然后,您可以将其转换为字符串,如下所示:
string s = Encoding.Default.GetString(buffer);
Run Code Online (Sandbox Code Playgroud)
或者,MemoryStream如果要使用,可以在缓冲区上打开StreamReader.
WebResponse如果你不读所有内容,我有时会遇到问题.我不知道它为什么这样做,我无法可靠地重现它,但我发现如果我request.Abort()在关闭流之前做的话,一切正常.看到
在旁注中,你想要的词是"反应迟钝"而不是"不负责任".
| 归档时间: |
|
| 查看次数: |
2543 次 |
| 最近记录: |