[英]Read endless stream with HttpWebRequest C#
我正在使用C#从无尽的HTTP流中获取数据。 我以前使用过TCP Client,但是现在我想添加状态代码异常,使用HttpWebResponse进行操作要容易得多。 我得到了响应,但是问题是我无法读取来自服务器的数据块。 一切看起来都很好,但我一定想念一些东西。 调试显示执行卡在ReadLine()上 。 我也可以看到流缓冲区中有一些数据。
HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://" + url + "/stream/" + from + "?token=" + token);
using(HttpWebResponse res = (HttpWebResponse)req.GetResponse())
using(StreamReader streadReader = new StreamReader(res.GetResponseStream(),Encoding.UTF8)){
//Start parsing cycle
while(!streadReader.EndOfStream && !worker.CancellationPending) {
string resultLine = streadReader.ReadLine();
System.Diagnostics.Trace.WriteLine(resultLine);
if(!resultLine.StartsWith("{")) continue;
newQuote quote = JsonConvert.DeserializeObject<newQuote>(resultLine);
worker.ReportProgress(0, quote);
}
}
我发现了错误。 我正在使用ReadLine(),但从未从服务器端发送过“ \\ r \\ n”。 我修补了服务器,以在JSON对象ant之后发送\\ r \\ n,它现在可以正常工作。 另一种选择是使用Read()方法。 它不是在等待行尾,但是您必须知道块长度。 谢谢您的帮助 :)
Upd:如何使用Read()方法解析字符串:
while(!streamReader.EndOfStream && !worker.CancellationPending) {
char[] buffer = new char[1024];
streamReader.Read(buffer, 0, buffer.Length);
string resultLine="";
for(int i = 0; i < buffer.Length; i++) {
if(buffer[i] != 0) resultLine += buffer[i].ToString();
}
newQuote quote = JsonConvert.DeserializeObject<newQuote>(resultLine);
worker.ReportProgress(0, quote);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.