Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Общие вопросы .NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.11.2010, 16:36   #1
Dasharnb777
Пользователь
 
Регистрация: 15.09.2009
Сообщений: 44
По умолчанию Пишу сканер протов. Как сделать в несколько потоков?

Сканер портов. Но 65 тыс. портов минут 30 сканируется. Подскажите, как сделать так, чтобы все это в нескольких потоках сканировалось?
А написала вроде, но ничего не изменилось...

Процедура сканирования:

Код:
public void Button1Click(object sender, EventArgs e)
        {
            new Thread(delegate()
            {
                int BeginPort = Convert.ToInt32(nBeginPort.Value);
                int EndPort = Convert.ToInt32(nEndPort.Value);

                int i, j = 0;               

                progressBar1.Invoke((ThreadStart)delegate()
                {
                    progressBar1.Maximum = EndPort - BeginPort + 1;

                progressBar1.Value = 0;
                listView1.Items.Clear();

                IPAddress addr = IPAddress.Parse(tIPAddress.Text);
                    for (i = BeginPort; i <= EndPort; i++)
                    {
                        Application.DoEvents();
                        toolStripStatusLabel1.Text = "Now scanning port number: " + (System.Convert.ToString(i));
                        
                        IPEndPoint ep = new IPEndPoint(addr, i);
                        Socket soc = new Socket(AddressFamily.InterNetwork,
                                                SocketType.Stream,
                                                ProtocolType.Tcp);
                        
                        IAsyncResult asyncResult = soc.BeginConnect(ep, new AsyncCallback(ConnectCallback), soc);

                        if (!asyncResult.AsyncWaitHandle.WaitOne(100, false))
                        {
                            soc.Close();
                            progressBar1.Value += 1;

                        }
                        else
                        {
                            j++;
                            soc.Close();
                            listView1.Items.Add(j.ToString());
                            listView1.Items[j - 1].SubItems.Add(i.ToString());
                            listView1.Refresh();
                            progressBar1.Value += 1;
                        }
                    }
                });
            }).Start();
        }
Может надо где-то Sleep использовать?...
Спасибо.

Последний раз редактировалось Dasharnb777; 15.11.2010 в 16:41.
Dasharnb777 вне форума Ответить с цитированием
Старый 16.11.2010, 17:25   #2
Hollander
Участник клуба
 
Аватар для Hollander
 
Регистрация: 03.05.2007
Сообщений: 1,189
По умолчанию

Честно говоря код не очень на вид, поэтому даже не хочется разбираться в нем.
Вот готовые коды
На VB http://www.planetsourcecode.com/vb/s...=904&lngWId=10
На C# http://www.planet-source-code.com/vb...7169&lngWId=10
Hollander вне форума Ответить с цитированием
Старый 17.11.2010, 11:05   #3
Dasharnb777
Пользователь
 
Регистрация: 15.09.2009
Сообщений: 44
По умолчанию

Ого! Спсибо большое. Искала такое. Надеюсь подойдет))
Dasharnb777 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Логгирование, несколько потоков pa6kevi4 Общие вопросы .NET 3 12.06.2010 22:32
[Вопрос] IdHttp в несколько потоков TilerDerton Работа с сетью в Delphi 3 22.09.2009 22:14
Загрузка файла в несколько потоков Joe_Tribbiani Работа с сетью в Delphi 12 11.04.2009 12:06
Несколько потоков Adm Общие вопросы Delphi 13 18.01.2008 20:04