Сетевое программирование в .NET. Расшифровка IP-адреса (IP address specification). Обеспечение надежности доставки пакетов, страница 18

Console.WriteLine (header + line + "\n{0,-28}: {1:f}\n{2,-28}: {3}\n{4,-28}: {5}\n",

"Node type",p.NodeType, "DHCP scope",p.DhcpScopeName, "WINS proxy",p.IsWinsProxy);

PingOptions options = new PingOptions (1, true);

byte[] buffer = Encoding.ASCII.GetBytes("Do you hear me?");

Ping ping = new Ping();

PingReply reply = ping.Send (Dns.GetHostName(), 120, buffer, options);

if (reply.Status == IPStatus.Success)

{

Console.Write("\nPinging host"+line.Substring (0, 13)+ "\n\n{0,-28}: ","Received");

foreach (byte b in reply.Buffer)

Console.Write(Convert.ToChar(b));

Console.Write("\n{0,-28}: {1}\n{2,-28}: {3}\n{4,-28}: {5}\n{6,-28}: {7}\n{8,-28}: {9}",

"Address", reply.Address.ToString(),

"RoundTrip time", reply.RoundtripTime,

"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 специальных константы, которые часто используются в управлении локальными сетями: