繁体   English   中英

使用HttpWebRequest C#读取无尽的流

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM