TCPClient, кажется, не поддерживает соединение активности, почему? - PullRequest
3 голосов
/ 05 июля 2010

У меня есть следующий код, использующий TcpClient

byte[] encbuff = System.Text.Encoding.UTF8.GetBytes("username" + ":" + "password");
        string follow = "track=soccer,twitter";
        byte[] encode_follow = System.Text.Encoding.UTF8.GetBytes(follow);

        using (TcpClient client = new TcpClient())
        {
            string requestString = "POST /1/statuses/filter.json HTTP/1.1\r\n";
            requestString += "Host: stream.twitter.com\r\n";
            requestString += "User-Agent: www.site.com\r\n";
            requestString += "Referer: http://www.site.com\r\n";
            requestString += "Content-Type: application/x-www-form-urlencoded\r\n";
            requestString += "Authorization: " + "Basic " + Convert.ToBase64String(encbuff) + "\r\n";
            requestString += "Content-length: " + follow.Length + "\r\n";
            requestString += "Connection: keep-alive\r\n";
            requestString += "\r\n";
            requestString += follow;
            requestString += "\r\n\r\n";

            client.Connect("stream.twitter.com", 80);
            //client.ReceiveTimeout = 100;
            using (NetworkStream stream = client.GetStream())
            {
                // Send the request.
                StreamWriter writer = new StreamWriter(stream);
                writer.Write(requestString);
                writer.Flush();

                // Process the response.

                    StreamReader rdr = new StreamReader(stream);

                    while (!rdr.EndOfStream)
                    {
                        Console.WriteLine(rdr.ReadLine());
                        Console.WriteLine("IS end: " + rdr.EndOfStream.ToString());
                    }
                }

        }

Что происходит, хотя это то, что Console.WriteLine (rdr.ReadLine ());line выводит статусы в течение нескольких секунд, чем останавливается + больше не достигает точки останова, даже если она все еще подключена.

Что нужно сделать, так это продолжать записывать статусы в консоли, поскольку это поддерживающее соединение соединение, а ключевое слово «Twitter» постоянно упоминается несколько раз каждые несколько секунд.

Есть идеи, что может быть причиной этой проблемы?

1 Ответ

0 голосов
/ 05 июля 2010

Проверьте это:

public class Program
{
    public static void Main()
    {
        using (var client = new WebClient())
        {
            client.Credentials = new NetworkCredential("username", "password");
            client.OpenReadCompleted += (sender, e) =>
            {
                using (var reader = new StreamReader(e.Result))
                {
                    while (!reader.EndOfStream)
                    {
                        // TODO: feed this to your favorite JSON parser
                        Console.WriteLine(reader.ReadLine());
                    }
                }
            };
            client.OpenReadAsync(new Uri("http://stream.twitter.com/1/statuses/filter.json?track=soccer,twitter"));
        }
        Console.ReadLine();
    }
}

Должно облегчить жизнь.

...