Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Верхотуров ПЗ 1.docx
Скачиваний:
67
Добавлен:
25.04.2017
Размер:
1.42 Mб
Скачать
        1. Сбор информации о сети

Thread

Класс, реализующий многопоточность

Thread (Func<void, object>)

Конструктор Thread. В качестве аргумента принимает функцию, которую необходимо выполнить в другом потоке. Функция не должна иметь возвращаемого значения и принимать один аргументobject.

Thread.Start(object param)

Запускает функцию в другом потоке и передает ей в качестве параметра свой аргумент.

Task

Класс, реализующий функционал асинхронных задач.

Wait()

Ожидание завершения асинхронной задачи

Result

Результат выполнения асинхронной задачи

IpAdress

Класс, в котором хранится информация об ip-адресе

PingReply

Представляет ответ команды Ping

Status

Возвращает статус ответа типа IPStatus

IpStatus

Перечисление возможных статусов ответа Ping

Success

Успешный пинг

Ping

SendPingAsync (IpAdress ip, int timeout)

Отправка асинхронного пинга. Аргументами являются адрес и таймаут. Возвращает Task<PingReply>. В случае неверного адреса кидаетPingException

Dns

Предоставляет методы, связанные с Dns-сервером

GetHostEntry(IpAdress addr).HostName

Возвращает символьное имя сайта. В случае неудачи кидает SocketException

CountDownEvent

Инструмент синхронизации. Представляет собой обратный счетчик.

CountDownEvent (int count)

Конструктор счетчика от количества элементов

Wait()

Ожидает завершения счетчика

Signal()

Уменьшает значение счетчика на 1

DataTable

Представляет собой таблицу

Rows.Add

Добавление новой строки

Укрупненный алгоритм сбора информации о сети

  1. Для каждого i-го адреса из диапазона адресовip_range(цикл по всем адресам):

for (int i = 0; i < N; i++)

    1. Запросить статус работоспобности узла:

      1. Создать объект класса Ping.

Ping pingSender = new Ping();

      1. Прикрепить Callback метод - PingCompletedCallback к объекту Ping

pingSender.PingCompleted += PingCompletedCallback;

      1. Отправить асинхронный запрос работоспобности узла, указав в качестве параметров:

- ip_range[i] – текущий IP-адрес

- i – индекс текущего IP-адреса

pingSender.SendAsync(ip_range[i], i);

    1. В Callback методе PingCompletedCallback(object sender, PingCompletedEventArgs e)

      1. Извлечь информацию – узнать индекс адреса, для которого пришел ответ и соответствующий статус

int index = (int) ((object)e.UserState);

string status = e.UserState.Status;

      1. Сохранить статус работоспобности в список по найденному индексу

ping[index] = status;

  1. Для каждого i-го адреса из диапазона адресовip_range(цикл по всем адресам):

for (int i = 0; i < N; i++)

    1. Определить доменное имя узла:

      1. Создать новый поток Thread, указав в качестве параметра делегатgetName, у которого в свою очередь параметры:

-ip_range[i] – текущий IP-адрес

-i– индекс текущегоIP-адреса

и затем запустить его, вызвав метод Start:

new Thread( () => GetName(ip_range[i], i) ).Start();

    1. В методе делегате GetName(uint ip, int index)

      1. Выполнить запрос на разрешение IP-адреса в доменное

IPHostEntry host = Dns.GetHostEntry(ip);

      1. Попытаться сохранить информацию в список Dnsимен по соответствующему индексу

dns[index] =host.HostName;

в случае ошибки присвоить название “Хост неизвестен”

dns[index] = “Хост неизвестен”;