Condividi tramite


Ping Classe

Definizione

Consente a un'applicazione di determinare se un computer remoto è accessibile in rete.

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
Ereditarietà
Ereditarietà
Ping
Implementazioni

Esempio

Nell'esempio di codice seguente viene illustrato l'uso sincrono della Ping classe .

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

Nell'esempio di codice seguente viene illustrato l'uso della Ping classe in modo asincrono.

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

Commenti

Le applicazioni usano la Ping classe per rilevare se un computer remoto è raggiungibile.

La topologia di rete può determinare se Ping può contattare correttamente un host remoto. La presenza e la configurazione di proxy, apparecchiature NAT (Network Address Translation) o firewall possono impedire Ping la riuscita. Un esito positivo Ping indica solo che l'host remoto può essere raggiunto nella rete. La presenza di servizi di livello superiore (ad esempio un server Web) nell'host remoto non è garantita.

Questa classe fornisce funzionalità simili allo strumento da riga di comando Ping.exe. I Send metodi e SendAsync inviano un messaggio echo ICMP (Internet Control Message Protocol) a un computer remoto e attendono un messaggio di risposta echo ICMP da tale computer. Per una descrizione dettagliata dei messaggi ICMP, vedere RFC 792, disponibile all'indirizzo https://www.ietf.org.

I tipi seguenti vengono usati con la Ping classe e sono descritti in dettaglio di seguito.

Nome tipo Descrizione
IPStatus Definisce i codici di stato che descrivono il risultato di un messaggio di richiesta echo ICMP.
PingOptions Consente di configurare o recuperare le impostazioni che controllano il numero di volte in cui il pacchetto di richiesta può essere inoltrato (Ttl) e se può essere frammentato (DontFragment ).
PingReply Contiene i risultati di una richiesta echo ICMP.
PingException Generata se si verifica un errore irreversibile.
PingCompletedEventArgs Contiene i dati associati agli PingCompleted eventi, generati quando una SendAsync chiamata viene completata o annullata.
PingCompletedEventHandler Delegato che fornisce il metodo di callback richiamato quando una SendAsync chiamata viene completata o annullata.

I Send metodi e SendAsync restituiscono la risposta in un PingReply oggetto . La PingReply.Status proprietà restituisce un IPStatus valore per indicare il risultato della richiesta.

Quando si invia la richiesta, è necessario specificare il computer remoto. A tale scopo, è possibile specificare una stringa del nome host, un indirizzo IP in formato stringa o un IPAddress oggetto .

È anche possibile specificare uno dei tipi di informazioni seguenti:

  • Dati che accompagnano la richiesta. Specificando buffer è possibile apprendere la quantità di tempo necessaria per un pacchetto di una determinata dimensione per spostarsi da e verso l'host remoto e l'unità di trasmissione massima del percorso di rete. Vedere gli Send overload o SendAsync che accettano un buffer parametro.

  • Indica se il pacchetto Echo ICMP può essere frammentato in transito. Vedere la DontFragment proprietà e gli Send overload o SendAsync che accettano un options parametro.

  • Quante volte i nodi di routing, ad esempio router o gateway, possono inoltrare il pacchetto prima che raggiunga il computer di destinazione o venga rimosso. Vedere Ttl e gli Send overload o SendAsync che accettano un options parametro.

  • Limite di tempo entro il quale deve essere ricevuta la risposta. Vedere gli Send overload o SendAsync che accettano un timeout parametro.

La Ping classe offre metodi sincroni e asincroni per l'invio della richiesta. Se l'applicazione deve bloccarsi durante l'attesa di una risposta, usare i Send metodi . Questi metodi sono sincroni. Se l'applicazione non deve bloccarsi, usare i metodi asincroni SendAsync . Una chiamata a SendAsync viene eseguita nel proprio thread allocato automaticamente dal pool di thread. Al termine dell'operazione asincrona, genera l'evento PingCompleted . Le applicazioni usano un PingCompletedEventHandler delegato per specificare il metodo chiamato per PingCompleted gli eventi. È necessario aggiungere un PingCompletedEventHandler delegato all'evento prima di chiamare SendAsync. Il metodo del delegato riceve un PingCompletedEventArgs oggetto che contiene un PingReply oggetto che descrive il risultato della SendAsync chiamata.

Non è possibile usare la stessa istanza della Ping classe per generare più richieste Echo ICMP simultanee. La chiamata Send mentre una SendAsync chiamata è in corso o chiama SendAsync più volte prima che tutte le chiamate precedenti siano state completate causano un oggetto InvalidOperationException.

Costruttori

Nome Descrizione
Ping()

Inizializza una nuova istanza della classe Ping.

Proprietà

Nome Descrizione
CanRaiseEvents

Ottiene un valore che indica se il componente può generare un evento.

(Ereditato da Component)
Container

Ottiene l'oggetto IContainer contenente l'oggetto Component.

(Ereditato da Component)
DesignMode

Ottiene un valore che indica se è Component attualmente in modalità progettazione.

(Ereditato da Component)
Events

Ottiene l'elenco dei gestori eventi associati a questo Componentoggetto .

(Ereditato da Component)
Site

Ottiene o imposta l'oggetto ISite dell'oggetto Component.

(Ereditato da Component)

Metodi

Nome Descrizione
CreateObjRef(Type)

Crea un oggetto che contiene tutte le informazioni pertinenti necessarie per generare un proxy utilizzato per comunicare con un oggetto remoto.

(Ereditato da MarshalByRefObject)
Dispose()

Rilascia le risorse non gestite ed elimina le risorse gestite usate da Ping.

Dispose()

Rilascia tutte le risorse usate da Component.

(Ereditato da Component)
Dispose(Boolean)

Rilascia le risorse non gestite usate dall'oggetto Ping e, facoltativamente, elimina le risorse gestite.

Dispose(Boolean)

Rilascia le risorse non gestite usate da Component e, facoltativamente, rilascia le risorse gestite.

(Ereditato da Component)
Equals(Object)

Determina se l'oggetto specificato è uguale all'oggetto corrente.

(Ereditato da Object)
GetHashCode()

Funge da funzione hash predefinita.

(Ereditato da Object)
GetLifetimeService()
Obsoleti.

Recupera l'oggetto servizio di durata corrente che controlla i criteri di durata per questa istanza.

(Ereditato da MarshalByRefObject)
GetService(Type)

Restituisce un oggetto che rappresenta un servizio fornito da Component o da Container.

(Ereditato da Component)
GetType()

Ottiene il Type dell'istanza corrente.

(Ereditato da Object)
InitializeLifetimeService()
Obsoleti.

Ottiene un oggetto servizio di durata per controllare i criteri di durata per questa istanza.

(Ereditato da MarshalByRefObject)
MemberwiseClone()

Crea una copia superficiale del Objectcorrente.

(Ereditato da Object)
MemberwiseClone(Boolean)

Crea una copia superficiale dell'oggetto corrente MarshalByRefObject .

(Ereditato da MarshalByRefObject)
OnPingCompleted(PingCompletedEventArgs)

Genera l'evento PingCompleted.

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

Tenta di inviare un messaggio echo ICMP (Internet Control Message Protocol) con il buffer di dati specificato al computer con l'oggetto specificato IPAddress e ricevere un messaggio di risposta echo ICMP corrispondente da tale computer. Questo overload consente di specificare un valore di timeout per l'operazione e controllare la frammentazione e i valori Time-to-Live per il pacchetto di messaggi echo ICMP.

Send(IPAddress, Int32, Byte[])

Tenta di inviare un messaggio echo ICMP (Internet Control Message Protocol) con il buffer di dati specificato al computer con l'oggetto specificato IPAddresse ricevere un messaggio di risposta echo ICMP corrispondente da tale computer. Questo overload consente di specificare un valore di timeout per l'operazione.

Send(IPAddress, Int32)

Tenta di inviare un messaggio echo ICMP (Internet Control Message Protocol) con il buffer di dati specificato al computer con l'oggetto specificato IPAddresse ricevere un messaggio di risposta echo ICMP corrispondente da tale computer. Questo metodo consente di specificare un valore di timeout per l'operazione.

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

Tenta di inviare un messaggio echo ICMP (Internet Control Message Protocol) al computer con l'oggetto specificato IPAddresse di ricevere un messaggio di risposta echo ICMP corrispondente da tale computer.

Send(IPAddress)

Tenta di inviare un messaggio echo ICMP (Internet Control Message Protocol) al computer con l'oggetto specificato IPAddresse di ricevere un messaggio di risposta echo ICMP corrispondente da tale computer.

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

Tenta di inviare un messaggio echo ICMP (Internet Control Message Protocol) con il buffer di dati specificato al computer specificato e di ricevere un messaggio di risposta echo ICMP corrispondente da tale computer. Questo overload consente di specificare un valore di timeout per l'operazione e controllare la frammentazione e i valori Time-to-Live per il pacchetto ICMP.

Send(String, Int32, Byte[])

Tenta di inviare un messaggio echo ICMP (Internet Control Message Protocol) con il buffer di dati specificato al computer specificato e di ricevere un messaggio di risposta echo ICMP corrispondente da tale computer. Questo overload consente di specificare un valore di timeout per l'operazione.

Send(String, Int32)

Tenta di inviare un messaggio echo ICMP (Internet Control Message Protocol) al computer specificato e di ricevere un messaggio di risposta echo ICMP corrispondente da tale computer. Questo metodo consente di specificare un valore di timeout per l'operazione.

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

Tenta di inviare un messaggio echo ICMP (Internet Control Message Protocol) al computer specificato e di ricevere un messaggio di risposta echo ICMP corrispondente da tale computer.

Send(String)

Tenta di inviare un messaggio echo ICMP (Internet Control Message Protocol) al computer specificato e di ricevere un messaggio di risposta echo ICMP corrispondente da tale computer.

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

Tenta in modo asincrono di inviare un messaggio echo ICMP (Internet Control Message Protocol) con il buffer di dati specificato al computer con l'oggetto specificato IPAddresse ricevere un messaggio di risposta echo ICMP corrispondente da tale computer. Questo overload consente di specificare un valore di timeout per l'operazione.

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

Tenta in modo asincrono di inviare un messaggio echo ICMP (Internet Control Message Protocol) con il buffer di dati specificato al computer con l'oggetto specificato IPAddresse ricevere un messaggio di risposta echo ICMP corrispondente da tale computer. Questo overload consente di specificare un valore di timeout per l'operazione e controllare la frammentazione e i valori Time-to-Live per il pacchetto di messaggi echo ICMP.

SendAsync(IPAddress, Int32, Object)

Tenta in modo asincrono di inviare un messaggio echo ICMP (Internet Control Message Protocol) al computer con l'oggetto specificato IPAddresse di ricevere un messaggio di risposta echo ICMP corrispondente da tale computer. Questo overload consente di specificare un valore di timeout per l'operazione.

SendAsync(IPAddress, Object)

Tenta in modo asincrono di inviare un messaggio echo ICMP (Internet Control Message Protocol) al computer con l'oggetto specificato IPAddresse di ricevere un messaggio di risposta echo ICMP corrispondente da tale computer.

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

Tenta in modo asincrono di inviare un messaggio echo ICMP (Internet Control Message Protocol) con il buffer di dati specificato al computer specificato e riceve un messaggio di risposta echo ICMP corrispondente da tale computer. Questo overload consente di specificare un valore di timeout per l'operazione.

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

Tenta in modo asincrono di inviare un messaggio echo ICMP (Internet Control Message Protocol) con il buffer di dati specificato al computer specificato e riceve un messaggio di risposta echo ICMP corrispondente da tale computer. Questo overload consente di specificare un valore di timeout per l'operazione e controllare la frammentazione e i valori Time-to-Live per il pacchetto ICMP.

SendAsync(String, Int32, Object)

Tenta in modo asincrono di inviare un messaggio echo ICMP (Internet Control Message Protocol) al computer specificato e riceve un messaggio di risposta echo ICMP corrispondente da tale computer. Questo overload consente di specificare un valore di timeout per l'operazione.

SendAsync(String, Object)

Tenta in modo asincrono di inviare un messaggio echo ICMP (Internet Control Message Protocol) al computer specificato e riceve un messaggio di risposta echo ICMP corrispondente da tale computer.

SendAsyncCancel()

Annulla tutte le richieste asincrone in sospeso per inviare un messaggio echo ICMP (Internet Control Message Protocol) e riceve un messaggio di risposta echo ICMP corrispondente.

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

Invia un messaggio echo ICMP (Internet Control Message Protocol) con il buffer di dati specificato al computer con l'oggetto specificato IPAddresse riceve un messaggio di risposta echo ICMP corrispondente da tale computer come operazione asincrona. Questo overload consente di specificare un valore di timeout per l'operazione, un buffer da usare per l'invio e la ricezione e controllare la frammentazione e i valori time-to-Live per il pacchetto di messaggi echo ICMP.

SendPingAsync(IPAddress, Int32, Byte[])

Inviare un messaggio echo ICMP (Internet Control Message Protocol) con il buffer di dati specificato al computer con l'oggetto specificato IPAddresse riceve un messaggio di risposta echo ICMP corrispondente da tale computer come operazione asincrona. Questo overload consente di specificare un valore di timeout per l'operazione e un buffer da usare per l'invio e la ricezione.

SendPingAsync(IPAddress, Int32)

Inviare un messaggio echo ICMP (Internet Control Message Protocol) con il buffer di dati specificato al computer con l'oggetto specificato IPAddresse riceve un messaggio di risposta echo ICMP corrispondente da tale computer come operazione asincrona. Questo overload consente di specificare un valore di timeout per l'operazione.

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

Invia un messaggio echo ICMP (Internet Control Message Protocol) con il buffer di dati specificato al computer con l'oggetto specificato IPAddresse riceve un messaggio di risposta echo ICMP corrispondente da tale computer come operazione asincrona. Questo overload consente di specificare un valore di timeout per l'operazione, un buffer da usare per inviare e ricevere, controllare la frammentazione e i valori Time-to-Live e un CancellationToken per il pacchetto echo message ICMP.

SendPingAsync(IPAddress)

Inviare un messaggio echo ICMP (Internet Control Message Protocol) con il buffer di dati specificato al computer con l'oggetto specificato IPAddresse riceve un messaggio di risposta echo ICMP corrispondente da tale computer come operazione asincrona.

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

Invia un messaggio echo ICMP (Internet Control Message Protocol) con il buffer di dati specificato al computer specificato e riceve un messaggio di risposta echo ICMP corrispondente da tale computer come operazione asincrona. Questo overload consente di specificare un valore di timeout per l'operazione, un buffer da usare per l'invio e la ricezione e controllare la frammentazione e i valori time-to-Live per il pacchetto di messaggi echo ICMP.

SendPingAsync(String, Int32, Byte[])

Invia un messaggio echo ICMP (Internet Control Message Protocol) con il buffer di dati specificato al computer specificato e riceve un messaggio di risposta echo ICMP corrispondente da tale computer come operazione asincrona. Questo overload consente di specificare un valore di timeout per l'operazione e un buffer da usare per l'invio e la ricezione.

SendPingAsync(String, Int32)

Invia un messaggio echo ICMP (Internet Control Message Protocol) con il buffer di dati specificato al computer specificato e riceve un messaggio di risposta echo ICMP corrispondente da tale computer come operazione asincrona. Questo overload consente di specificare un valore di timeout per l'operazione.

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

Invia un messaggio echo ICMP (Internet Control Message Protocol) con il buffer di dati specificato al computer specificato e riceve un messaggio di risposta echo ICMP corrispondente da tale computer come operazione asincrona. Questo overload consente di specificare un valore di timeout per l'operazione, un buffer da usare per inviare e ricevere, controllare la frammentazione e i valori Time-to-Live e un CancellationToken per il pacchetto echo message ICMP.

SendPingAsync(String)

Invia un messaggio echo ICMP (Internet Control Message Protocol) con il buffer di dati specificato al computer specificato e riceve un messaggio di risposta echo ICMP corrispondente da tale computer come operazione asincrona.

ToString()

Restituisce un oggetto String contenente il nome dell'oggetto Component, se presente. Questo metodo non deve essere sottoposto a override.

(Ereditato da Component)
ToString()

Restituisce una stringa che rappresenta l'oggetto corrente.

(Ereditato da Object)

Eventi

Nome Descrizione
Disposed

Si verifica quando il componente viene eliminato da una chiamata al Dispose() metodo .

(Ereditato da Component)
PingCompleted

Si verifica quando un'operazione asincrona per inviare un messaggio echo ICMP (Internet Control Message Protocol) e ricevere il messaggio di risposta echo ICMP corrispondente viene completato o annullato.

Implementazioni dell'interfaccia esplicita

Nome Descrizione
IDisposable.Dispose()

Rilascia tutte le risorse usate dalle istanze della Ping classe .

Si applica a

Vedi anche