Как проверить связь с компьютером с помощью 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-канал.