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


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 класса.

Применяется к

См. также раздел