Учитывая диапазон IP-адресов, введенных пользователем (различными способами), я хочу определить, на каком из этих компьютеров работает программное обеспечение, с которым я могу общаться.
Вот основной процесс:
Пингуйте эти адреса, чтобы найти доступные машины
Подключение к известной розетке на доступных машинах
Отправка сообщения на успешно установленные сокеты
Сравните ответ с ожидаемым ответом
Шаги 2-4 для меня прямолинейны. Каков наилучший способ реализовать первый шаг в .NET?
Я смотрю на класс System.Net.NetworkInformation.Ping. Должен ли я пинговать несколько адресов одновременно, чтобы ускорить процесс? Если я пингую один адрес за раз с большим таймаутом, это может занять вечность. Но с небольшим таймаутом я могу пропустить некоторые машины, которые доступны.
Иногда, когда я знаю, что адрес указывает на активную машину, кажется, что эхо-запросы не выполняются. Нужно ли дважды пинговать в случае отклонения запроса?
В довершение всего, когда я сканирую большие коллекции адресов с отключенным сетевым кабелем, Ping генерирует исключение NullReferenceException в FreeUnmanagedResources (). !
Какие-нибудь указатели на лучший подход к сканированию диапазона IP-адресов, как это?