Ping Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Позволяет приложению определить, доступен ли удаленный компьютер через сеть.
public ref class Ping : System::ComponentModel::Component
public ref class Ping : IDisposable
public ref class Ping : System::ComponentModel::Component, IDisposable
public class Ping : System.ComponentModel.Component
public class Ping : IDisposable
public class Ping : System.ComponentModel.Component, IDisposable
type Ping = class
inherit Component
type Ping = class
interface IDisposable
type Ping = class
inherit Component
interface IDisposable
Public Class Ping
Inherits Component
Public Class Ping
Implements IDisposable
Public Class Ping
Inherits Component
Implements IDisposable
- Наследование
- Наследование
-
Ping
- Реализации
Примеры
В следующем примере кода демонстрируется синхронное использование Ping класса.
using System;
using System.Net;
using System.Net.NetworkInformation;
using System.Text;
namespace Examples.System.Net.NetworkInformation.PingTest
{
public class PingExample
{
// args[0] can be an IPaddress or host name.
public static void Main (string[] args)
{
Ping pingSender = new Ping ();
PingOptions options = new PingOptions ();
// Use the default Ttl value which is 128,
// but change the fragmentation behavior.
options.DontFragment = true;
// Create a buffer of 32 bytes of data to be transmitted.
string data = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
byte[] buffer = Encoding.ASCII.GetBytes (data);
int timeout = 120;
PingReply reply = pingSender.Send (args[0], timeout, buffer, options);
if (reply.Status == IPStatus.Success)
{
Console.WriteLine ("Address: {0}", reply.Address.ToString ());
Console.WriteLine ("RoundTrip time: {0}", reply.RoundtripTime);
Console.WriteLine ("Time to live: {0}", reply.Options.Ttl);
Console.WriteLine ("Don't fragment: {0}", reply.Options.DontFragment);
Console.WriteLine ("Buffer size: {0}", reply.Buffer.Length);
}
}
}
}
open System.Net.NetworkInformation
open System.Text
// args[0] can be an IPaddress or host name.
[<EntryPoint>]
let main args =
let pingSender = new Ping()
// Use the default Ttl value which is 128,
// but change the fragmentation behavior.
let options = PingOptions()
options.DontFragment <- true
// Create a buffer of 32 bytes of data to be transmitted.
let data = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
let buffer = Encoding.ASCII.GetBytes data
let timeout = 120
let reply: PingReply = pingSender.Send(args.[0], timeout, buffer, options)
match reply.Status with
| IPStatus.Success ->
printfn "Address: %O" reply.Address
printfn "RoundTrip time: %d" reply.RoundtripTime
printfn "Time to live: %d" reply.Options.Ttl
printfn "Don't fragment: %b" reply.Options.DontFragment
printfn "Buffer size: %d" reply.Buffer.Length
0
| _ ->
eprintfn "Error sending ping: %O" reply
eprintfn "Error was: %O" reply.Status
1
В следующем примере кода демонстрируется асинхронное использование Ping класса.
using System;
using System.Text;
using System.Net;
using System.Net.NetworkInformation;
using System.ComponentModel;
using System.Threading;
namespace Examples.System.Net.NetworkInformation.PingTest
{
public class PingExample
{
public static void Main (string[] args)
{
if (args.Length == 0)
throw new ArgumentException ("Ping needs a host or IP Address.");
string who = args[0];
AutoResetEvent waiter = new AutoResetEvent (false);
Ping pingSender = new Ping ();
// When the PingCompleted event is raised,
// the PingCompletedCallback method is called.
pingSender.PingCompleted += new PingCompletedEventHandler (PingCompletedCallback);
// Create a buffer of 32 bytes of data to be transmitted.
string data = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
byte[] buffer = Encoding.ASCII.GetBytes (data);
// Wait 12 seconds for a reply.
int timeout = 12000;
// Set options for transmission:
// The data can go through 64 gateways or routers
// before it is destroyed, and the data packet
// cannot be fragmented.
PingOptions options = new PingOptions (64, true);
Console.WriteLine ("Time to live: {0}", options.Ttl);
Console.WriteLine ("Don't fragment: {0}", options.DontFragment);
// Send the ping asynchronously.
// Use the waiter as the user token.
// When the callback completes, it can wake up this thread.
pingSender.SendAsync(who, timeout, buffer, options, waiter);
// Prevent this example application from ending.
// A real application should do something useful
// when possible.
waiter.WaitOne ();
Console.WriteLine ("Ping example completed.");
}
private static void PingCompletedCallback (object sender, PingCompletedEventArgs e)
{
// If the operation was canceled, display a message to the user.
if (e.Cancelled)
{
Console.WriteLine ("Ping canceled.");
// Let the main thread resume.
// UserToken is the AutoResetEvent object that the main thread
// is waiting for.
((AutoResetEvent)e.UserState).Set ();
}
// If an error occurred, display the exception to the user.
if (e.Error != null)
{
Console.WriteLine ("Ping failed:");
Console.WriteLine (e.Error.ToString ());
// Let the main thread resume.
((AutoResetEvent)e.UserState).Set();
}
PingReply reply = e.Reply;
DisplayReply (reply);
// Let the main thread resume.
((AutoResetEvent)e.UserState).Set();
}
public static void DisplayReply (PingReply reply)
{
if (reply == null)
return;
Console.WriteLine ("ping status: {0}", reply.Status);
if (reply.Status == IPStatus.Success)
{
Console.WriteLine ("Address: {0}", reply.Address.ToString ());
Console.WriteLine ("RoundTrip time: {0}", reply.RoundtripTime);
Console.WriteLine ("Time to live: {0}", reply.Options.Ttl);
Console.WriteLine ("Don't fragment: {0}", reply.Options.DontFragment);
Console.WriteLine ("Buffer size: {0}", reply.Buffer.Length);
}
}
}
}
Комментарии
Приложения используют Ping класс, чтобы определить, доступен ли удаленный компьютер.
Сетевая топология может определить, может ли Ping успешно связаться с удаленным узлом. Наличие и настройка прокси-серверов, оборудования преобразования сетевых адресов (NAT) или брандмауэров может предотвратить Ping успешное выполнение. Ping Успешное выполнение указывает только на то, что удаленный узел может быть достигнут в сети; наличие служб более высокого уровня (например, веб-сервера) на удаленном узле не гарантируется.
Этот класс предоставляет функциональные возможности, аналогичные средству командной строки Ping.exe. SendAsync Методы Send отправляют сообщение запроса на эхо-запрос протокола ICMP (ICMP) на удаленный компьютер и ожидает сообщения ответа на эхо-сообщение ICMP с этого компьютера. Подробное описание сообщений ICMP см. в статье RFC 792, доступной по адресу https://www.ietf.org.
Следующие типы используются с классом Ping и подробно описаны ниже.
| Имя типа | Описание |
|---|---|
| IPStatus | Определяет коды состояния, описывающие результат сообщения эхо-запроса ICMP. |
| PingOptions | Позволяет настраивать или извлекать параметры, управляющие тем, сколько раз можно перенаправить пакет запроса (Ttl), а также определить, может ли он быть фрагментирован (DontFragment ). |
| PingReply | Содержит результаты эхо-запроса ICMP. |
| PingException | Возникает, если возникает неустранимая ошибка. |
| PingCompletedEventArgs | Содержит данные, связанные с PingCompleted событиями, которые возникают при SendAsync завершении вызова или отмене. |
| PingCompletedEventHandler | Делегат, предоставляющий метод обратного вызова, вызываемый при SendAsync завершении вызова или отмене. |
Методы Send возвращают ответ в объектеPingReply.SendAsync Свойство PingReply.Status возвращает IPStatus значение, указывающее результат запроса.
При отправке запроса необходимо указать удаленный компьютер. Это можно сделать, указав строку имени узла, IP-адрес в формате строки или IPAddress объект.
Можно также указать любой из следующих типов сведений:
Данные для сопровождения запроса. Указание
bufferпозволяет узнать время, необходимое для пакета определенного размера для перемещения и с удаленного узла, а также максимальной единицы передачи сетевого пути. (См Send . или SendAsync перегрузки, которые принимаютbufferпараметр.)Может ли пакет ICMP Эхо быть фрагментирован во время передачи. (См. DontFragment свойство и SendSendAsync перегрузки, которые принимают
optionsпараметр.)Сколько раз маршрутизация узлов, таких как маршрутизаторы или шлюзы, может перенаправить пакет, прежде чем он достигнет целевого компьютера или удаляется. (См Ttl . и SendSendAsync перегрузки, которые принимают
optionsпараметр.)Ограничение времени, в течение которого должен быть получен ответ. (См Send . или SendAsync перегрузки, которые принимают
timeoutпараметр.
Класс Ping предлагает синхронные и асинхронные методы для отправки запроса. Если приложение должно блокироваться во время ожидания ответа, используйте Send методы. Эти методы синхронны. Если приложение не должно блокироваться, используйте асинхронные SendAsync методы. Вызов SendAsync выполнения в собственном потоке, который автоматически выделяется из пула потоков. После завершения асинхронной операции возникает PingCompleted событие. Приложения используют делегат для PingCompletedEventHandler указания метода, вызываемого для PingCompleted событий. Перед вызовом PingCompletedEventHandlerSendAsyncнеобходимо добавить делегат в событие. Метод делегата получает PingCompletedEventArgs объект, содержащий PingReply объект, описывающий результат SendAsync вызова.
Нельзя использовать один и тот же экземпляр класса для создания нескольких Ping одновременных запросов на Эхо ICMP. Вызов Send во время SendAsync выполнения вызова или вызов SendAsync несколько раз до завершения всех предыдущих вызовов приводит к InvalidOperationExceptionвозникновению ошибки.
Конструкторы
| Имя | Описание |
|---|---|
| Ping() |
Инициализирует новый экземпляр класса Ping. |
Свойства
| Имя | Описание |
|---|---|
| CanRaiseEvents |
Возвращает значение, указывающее, может ли компонент вызвать событие. (Унаследовано от Component) |
| Container |
Возвращает объект IContainer , содержащий Componentобъект . (Унаследовано от Component) |
| DesignMode |
Возвращает значение, указывающее, находится ли текущий Component режим разработки. (Унаследовано от Component) |
| Events |
Возвращает список обработчиков событий, подключенных к этому Component. (Унаследовано от Component) |
| Site |
Возвращает или задает ISite объект Component. (Унаследовано от Component) |
Методы
| Имя | Описание |
|---|---|
| CreateObjRef(Type) |
Создает объект, содержащий все соответствующие сведения, необходимые для создания прокси-сервера, используемого для взаимодействия с удаленным объектом. (Унаследовано от MarshalByRefObject) |
| Dispose() |
Освобождает неуправляемые ресурсы и удаляет управляемые ресурсы, используемые параметром Ping. |
| Dispose() |
Освобождает все ресурсы, используемые параметром Component. (Унаследовано от Component) |
| Dispose(Boolean) |
Освобождает неуправляемые ресурсы, используемые Ping объектом, и при необходимости удаляет управляемые ресурсы. |
| Dispose(Boolean) |
Освобождает неуправляемые ресурсы, используемые Component, и при необходимости освобождает управляемые ресурсы. (Унаследовано от Component) |
| Equals(Object) |
Определяет, равен ли указанный объект текущему объекту. (Унаследовано от Object) |
| GetHashCode() |
Служит хэш-функцией по умолчанию. (Унаследовано от Object) |
| GetLifetimeService() |
Устаревшие..
Извлекает текущий объект службы времени существования, который управляет политикой времени существования для этого экземпляра. (Унаследовано от MarshalByRefObject) |
| GetService(Type) |
Возвращает объект, представляющий службу, предоставляемую Component или ее Container. (Унаследовано от Component) |
| GetType() |
Возвращает Type текущего экземпляра. (Унаследовано от Object) |
| InitializeLifetimeService() |
Устаревшие..
Получает объект службы времени существования для управления политикой времени существования для этого экземпляра. (Унаследовано от MarshalByRefObject) |
| MemberwiseClone() |
Создает неглубокую копию текущей Object. (Унаследовано от Object) |
| MemberwiseClone(Boolean) |
Создает неглубокую копию текущего MarshalByRefObject объекта. (Унаследовано от MarshalByRefObject) |
| OnPingCompleted(PingCompletedEventArgs) |
Вызывает событие PingCompleted. |
| Send(IPAddress, Int32, Byte[], PingOptions) |
Пытается отправить сообщение об эхо-сообщении протокола ICMP с указанным буфером данных на компьютер, имеющий указанный IPAddress и получающий соответствующее сообщение ответа на эхо-сообщение ICMP от этого компьютера. Эта перегрузка позволяет указать значение времени ожидания для операции и фрагментации элемента управления и значения времени в реальном времени для пакета эхо-сообщений ICMP. |
| Send(IPAddress, Int32, Byte[]) |
Пытается отправить сообщение об эхо-сообщении протокола ICMP с указанным буфером данных на компьютер с указанным IPAddressсообщением и получить соответствующее сообщение ответа на эхо-сообщение ICMP с этого компьютера. Эта перегрузка позволяет указать значение времени ожидания для операции. |
| Send(IPAddress, Int32) |
Пытается отправить сообщение об эхо-сообщении протокола ICMP с указанным буфером данных на компьютер с указанным IPAddressсообщением и получить соответствующее сообщение ответа на эхо-сообщение ICMP с этого компьютера. Этот метод позволяет указать значение времени ожидания для операции. |
| Send(IPAddress, TimeSpan, Byte[], PingOptions) |
Пытается отправить сообщение об эхо-сообщении протокола ICMP (ICMP) на указанный компьютер IPAddressи получить соответствующее сообщение ответа на эхо-сообщение ICMP с этого компьютера. |
| Send(IPAddress) |
Пытается отправить эхо-сообщение протокола ICMP (ICMP) на указанный компьютер IPAddressи получить соответствующее сообщение ответа на эхо-сообщение ICMP с этого компьютера. |
| Send(String, Int32, Byte[], PingOptions) |
Пытается отправить сообщение об эхо-сообщении протокола ICMP с указанным буфером данных на указанный компьютер и получить соответствующее сообщение ответа на эхо-сообщение ICMP от этого компьютера. Эта перегрузка позволяет указать значение времени ожидания для операции и фрагментации элемента управления и значения времени в реальном времени для пакета ICMP. |
| Send(String, Int32, Byte[]) |
Пытается отправить сообщение об эхо-сообщении протокола ICMP с указанным буфером данных на указанный компьютер и получить соответствующее сообщение ответа на эхо-сообщение ICMP от этого компьютера. Эта перегрузка позволяет указать значение времени ожидания для операции. |
| Send(String, Int32) |
Пытается отправить сообщение эхо-сообщения ICMP на указанный компьютер и получить соответствующее сообщение ответа на эхо-сообщение ICMP с этого компьютера. Этот метод позволяет указать значение времени ожидания для операции. |
| Send(String, TimeSpan, Byte[], PingOptions) |
Пытается отправить сообщение об эхо-сообщении ICMP на указанный компьютер и получить соответствующее сообщение ответа на эхо-сообщение ICMP с этого компьютера. |
| Send(String) |
Пытается отправить сообщение эхо-сообщения ICMP на указанный компьютер и получить соответствующее сообщение ответа на эхо-сообщение ICMP с этого компьютера. |
| SendAsync(IPAddress, Int32, Byte[], Object) |
Асинхронно пытается отправить сообщение эхо-сообщения протокола ICMP с указанным буфером данных на компьютер, имеющий указанный IPAddressобъект, и получает соответствующее сообщение ответа на эхо-сообщение ICMP с этого компьютера. Эта перегрузка позволяет указать значение времени ожидания для операции. |
| SendAsync(IPAddress, Int32, Byte[], PingOptions, Object) |
Асинхронно пытается отправить сообщение эхо-сообщения протокола ICMP с указанным буфером данных на компьютер, имеющий указанный IPAddressобъект, и получает соответствующее сообщение ответа на эхо-сообщение ICMP с этого компьютера. Эта перегрузка позволяет указать значение времени ожидания для операции и фрагментации элемента управления и значения времени в реальном времени для пакета эхо-сообщений ICMP. |
| SendAsync(IPAddress, Int32, Object) |
Асинхронно пытается отправить сообщение об эхо-сообщении протокола ICMP (ICMP) на указанный компьютер IPAddressи получает соответствующее сообщение ответа на эхо-сообщение ICMP с этого компьютера. Эта перегрузка позволяет указать значение времени ожидания для операции. |
| SendAsync(IPAddress, Object) |
Асинхронно пытается отправить сообщение об эхо-сообщении протокола ICMP (ICMP) на указанный компьютер IPAddressи получает соответствующее сообщение ответа на эхо-сообщение ICMP с этого компьютера. |
| SendAsync(String, Int32, Byte[], Object) |
Асинхронно пытается отправить сообщение об эхо-сообщении протокола ICMP с указанным буфером данных на указанный компьютер и получает соответствующее сообщение ответа на эхо-сообщение ICMP от этого компьютера. Эта перегрузка позволяет указать значение времени ожидания для операции. |
| SendAsync(String, Int32, Byte[], PingOptions, Object) |
Асинхронно пытается отправить сообщение об эхо-сообщении протокола ICMP с указанным буфером данных на указанный компьютер и получает соответствующее сообщение ответа на эхо-сообщение ICMP от этого компьютера. Эта перегрузка позволяет указать значение времени ожидания для операции и фрагментации элемента управления и значения времени в реальном времени для пакета ICMP. |
| SendAsync(String, Int32, Object) |
Асинхронно пытается отправить сообщение об эхо-сообщении icMP на указанный компьютер и получить соответствующее сообщение ответа на эхо-сообщение ICMP с этого компьютера. Эта перегрузка позволяет указать значение времени ожидания для операции. |
| SendAsync(String, Object) |
Асинхронно пытается отправить сообщение об эхо-сообщении icMP на указанный компьютер и получить соответствующее сообщение ответа на эхо-сообщение ICMP с этого компьютера. |
| SendAsyncCancel() |
Отменяет все ожидающие асинхронные запросы для отправки сообщения сообщения icMP и получает соответствующее сообщение ответа на эхо-сообщение ICMP. |
| SendPingAsync(IPAddress, Int32, Byte[], PingOptions) |
Отправляет сообщение об эхо-сообщении протокола ICMP с указанным буфером данных на компьютер с указанным IPAddressсообщением и получает соответствующее сообщение ответа на эхо-сообщение ICMP от этого компьютера в виде асинхронной операции. Эта перегрузка позволяет указать значение времени ожидания для операции, буфер, используемый для отправки и получения, а также управлять фрагментацией и значениями времени в реальном времени для пакета эхо-сообщений ICMP. |
| SendPingAsync(IPAddress, Int32, Byte[]) |
Отправьте сообщение эхо-сообщения протокола ICMP с заданным буфером данных на компьютер с указанным IPAddressсообщением и получает соответствующее сообщение ответа на эхо-сообщение ICMP от этого компьютера в качестве асинхронной операции. Эта перегрузка позволяет указать значение времени ожидания для операции и буфера, используемого для отправки и получения. |
| SendPingAsync(IPAddress, Int32) |
Отправьте сообщение эхо-сообщения протокола ICMP с заданным буфером данных на компьютер с указанным IPAddressсообщением и получает соответствующее сообщение ответа на эхо-сообщение ICMP от этого компьютера в качестве асинхронной операции. Эта перегрузка позволяет указать значение времени ожидания для операции. |
| SendPingAsync(IPAddress, TimeSpan, Byte[], PingOptions, CancellationToken) |
Отправляет сообщение об эхо-сообщении протокола ICMP с указанным буфером данных на компьютер с указанным IPAddressсообщением и получает соответствующее сообщение ответа на эхо-сообщение ICMP от этого компьютера в виде асинхронной операции. Эта перегрузка позволяет указать значение времени ожидания для операции, буфер, используемый для отправки и получения, фрагментации элементов управления и времени ожидания, а также CancellationToken для пакета эхо-сообщений ICMP. |
| SendPingAsync(IPAddress) |
Отправьте сообщение эхо-сообщения протокола ICMP с заданным буфером данных на компьютер с указанным IPAddressсообщением и получает соответствующее сообщение ответа на эхо-сообщение ICMP от этого компьютера в качестве асинхронной операции. |
| SendPingAsync(String, Int32, Byte[], PingOptions) |
Отправляет сообщение об эхо-сообщении протокола ICMP с указанным буфером данных на указанный компьютер и получает соответствующее сообщение ответа на эхо-сообщение ICMP от этого компьютера в качестве асинхронной операции. Эта перегрузка позволяет указать значение времени ожидания для операции, буфер, используемый для отправки и получения, а также управлять фрагментацией и значениями времени в реальном времени для пакета эхо-сообщений ICMP. |
| SendPingAsync(String, Int32, Byte[]) |
Отправляет сообщение об эхо-сообщении протокола ICMP с указанным буфером данных на указанный компьютер и получает соответствующее сообщение ответа на эхо-сообщение ICMP от этого компьютера в качестве асинхронной операции. Эта перегрузка позволяет указать значение времени ожидания для операции и буфера, используемого для отправки и получения. |
| SendPingAsync(String, Int32) |
Отправляет сообщение об эхо-сообщении протокола ICMP с указанным буфером данных на указанный компьютер и получает соответствующее сообщение ответа на эхо-сообщение ICMP от этого компьютера в качестве асинхронной операции. Эта перегрузка позволяет указать значение времени ожидания для операции. |
| SendPingAsync(String, TimeSpan, Byte[], PingOptions, CancellationToken) |
Отправляет сообщение об эхо-сообщении протокола ICMP с указанным буфером данных на указанный компьютер и получает соответствующее сообщение ответа на эхо-сообщение ICMP от этого компьютера в качестве асинхронной операции. Эта перегрузка позволяет указать значение времени ожидания для операции, буфер, используемый для отправки и получения, фрагментации элементов управления и времени ожидания, а также CancellationToken для пакета эхо-сообщений ICMP. |
| SendPingAsync(String) |
Отправляет сообщение об эхо-сообщении протокола ICMP с указанным буфером данных на указанный компьютер и получает соответствующее сообщение ответа на эхо-сообщение ICMP от этого компьютера в качестве асинхронной операции. |
| ToString() |
String Возвращает имя, содержащее имя , если таковое Componentимеется. Этот метод не должен быть переопределен. (Унаследовано от Component) |
| ToString() |
Возвращает строку, представляющую текущий объект. (Унаследовано от Object) |
События
| Имя | Описание |
|---|---|
| Disposed |
Происходит при удалении компонента вызовом Dispose() метода. (Унаследовано от Component) |
| PingCompleted |
Возникает, когда асинхронная операция отправки сообщения протокола ICMP и получения соответствующего сообщения ответа на эхо-сообщение ICMP завершается или отменяется. |
Явные реализации интерфейса
| Имя | Описание |
|---|---|
| IDisposable.Dispose() |
Освобождает все ресурсы, используемые экземплярами Ping класса. |