Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Зависает программа, при получении Http ответа 
:(
    Опции темы
WERITAS
Дата 21.2.2010, 13:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


********
**


Профиль
Группа: Участник
Сообщений: 582
Регистрация: 2.5.2005
Где: Москва

Репутация: нет
Всего: 5



Добрый день. Пишу программу, которая коннектиться к ip-камер в инете. Столкнулся с неожиданной багой: после 3-4 раз подключения к ip-камере, на 4-5 раз программа зависает на строчке получения ответа от запроса
Код

WebRequest request = WebRequest.Create(url);
WebResponse responce = request.GetResponse(); // <---

а позже вылетает исключение с сообщением  The operation has timed out. После этого любые попытки подключится не удаются. 
Пробовал тестить свой код с обычными сайтами в инете (специально убрал алгоритм разбора принимаемого потока), оказывается, что всё работает. А вот если, скажем, 3-4 раз подконнектится к камере и каждый раз разрывать соединение, то на 4-5 раз просто подключиться уже не получается.

Controller.cs
Код

using System;
using System.Net;
using System.Text;
using System.IO;
using System.Threading;

namespace WindowsFormsApplication1
{
    delegate void DebugHandler(string debugInfo);

    class Controller
    {
        public string url;

        public DebugHandler ResultProcessing;
        public DebugHandler DebugProcessing;

        public Controller()
        {
        }

        public void Start()
        {
            ThreadPool.QueueUserWorkItem(Receive);
        }

        public void Stop()
        {
            Thread.Sleep(1000);
         
        }

        private void Receive(Object ins)
        {
            try
            {
                WebRequest request = WebRequest.Create(url);

                DebugProcessing("Getting responce");
                WebResponse responce = request.GetResponse();                

                Stream stream = responce.GetResponseStream();
                DebugProcessing("SUCCESS");

            }
            catch (Exception exc)
            {
                DebugProcessing(exc.Message);
            }
        }

    }

}


Form1.cs
Код

using System;
using System.IO;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Net;
using System.Threading;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        private Controller controller;

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            controller = new Controller();
            controller.DebugProcessing = new DebugHandler(DebugShow);
            controller.ResultProcessing = new DebugHandler(ResultShow);

            comboBox1.Items.Add("http://webcam.perm.ru/video.php?resolution=640x480&camera_id=2");
            comboBox1.Items.Add("http://webcam.perm.ru/video.php?resolution=640x480&camera_id=3");
            comboBox1.Items.Add("http://webcam.perm.ru/video.php?resolution=640x480&camera_id=4");
            comboBox1.Items.Add("http://webcam.perm.ru/video.php?resolution=640x480&camera_id=5");
            comboBox1.Items.Add("http://webcam.perm.ru/video.php?resolution=640x480&camera_id=12");
    

            /*
            comboBox1.Items.Add("http://www.yandex.ru");
            comboBox1.Items.Add("http://www.mail.ru");
            comboBox1.Items.Add("http://www.rambler.ru");
            comboBox1.Items.Add("http://www.google.com");
            comboBox1.Items.Add("http://www.yahoo.com");
            //*/
        }

        private void button1_Click(object sender, EventArgs e)
        {
            controller.url = comboBox1.Text;
            controller.Start();

            button1.Enabled = false;   
        }

        private void button2_Click(object sender, EventArgs e)
        {
            textBox2.Clear();
            textBox3.Clear();

            button1.Enabled = true;
        }


        private void ResultShow(string ResultInfo)
        {
            textBox2.Invoke(new DebugHandler(ResultTrace), ResultInfo);
        }

        private void ResultTrace(object ins)
        {
            string info = ins.ToString();
            textBox2.Text = info;
        }


        private void DebugShow(string debugInfo)
        {
            textBox3.Invoke(new DebugHandler(DebugTrace), debugInfo);
        }

        private void DebugTrace(object ins)
        {
            string info = ins.ToString();
            textBox3.Text = info;
        }



    }
}



Присоединённый файл ( Кол-во скачиваний: 2 )
Присоединённый файл  WindowsFormsApplication1.zip 14,89 Kb


--------------------
Арт-менеджер клуба, разрешивший концерт Алексея Глызина, уволен с формулировкой "Мудак"
PM MAIL   Вверх
nmn
Дата 21.2.2010, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 593
Регистрация: 26.11.2005

Репутация: нет
Всего: 1



может камера перестает принимать подключения?
попробуй убрать всю логику и просто поподключаться несколько раз подряд, 10-15
PM Skype   Вверх
nmn
Дата 21.2.2010, 17:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 593
Регистрация: 26.11.2005

Репутация: нет
Всего: 1



там еще как то хитро картинка присылается, идет один запрос и после этого непрерывный поток данных с картинками
PM Skype   Вверх
nmn
Дата 21.2.2010, 18:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 593
Регистрация: 26.11.2005

Репутация: нет
Всего: 1



один раз открыл соединение и можешь читать данные из потока

только вот странная вещь у меня получилась
Код
ач
request = (HttpWebRequest)WebRequest.Create("http://webcam.perm.ru/video.php?resolution=640x480&camera_id=2");
            response = (HttpWebResponse)request.GetResponse();

            Console.WriteLine("headers");
            for (int i = 0; i < response.Headers.Count; i++)
            {
                Console.WriteLine("{0}: {1}", response.Headers.AllKeys[i], response.Headers[i]);
            }
            Console.WriteLine("\n{0}", (int)response.StatusCode);
            //response.Close();


если раскомментировать последнюю строчку, то он начинает получать данные и не останавливается
PM Skype   Вверх
WERITAS
Дата 21.2.2010, 19:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


********
**


Профиль
Группа: Участник
Сообщений: 582
Регистрация: 2.5.2005
Где: Москва

Репутация: нет
Всего: 5



Тема более не актуальна, просьба закрыть


--------------------
Арт-менеджер клуба, разрешивший концерт Алексея Глызина, уволен с формулировкой "Мудак"
PM MAIL   Вверх
Linus
Дата 14.5.2010, 13:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 13.8.2006
Где: Украина

Репутация: нет
Всего: 4



Просьба поведать, в чем была проблема. Спасибо.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
cully
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, cully, mr.DUDA, Exception.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Распределённые приложения и сеть | Следующая тема »


 




[ Время генерации скрипта: 0.0699 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.