Compartir por


Ping Clase

Definición

Permite a una aplicación determinar si un equipo remoto es accesible a través de la red.

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
Herencia
Herencia
Ping
Implementaciones

Ejemplos

En el ejemplo de código siguiente se muestra el uso de la Ping clase de forma sincrónica.

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

En el ejemplo de código siguiente se muestra el uso de la Ping clase de forma asincrónica.

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);
            }
        }
    }
}

Comentarios

Las aplicaciones usan la Ping clase para detectar si se puede acceder a un equipo remoto.

La topología de red puede determinar si Ping puede ponerse en contacto correctamente con un host remoto. La presencia y configuración de servidores proxy, equipos de traducción de direcciones de red (NAT) o firewalls pueden impedir Ping que se realice correctamente. Un correcto Ping indica solo que se puede acceder al host remoto en la red; no se garantiza la presencia de servicios de nivel superior (como un servidor web) en el host remoto.

Esta clase proporciona una funcionalidad similar a la Ping.exe herramienta de línea de comandos. Los Send métodos y SendAsync envían un mensaje de solicitud de eco del Protocolo de mensajes de control de Internet (ICMP) a un equipo remoto y esperan un mensaje de respuesta de eco ICMP desde ese equipo. Para obtener una descripción detallada de los mensajes ICMP, consulte RFC 792, disponible en https://www.ietf.org.

Los siguientes tipos se usan con la Ping clase y se describen en detalle a continuación.

Nombre de tipo Descripción
IPStatus Define códigos de estado que describen el resultado de un mensaje de solicitud de eco ICMP.
PingOptions Permite configurar o recuperar las opciones que controlan cuántas veces se puede reenviar el paquete de solicitud (Ttl) y si se puede fragmentar (DontFragment ).
PingReply Contiene los resultados de una solicitud de eco ICMP.
PingException Se produce si se produce un error irrecuperable.
PingCompletedEventArgs Contiene los datos asociados a PingCompleted eventos, que se generan cuando se completa una SendAsync llamada o se cancela.
PingCompletedEventHandler Delegado que proporciona el método de devolución de llamada invocado cuando se completa una SendAsync llamada o se cancela.

Los Send métodos y SendAsync devuelven la respuesta en un PingReply objeto . La PingReply.Status propiedad devuelve un IPStatus valor para indicar el resultado de la solicitud.

Al enviar la solicitud, debe especificar el equipo remoto. Para ello, proporcione una cadena de nombre de host, una dirección IP en formato de cadena o un IPAddress objeto.

También puede especificar cualquiera de los siguientes tipos de información:

  • Datos para acompañar la solicitud. Especificar buffer le permite aprender la cantidad de tiempo necesaria para que un paquete de un tamaño determinado viaje hacia y desde el host remoto y la unidad de transmisión máxima de la ruta de acceso de red. (Vea las Send sobrecargas o SendAsync que toman un buffer parámetro).

  • Si el paquete ICMP Echo se puede fragmentar en tránsito. (Vea la DontFragment propiedad y las Send sobrecargas o SendAsync que toman un options parámetro).

  • Cuántas veces los nodos de enrutamiento, como enrutadores o puertas de enlace, pueden reenviar el paquete antes de que llegue al equipo de destino o se descarte. (Vea Ttl y las Send sobrecargas o SendAsync que toman un options parámetro).

  • Límite de tiempo en el que se debe recibir la respuesta. (Consulte las Send sobrecargas o SendAsync que toman un timeout parámetro.

La Ping clase ofrece métodos sincrónicos y asincrónicos para enviar la solicitud. Si la aplicación debe bloquearse mientras espera una respuesta, use los Send métodos ; estos métodos son sincrónicos. Si la aplicación no debe bloquearse, use los métodos asincrónicos SendAsync . Una llamada a se SendAsync ejecuta en su propio subproceso que se asigna automáticamente desde el grupo de subprocesos. Cuando se completa la operación asincrónica, genera el PingCompleted evento . Las aplicaciones usan un PingCompletedEventHandler delegado para especificar el método al que se llama para PingCompleted eventos. Debe agregar un PingCompletedEventHandler delegado al evento antes de llamar a SendAsync. El método del delegado recibe un PingCompletedEventArgs objeto que contiene un PingReply objeto que describe el resultado de la SendAsync llamada.

No se puede usar la misma instancia de la Ping clase para generar varias solicitudes simultáneas icMP Echo. Llamar Send mientras una SendAsync llamada está en curso o llama SendAsync varias veces antes de que se hayan completado todas las llamadas anteriores, se produce una InvalidOperationExceptionexcepción .

Constructores

Nombre Description
Ping()

Inicializa una nueva instancia de la clase Ping.

Propiedades

Nombre Description
CanRaiseEvents

Obtiene un valor que indica si el componente puede generar un evento.

(Heredado de Component)
Container

Obtiene el IContainer objeto que contiene el Componentobjeto .

(Heredado de Component)
DesignMode

Obtiene un valor que indica si Component el objeto está actualmente en modo de diseño.

(Heredado de Component)
Events

Obtiene la lista de controladores de eventos que están asociados a este Componentobjeto .

(Heredado de Component)
Site

Obtiene o establece el ISite objeto de .Component

(Heredado de Component)

Métodos

Nombre Description
CreateObjRef(Type)

Crea un objeto que contiene toda la información pertinente necesaria para generar un proxy usado para comunicarse con un objeto remoto.

(Heredado de MarshalByRefObject)
Dispose()

Libera los recursos no administrados y elimina los recursos administrados usados por .Ping

Dispose()

Libera todos los recursos usados por .Component

(Heredado de Component)
Dispose(Boolean)

Libera los recursos no administrados utilizados por el Ping objeto y, opcionalmente, elimina los recursos administrados.

Dispose(Boolean)

Libera los recursos no administrados utilizados por Component y, opcionalmente, libera los recursos administrados.

(Heredado de Component)
Equals(Object)

Determina si el objeto especificado es igual al objeto actual.

(Heredado de Object)
GetHashCode()

Actúa como función hash predeterminada.

(Heredado de Object)
GetLifetimeService()
Obsoletos.

Recupera el objeto de servicio de duración actual que controla la directiva de duración de esta instancia.

(Heredado de MarshalByRefObject)
GetService(Type)

Devuelve un objeto que representa un servicio proporcionado por Component o por su Container.

(Heredado de Component)
GetType()

Obtiene el Type de la instancia actual.

(Heredado de Object)
InitializeLifetimeService()
Obsoletos.

Obtiene un objeto de servicio de duración para controlar la directiva de duración de esta instancia.

(Heredado de MarshalByRefObject)
MemberwiseClone()

Crea una copia superficial del Objectactual.

(Heredado de Object)
MemberwiseClone(Boolean)

Crea una copia superficial del objeto actual MarshalByRefObject .

(Heredado de MarshalByRefObject)
OnPingCompleted(PingCompletedEventArgs)

Genera el evento PingCompleted.

Send(IPAddress, Int32, Byte[], PingOptions)

Intenta enviar un mensaje de eco del Protocolo de mensajes de control de Internet (ICMP) con el búfer de datos especificado al equipo que tiene especificado IPAddress y recibe un mensaje de respuesta de eco ICMP correspondiente de ese equipo. Esta sobrecarga permite especificar un valor de tiempo de espera para la operación y controlar la fragmentación y los valores de período de vida para el paquete de mensajes de eco ICMP.

Send(IPAddress, Int32, Byte[])

Intenta enviar un mensaje de eco del Protocolo de mensajes de control de Internet (ICMP) con el búfer de datos especificado al equipo que tiene el especificado IPAddressy recibe un mensaje de respuesta de eco ICMP correspondiente de ese equipo. Esta sobrecarga permite especificar un valor de tiempo de espera para la operación.

Send(IPAddress, Int32)

Intenta enviar un mensaje de eco del Protocolo de mensajes de control de Internet (ICMP) con el búfer de datos especificado al equipo que tiene el especificado IPAddressy recibe un mensaje de respuesta de eco ICMP correspondiente de ese equipo. Este método permite especificar un valor de tiempo de espera para la operación.

Send(IPAddress, TimeSpan, Byte[], PingOptions)

Intenta enviar un mensaje de eco del Protocolo de mensajes de control de Internet (ICMP) al equipo que tiene el especificado IPAddressy para recibir un mensaje de respuesta de eco ICMP correspondiente de ese equipo.

Send(IPAddress)

Intenta enviar un mensaje de eco del Protocolo de mensajes de control de Internet (ICMP) al equipo que tiene el especificado IPAddressy recibe un mensaje de respuesta de eco ICMP correspondiente de ese equipo.

Send(String, Int32, Byte[], PingOptions)

Intenta enviar un mensaje de eco del Protocolo de mensajes de control de Internet (ICMP) con el búfer de datos especificado al equipo especificado y recibir un mensaje de respuesta de eco ICMP correspondiente de ese equipo. Esta sobrecarga permite especificar un valor de tiempo de espera para la operación y controlar la fragmentación y los valores de período de vida para el paquete ICMP.

Send(String, Int32, Byte[])

Intenta enviar un mensaje de eco del Protocolo de mensajes de control de Internet (ICMP) con el búfer de datos especificado al equipo especificado y recibir un mensaje de respuesta de eco ICMP correspondiente de ese equipo. Esta sobrecarga permite especificar un valor de tiempo de espera para la operación.

Send(String, Int32)

Intenta enviar un mensaje de eco del Protocolo de mensajes de control de Internet (ICMP) al equipo especificado y recibir un mensaje de respuesta de eco ICMP correspondiente de ese equipo. Este método permite especificar un valor de tiempo de espera para la operación.

Send(String, TimeSpan, Byte[], PingOptions)

Intenta enviar un mensaje de eco del Protocolo de mensajes de control de Internet (ICMP) al equipo especificado y recibir un mensaje de respuesta de eco ICMP correspondiente de ese equipo.

Send(String)

Intenta enviar un mensaje de eco del Protocolo de mensajes de control de Internet (ICMP) al equipo especificado y recibir un mensaje de respuesta de eco ICMP correspondiente de ese equipo.

SendAsync(IPAddress, Int32, Byte[], Object)

Intenta enviar de forma asincrónica un mensaje de eco del Protocolo de mensajes de control de Internet (ICMP) con el búfer de datos especificado al equipo que tiene el especificado IPAddressy recibe un mensaje de respuesta de eco ICMP correspondiente de ese equipo. Esta sobrecarga permite especificar un valor de tiempo de espera para la operación.

SendAsync(IPAddress, Int32, Byte[], PingOptions, Object)

Intenta enviar de forma asincrónica un mensaje de eco del Protocolo de mensajes de control de Internet (ICMP) con el búfer de datos especificado al equipo que tiene el especificado IPAddressy recibe un mensaje de respuesta de eco ICMP correspondiente de ese equipo. Esta sobrecarga permite especificar un valor de tiempo de espera para la operación y controlar la fragmentación y los valores de período de vida para el paquete de mensajes de eco ICMP.

SendAsync(IPAddress, Int32, Object)

Intenta enviar de forma asincrónica un mensaje de eco del Protocolo de mensajes de control de Internet (ICMP) al equipo que tiene el especificado IPAddressy recibe un mensaje de respuesta de eco ICMP correspondiente de ese equipo. Esta sobrecarga permite especificar un valor de tiempo de espera para la operación.

SendAsync(IPAddress, Object)

Intenta enviar de forma asincrónica un mensaje de eco del Protocolo de mensajes de control de Internet (ICMP) al equipo que tiene el especificado IPAddressy recibe un mensaje de respuesta de eco ICMP correspondiente de ese equipo.

SendAsync(String, Int32, Byte[], Object)

Intenta enviar de forma asincrónica un mensaje de eco del Protocolo de mensajes de control de Internet (ICMP) con el búfer de datos especificado al equipo especificado y recibir un mensaje de respuesta de eco ICMP correspondiente de ese equipo. Esta sobrecarga permite especificar un valor de tiempo de espera para la operación.

SendAsync(String, Int32, Byte[], PingOptions, Object)

Intenta enviar de forma asincrónica un mensaje de eco del Protocolo de mensajes de control de Internet (ICMP) con el búfer de datos especificado al equipo especificado y recibir un mensaje de respuesta de eco ICMP correspondiente de ese equipo. Esta sobrecarga permite especificar un valor de tiempo de espera para la operación y controlar la fragmentación y los valores de período de vida para el paquete ICMP.

SendAsync(String, Int32, Object)

Intenta enviar de forma asincrónica un mensaje de eco del Protocolo de mensajes de control de Internet (ICMP) al equipo especificado y recibir un mensaje de respuesta de eco ICMP correspondiente de ese equipo. Esta sobrecarga permite especificar un valor de tiempo de espera para la operación.

SendAsync(String, Object)

Intenta enviar de forma asincrónica un mensaje de eco del Protocolo de mensajes de control de Internet (ICMP) al equipo especificado y recibir un mensaje de respuesta de eco ICMP correspondiente de ese equipo.

SendAsyncCancel()

Cancela todas las solicitudes asincrónicas pendientes para enviar un mensaje de eco del Protocolo de mensajes de control de Internet (ICMP) y recibe un mensaje de respuesta de eco ICMP correspondiente.

SendPingAsync(IPAddress, Int32, Byte[], PingOptions)

Envía un mensaje de eco del Protocolo de mensajes de control de Internet (ICMP) con el búfer de datos especificado al equipo que tiene el especificado IPAddressy recibe un mensaje de respuesta de eco ICMP correspondiente de ese equipo como una operación asincrónica. Esta sobrecarga le permite especificar un valor de tiempo de espera para la operación, un búfer que se usará para enviar y recibir, y controlar la fragmentación y los valores de período de vida para el paquete de mensajes de eco ICMP.

SendPingAsync(IPAddress, Int32, Byte[])

Envíe un mensaje de eco del Protocolo de mensajes de control de Internet (ICMP) con el búfer de datos especificado al equipo que tiene el especificado IPAddressy reciba un mensaje de respuesta de eco ICMP correspondiente de ese equipo como una operación asincrónica. Esta sobrecarga permite especificar un valor de tiempo de espera para la operación y un búfer que se va a usar para enviar y recibir.

SendPingAsync(IPAddress, Int32)

Envíe un mensaje de eco del Protocolo de mensajes de control de Internet (ICMP) con el búfer de datos especificado al equipo que tiene el especificado IPAddressy reciba un mensaje de respuesta de eco ICMP correspondiente de ese equipo como una operación asincrónica. Esta sobrecarga permite especificar un valor de tiempo de espera para la operación.

SendPingAsync(IPAddress, TimeSpan, Byte[], PingOptions, CancellationToken)

Envía un mensaje de eco del Protocolo de mensajes de control de Internet (ICMP) con el búfer de datos especificado al equipo que tiene el especificado IPAddressy recibe un mensaje de respuesta de eco ICMP correspondiente de ese equipo como una operación asincrónica. Esta sobrecarga permite especificar un valor de tiempo de espera para la operación, un búfer que se usará para enviar y recibir, controlar la fragmentación y los valores de período de vida, y un CancellationToken para el paquete de mensajes de eco ICMP.

SendPingAsync(IPAddress)

Envíe un mensaje de eco del Protocolo de mensajes de control de Internet (ICMP) con el búfer de datos especificado al equipo que tiene el especificado IPAddressy reciba un mensaje de respuesta de eco ICMP correspondiente de ese equipo como una operación asincrónica.

SendPingAsync(String, Int32, Byte[], PingOptions)

Envía un mensaje de eco del Protocolo de mensajes de control de Internet (ICMP) con el búfer de datos especificado al equipo especificado y recibe un mensaje de respuesta de eco ICMP correspondiente de ese equipo como una operación asincrónica. Esta sobrecarga le permite especificar un valor de tiempo de espera para la operación, un búfer que se usará para enviar y recibir, y controlar la fragmentación y los valores de período de vida para el paquete de mensajes de eco ICMP.

SendPingAsync(String, Int32, Byte[])

Envía un mensaje de eco del Protocolo de mensajes de control de Internet (ICMP) con el búfer de datos especificado al equipo especificado y recibe un mensaje de respuesta de eco ICMP correspondiente de ese equipo como una operación asincrónica. Esta sobrecarga permite especificar un valor de tiempo de espera para la operación y un búfer que se va a usar para enviar y recibir.

SendPingAsync(String, Int32)

Envía un mensaje de eco del Protocolo de mensajes de control de Internet (ICMP) con el búfer de datos especificado al equipo especificado y recibe un mensaje de respuesta de eco ICMP correspondiente de ese equipo como una operación asincrónica. Esta sobrecarga permite especificar un valor de tiempo de espera para la operación.

SendPingAsync(String, TimeSpan, Byte[], PingOptions, CancellationToken)

Envía un mensaje de eco del Protocolo de mensajes de control de Internet (ICMP) con el búfer de datos especificado al equipo especificado y recibe un mensaje de respuesta de eco ICMP correspondiente de ese equipo como una operación asincrónica. Esta sobrecarga permite especificar un valor de tiempo de espera para la operación, un búfer que se usará para enviar y recibir, controlar la fragmentación y los valores de período de vida, y un CancellationToken para el paquete de mensajes de eco ICMP.

SendPingAsync(String)

Envía un mensaje de eco del Protocolo de mensajes de control de Internet (ICMP) con el búfer de datos especificado al equipo especificado y recibe un mensaje de respuesta de eco ICMP correspondiente de ese equipo como una operación asincrónica.

ToString()

Devuelve un String objeto que contiene el nombre de Component, si existe. Este método no se debe invalidar.

(Heredado de Component)
ToString()

Devuelve una cadena que representa el objeto actual.

(Heredado de Object)

Eventos

Nombre Description
Disposed

Se produce cuando el componente se elimina mediante una llamada al Dispose() método .

(Heredado de Component)
PingCompleted

Se produce cuando una operación asincrónica para enviar un mensaje de eco del Protocolo de mensajes de control de Internet (ICMP) y recibir el mensaje de respuesta de eco ICMP correspondiente se completa o se cancela.

Implementaciones de interfaz explícitas

Nombre Description
IDisposable.Dispose()

Libera todos los recursos usados por instancias de la Ping clase .

Se aplica a

Consulte también