Поделиться через


Как проверить связь с компьютером с помощью Windows Forms

Автор: Супротим Агарвал (Suprotim Agarwal)

Класс ‘Ping’ похож на программу Ping.exe. С помощью методов класса ‘Ping’ отправить ICMP-запрос можно как синхронно, так и асинхронно. Метод Send() — это синхронный метод, который возвращает объект ‘PingReply’ с результатами ICMP-запроса. Пока он ждет ответа, приложение блокируется. SendAsync() — это асинхронный метод, использующий для отправки запроса отдельный поток. Когда ожидание завершается, порождается событие ‘PingCompleted’, для обработки которого можно использовать делегат‘PingCompletedEventHandler’.

Вот пример синхронной и асинхронной отправки запроса:

Используйте пространство имен System.Net.NetworkInformation

C#

using System.Net.NetworkInformation;

VB.NET

Imports System.Net.NetworkInformation

Использование метода Send():

C#

string mac = "www.dotnetcurry.com"; // или другое имя компьютера

Ping pingreq = new Ping();

PingReply rep = pingreq.Send(mac);

Console.WriteLine("Проверка связи с {0} [{1}]", mac, rep.Address.ToString());

Console.WriteLine("Ответ от {0} : время={1} TTL={2}",

          rep.Address.ToString(), rep.RoundtripTime, rep.Options.Ttl );

Console.ReadLine();

VB.NET

Dim mac As String = "www.dotnetcurry.com" ' или другое имя компьютера
Dim pingreq As Ping = New Ping()
Dim rep As PingReply = pingreq.Send(mac)
Console.WriteLine("Проверка связи с {0} [{1}]", mac, rep.Address.ToString())
Console.WriteLine("Ответ от {0} : время={1} TTL={2}", rep.Address.ToString(), rep.RoundtripTime, rep.Options.Ttl)
Console.ReadLine()

Использование метода SendAsync():

C#

System.Threading.AutoResetEvent autores = new System.Threading.AutoResetEvent(false);

string mac = "www.dotnetcurry.com";

Ping pingasync = new Ping();

pingasync.PingCompleted += new PingCompletedEventHandler(PingCompletedMethod);

pingasync.SendAsync(mac, "ping");

autores.WaitOne();

private static void PingCompletedMethod(object sender, PingCompletedEventArgs e)

        {

            PingReply rep = e.Reply;

            Console.WriteLine("Проверка связи с {0}", rep.Address.ToString());

Console.WriteLine("Ответ от {0} : время={1} TTL={2}",

          rep.Address.ToString(), rep.RoundtripTime, rep.Options.Ttl );

Console.ReadLine();

            if(e.Error != null)

            {

                Console.WriteLine("Ошибка при проверке");

                Console.WriteLine(e.Error.ToString());

            }           

        }

VB.NET

Private autores As System.Threading.AutoResetEvent = New System.Threading.AutoResetEvent(False)
Private mac As String = "www.dotnetcurry.com"
Private pingasync As Ping = New Ping()
Private pingasync.PingCompleted += New PingCompletedEventHandler(PingCompletedMethod)
pingasync.SendAsync(mac, "ping")
autores.WaitOne()
 
private static void PingCompletedMethod(Object sender, PingCompletedEventArgs e)
      Dim rep As PingReply = e.Reply
      Console.WriteLine("Проверка связи с {0}", rep.Address.ToString())
Console.WriteLine("Ответ от {0} : время={1} TTL={2}", rep.Address.ToString(), rep.RoundtripTime, rep.Options.Ttl)
Console.ReadLine()
      If Not e.Error Is Nothing Then
            Console.WriteLine("Ошибка при проверке")
            Console.WriteLine(e.Error.ToString())
      End If

Вот и вся суть класса Ping. Помните, что некоторые брандмауэры блокируют ICMP-запросы. Разрешите ICMP-запросы перед тем, как воспользоваться примером. Надеюсь, статья оказалась полезной.

Если статья понравилась, подпишитесь на мой RSS-канал.