Добрый день. Пишу программу, которая коннектиться к 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; }
} }
|
|