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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Опрос портов на С#. 
:(
    Опции темы
Joker07
Дата 9.6.2008, 22:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Люди, помогите студенту разобраться в коде. Программа работает, назначение - опрос портов. Подправьте или добавьте комменты, пж-та.
Прога легкая, я просто в C#/С++ не шарю, но эту прогу сдать надо, а препод предирается к каждой строчке. Вот и разбираю по слогам...
Код программы:
Код

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;
using System.Threading;

namespace PortScan // объявление собственного пространства имен PortScan
{
    /// <summary>
    /// Description of MainForm.
    /// </summary>
    public partial class MainForm : Form //класс главной формы
    {
        
        public static ManualResetEvent connectDone = new ManualResetEvent(false); // ???
        public string qwert;  // не используется
        
        [STAThread] // ???
        public static void Main(string[] args) //  ???
        {
            Application.EnableVisualStyles(); // включает визуалньные стили формы;
            Application.SetCompatibleTextRenderingDefault(false); // ??
            Application.Run(new MainForm());  // запуск главной формы
        }
        
        public MainForm() // описание методов главной формы
        {
            //
            // The InitializeComponent() call is required for Windows Forms designer support.
            //
            InitializeComponent(); // инициализация компонентов главной формы
            
            //
            // TODO: Add constructor code after the InitializeComponent() call.
            //
        }
        
        void Button1Click(object sender, EventArgs e) // обработка метода кнопки
        {
            int BeginPort = Convert.ToInt32(nBeginPort.Value);  // создаем переменную BeginPort и заносим в нее значение порта, от
            int EndPort = Convert.ToInt32(nEndPort.Value); // создаем переменную EndPort и заносим в нее конечное значение, до
            
            int i; // дополнит.переменная для цикла
            
            progressBar1.Maximum = EndPort - BeginPort + 1; // установление максимума полоски заполнения

            progressBar1.Value = 0; // обнуление полоски
            listView1.Items.Clear(); // очищение поля вывода
            
            IPAddress addr = IPAddress.Parse(tIPAddress.Text); // заносим в перем. addr значение введенного IP-адреса
        
            for (i = BeginPort; i <= EndPort; i++)  // цикл
            {
                
                IPEndPoint ep = new IPEndPoint(addr, i);  // создаем перем. ep и заносим в нее IP-адрес и номер текущего порта
                //Создаем и инициализируем сокет, параметры - адресное пространство, тип сокета, тип протокола
                Socket soc = new Socket(AddressFamily.InterNetwork,
                                        SocketType.Stream,
                                        ProtocolType.Tcp);
                //Пытаемся соединиться с сервером
                IAsyncResult asyncResult = soc.BeginConnect(ep, new AsyncCallback(ConnectCallback), soc); 
                // как здесь работает asyncResult? Он получает сигнал - дошло до опрашиваемого порта или не дошло?
               
                if (!asyncResult.AsyncWaitHandle.WaitOne(30, false))
                    // условие - если сигнал от порта не пришел обратно в течении 30 секунд, то
             {
                    soc.Close(); // закрываем сокет и далее пишем, что порт закрыт
                 listView1.Items.Add("Порт " + i.ToString());
                    listView1.Items[i-BeginPort].SubItems.Add("");     
                    listView1.Items[i-BeginPort].SubItems.Add("закрыт");
                    listView1.Refresh();
                    progressBar1.Value += 1;
                    
             }
                else
                {
                    soc.Close(); // закрываем сокет и далее пишем, что порт открыт
                    listView1.Items.Add("Порт " + i.ToString());
                    listView1.Items[i-BeginPort].SubItems.Add("открыт");
                    progressBar1.Value += 1;
                }
            }
        }

        private static void ConnectCallback(IAsyncResult ar) // статистический метод с параметром ar, отображ-м инфу - дошел сигнал до порта или нет
        {
         try //  как работает try?
         {
             Socket client = (Socket) ar.AsyncState; // создаем сокет client и заносим в него инфу - дошел сигнал до порта или нет
             client.EndConnect(ar); // завершаем посылку сигнала на сокет client
             connectDone.Set();  // отсылаем сигнал от порта обратно на ???
         } 
            catch (Exception e) // обработка исключения
            {
         }
        }

    }
}

PM MAIL   Вверх
Zakonnic
Дата 10.6.2008, 16:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



 smile RTFM, однако. В вижуал студио ставим курсор на непонятный класс или метод и нажимаем F1 (если конечно справка установлена). В описании классов обычно есть пример использования и замечания по применению.

Вот из интернета, но то же самое есть и в локальном МСДН:
ManualResetEvent Constructor
Main() and Command-Line Arguments
Socket.BeginConnect Method

Да, и если все будет совсем плохо, то преподу тоже говори, что про тонкости можно почитаь в МСДН. Хотя с вопросом про метод Main это, конечно, не сработает smile
--------------------
...и никогда не пишите в комментариях правду
PM MAIL ICQ   Вверх
Joker07
Дата 12.6.2008, 18:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



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

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

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

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


 




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


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

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