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 специальных константы, которые часто используются в управлении локальными сетями:
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.