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

Класс EndPoint, расположенный в пространстве имен System.Net (не путайте его с классом Endpoint, который существует в пространстве имен Microsoft.SqlServer.Management.Smo) является абстрактным родителем семейства классов, реализующих функциональность сетевых ресурсов или служб.

¨  IPEndPoint содержит пару (IP-адрес, номер порта) и реализует функциональность одного из концов (локального или удаленного) сетевого соединения. С помощью объекта класса IPEndPoint приложение получает доступ к какой-либо службе (network service) на host-компьютере.

¨  IrDAClient обслуживает беспроводное соединение (infrared connection). С помощью этого класса производится обнаружение, подключение и обмен данными с устройствами, использующими инфракрасное излучение.

¨  IrDAListener переводит сетевой разъем в режим прослушивания и мониторинга беспроводного соединения

¨  IrDAEndPoint представляет концевой узел беспроводного (инфракрасного) соединения.

¨  IrDADeviceInfo хранит информацию об устройствах, обменивающихся данными с помощью инфракрасного излучения.

Мы не будем подробно рассматривать технологию работы с беспроводными устройствами, но для того, чтобы уяснить роль новых классов, обозначим схему процесса обмена информацией. Логика обнаружения устройств, включения режима прослушивания и получения информации от устройства-источника выглядит таким образом.

IrDAClient client = new IrDAClient();

IrDADeviceInfo[] devices = client.DiscoverDevices(2); // Хотим работать с 2-мя устройствами

if (devices.Length == 0)

  return;

IPEndPoint point = new IrDAEndPoint (devices[0].DeviceID, "MyService");

IrDAListener listener = new IrDAListener (point);

listener.Start();   // Ожидание информации

client = listener.AcceptIrDAClient();  // Когда началась передача информации

Stream stream = client.GetStream();        // Получаем информацию

В пространстве имен System.Net.NetworkInformation вы обнаружите классы, которые дают доступ к данным о сетевых адресах, сетевом трафике, позволяют вводить реакции на события в системе (например, изменение сетевых адресов локального компьютера) и производить много других действий по управлению сетью.

¨  Класс IPGlobalProperties предоставляет информацию о конфигурации сетевых интерфейсов локального компьютера и его соединениях. С помощью метода GetIPGlobalProperties можно получить данные о сетевых соединениях и статистику их трафиков.

¨  Класс Ping реализует функциональность известной утилиты с тем же именем и позволяет проверить доступность того или иного компьютера в сети.

Следующий пример отображает некоторые данные, полученные с помощью методов и свойств этих классов. Проверьте его работу в рамках консольного проекта. Для этого вы можете добавить новый проект типа Visual C# Console Application (с именем SocketApp) к существующему решению WinSock.

public static void Main()

{

IPGlobalProperties p = IPGlobalProperties.GetIPGlobalProperties();

string

  header = "Global information for host computer: " + p.HostName + '.' + p.DomainName,

  line = "\n" + new string('\u2500', header.Length) + "\n";

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,