0

C# でサーバーからライブ (連続) データを取得するにはどうすればよいですか?

HTTPWebRequest を開きますが、サーバーはその要求を完了しません。サーバーは 20 秒ごとにテキスト データを送信します。テキスト データを処理し、10 分後にサーバーが要求を完了してからユーザーに表示したいと考えています。

4

2 に答える 2

1

HTTP はセッション プロトコルではありません。このように動作するように意図されていました

  1. 接続を開く
  2. リクエストを送信
  3. 応答を受け取る
  4. 接続を閉じる

できることは、基本的TCPClient / Socketに代わりに使用することです。これにより、HTTP の下位層に移動し、永続的な接続を作成できます。

あなたの人生を楽にするさまざまなフレームワークがあります。

また、Cometもご覧ください。

于 2013-02-17T15:03:09.113 に答える
1

WebClient のストリーミング API を使用できます。

var client = new WebClient();
client.OpenReadCompleted += (sender, args) =>
{
    using (var reader = new StreamReader(args.Result))
    {
        while (!reader.EndOfStream)
        {
            string line = reader.ReadLine();
            // do something with the result
            // don't forget that this callback
            // is not invoked on the main UI thread so make
            // sure you marshal any calls to the UI thread if you 
            // intend to update your UI here.

        }
    }
};
client.OpenReadAsync(new Uri("http://example.com"));

Twitter Streaming API を使用した完全な例を次に示します。

using System;
using System.IO;
using System.Net;

class Program
{
    static void Main()
    {
        var client = new WebClient();
        client.Credentials = new NetworkCredential("username", "secret");
        client.OpenReadCompleted += (sender, args) =>
        {
            using (var reader = new StreamReader(args.Result))
            {
                while (!reader.EndOfStream)
                {
                    Console.WriteLine(reader.ReadLine());
                }
            }
        };
        client.OpenReadAsync(new Uri("https://stream.twitter.com/1.1/statuses/sample.json"));
        Console.ReadLine();
    }
}
于 2013-02-17T15:03:54.357 に答える