Сетевое программирование в .NET, страница 18

    "Time to live", reply.Options.Ttl,

    "Don't fragment", reply.Options.DontFragment,

    "Buffer size", reply.Buffer.Length);

}

}

Свойство NodeType класса IPGlobalProperties позволяет определить тип сетевого узла, соответствующего локальному компьютеру. Возможные значения типов перечислены в системе NetBIOS (Network Basic Input/Output System). Следующая таблица показывает способы определения IP-адреса по его NetBIOS-имени.

Тип узла

Способ получения IP-адреса

Broadcast

Используется запрос по имени NetBIOS

Peer2Peer

Используется одна из служб NBNS (NetBIOS Name Server), например, WINS (Windows Internet Name Service)

Mixed

Используется запрос по имени. В случае  отказа используется одна из служб NBNS

Hybrid

Используется одна из служб NBNS. В случае  отказа используется запрос по имени

Unknown

Способ не определен

¨  Свойство NodeType имеет тип NetBiosNodeType. Это перечисление, элементы которого соответствуют типам узлов рассмотренной таблицы.

¨  Свойство DhcpScopeName задает имя группы компьютеров, объединенных в подсеть.

¨  Свойство IsWinsProxy показывает, использует-ли локальный компьютер службу WINS, работающую с распределенной базой данных регистрации и опроса динамических NetBIOS-имен, отображаемых в IP-адреса.

В нашем примере также показано, как прозвонить узел сети (трезвон—одно из значений английского слова ping). Не уверен, застал-ли читатель время, когда наличие электрического контакта между отдельными узлами цепи действительно проверяли с помощью электрического звонка (который звенит, когда контакт существует). В нашем случае термин ping означает использование утилиты ping (или класса Ping) для проверки доступности узла с заданным именем (или IP-адресом).

Проверьте работу утилиты (наберите в командной строке: ping 127.0.0.1) и сравните параметры, выводимые ею, с теми, что получены методом Send класса Ping. Получите справку по всем входным параметрам метода Send. Обратите внимание на технику работы с потоком байтов (а не Unicode символов), она необходима для передачи данных по сети. Получите информацию о параметрах конструктора класса PingOptions. Для многократного прозвона используйте цикл.

Параметр TTL (Time-to-Live)—время жизни пакета измеряется не в секундах или минутах, а в количестве узлов сети, через которое он может пройти, не исчерпав запас отведенных ему жизненных сил. Проходя через шлюз (gateway) и маршрутизатор (router), пакет, совсем как в компьютерной игре, теряет одну жизнь. Когда счетчик жизней (TTL) станет равным нулю, пакет считается недоставляемым (undeliverable) и бракуется.

Специальные адреса

Следующий фрагмент (добавьте его в конец Main) позволяет убедиться, что классы .NET Framework действительно упрощают работу с объектами сетевого программирования. Вам, вероятно, уже надоели сетевые адреса, но мы опять к ним вернемся, чтобы проиллюстрировать новые свойства классов IPAddress и IPEndPoint. Класс IPAddress имеет  4 специальных константы, которые часто используются в управлении локальными сетями:

¨  Any — представляет собой любой из IP-адресов локальной сети,

¨  Broadcast — представляет широковещательный адрес локальной сети (адрес подсети):

¨  Loopback — представляет адрес заглушки (имитации сетевой карты), используемой для отладки приложений,

¨  None — адрес, имитирующий отсутствие в системе сетевого интерфейса.

Console.WriteLine("\n\nSpecial Addresses" + line.Substring(0, 18) +

  "\n\n{0,-20}: {1}\n{2,-20}: {3}\n{4,-20}: {5}\n{6,-20}: {7}",

  "Broadcast address", IPAddress.Broadcast,

  "None address", IPAddress.None,

  "Any address", IPAddress.Any,

  "Test Parse address", IPAddress.Parse("192.168.1.1"));

IPHostEntry host = Dns.GetHostEntry(Dns.GetHostName());

foreach (IPAddress addr in host.AddressList)

{