Ping.SendAsync Metodo

Definizione

Esegue un tentativo di invio in modalità asincrona di un messaggio echo ICMP (Internet Control Message Protocol) a un computer remoto e riceve il messaggio di risposta echo ICMP corrispondente dal quel computer.

Overload

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

Esegue un tentativo di invio in modalità asincrona di un messaggio echo ICMP (Internet Control Message Protocol) con il buffer di dati specificato al computer remoto specificato e riceve il messaggio di risposta echo ICMP corrispondente da quest'ultimo. Questo overload consente di specificare un valore di timeout per l'operazione e di controllare la frammentazione e i valori TTL (Time-to-Live) per il pacchetto ICMP.

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

Esegue un tentativo di invio in modalità asincrona di un messaggio echo ICMP (Internet Control Message Protocol) con il buffer di dati specificato al computer con il IPAddress specificato e riceve il messaggio di risposta echo ICMP corrispondente da quel computer. Questo overload consente di specificare un valore di timeout per l'operazione e di controllare la frammentazione e i valori TTL (Time-to-Live) per il pacchetto del messaggio echo ICMP.

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

Esegue un tentativo di invio in modalità asincrona di un messaggio echo ICMP (Internet Control Message Protocol) con il buffer di dati specificato al computer remoto specificato e riceve il messaggio di risposta echo ICMP corrispondente da quest'ultimo. Questo overload consente di specificare un valore di timeout per l'operazione.

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

Esegue un tentativo di invio in modalità asincrona di un messaggio echo ICMP (Internet Control Message Protocol) con il buffer di dati specificato al computer con il IPAddress specificato e riceve il messaggio di risposta echo ICMP corrispondente da quel computer. Questo overload consente di specificare un valore di timeout per l'operazione.

SendAsync(IPAddress, Int32, Object)

Esegue un tentativo di invio in modalità asincrona di un messaggio echo ICMP (Internet Control Message Protocol) a un computer con il IPAddress specificato e riceve il messaggio di risposta echo ICMP corrispondente da quel computer. Questo overload consente di specificare un valore di timeout per l'operazione.

SendAsync(String, Object)

Esegue un tentativo di invio in modalità asincrona di un messaggio echo ICMP (Internet Control Message Protocol) al computer remoto specificato e riceve il messaggio di risposta echo ICMP corrispondente da quest'ultimo.

SendAsync(IPAddress, Object)

Esegue un tentativo di invio in modalità asincrona di un messaggio echo ICMP (Internet Control Message Protocol) a un computer con il IPAddress specificato e riceve il messaggio di risposta echo ICMP corrispondente da quel computer.

SendAsync(String, Int32, Object)

Esegue un tentativo di invio in modalità asincrona di un messaggio echo ICMP (Internet Control Message Protocol) al computer remoto specificato e riceve il messaggio di risposta echo ICMP corrispondente da quest'ultimo. Questo overload consente di specificare un valore di timeout per l'operazione.

Commenti

Questi metodi non causano il blocco del thread principale dell'applicazione. Se si vuole bloccare durante l'attesa del messaggio di risposta echo ICMP, usare i Send metodi.

Nota

L'indirizzo IP restituito da uno dei SendAsync metodi può originarsi da un computer remoto dannoso. Non connettersi al computer remoto usando questa operazione. Usare DNS per determinare l'indirizzo IP del computer a cui si vuole connettersi.

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

Origine:
Ping.cs
Origine:
Ping.cs
Origine:
Ping.cs

Esegue un tentativo di invio in modalità asincrona di un messaggio echo ICMP (Internet Control Message Protocol) con il buffer di dati specificato al computer remoto specificato e riceve il messaggio di risposta echo ICMP corrispondente da quest'ultimo. Questo overload consente di specificare un valore di timeout per l'operazione e di controllare la frammentazione e i valori TTL (Time-to-Live) per il pacchetto ICMP.

public:
 void SendAsync(System::String ^ hostNameOrAddress, int timeout, cli::array <System::Byte> ^ buffer, System::Net::NetworkInformation::PingOptions ^ options, System::Object ^ userToken);
public void SendAsync (string hostNameOrAddress, int timeout, byte[] buffer, System.Net.NetworkInformation.PingOptions? options, object? userToken);
public void SendAsync (string hostNameOrAddress, int timeout, byte[] buffer, System.Net.NetworkInformation.PingOptions options, object userToken);
member this.SendAsync : string * int * byte[] * System.Net.NetworkInformation.PingOptions * obj -> unit
Public Sub SendAsync (hostNameOrAddress As String, timeout As Integer, buffer As Byte(), options As PingOptions, userToken As Object)

Parametri

hostNameOrAddress
String

Oggetto String che identifica il computer di destinazione del messaggio echo ICMP. Il valore specificato per il parametro può essere un nome host o una rappresentazione in forma di stringa di un indirizzo IP.

timeout
Int32

Valore Int32 che specifica il numero massimo di millisecondi durante i quali attendere il messaggio di risposta echo ICMP dopo l'invio del messaggio echo.

buffer
Byte[]

Matrice Byte contenente i dati da inviare con il messaggio echo ICMP e restituiti nel messaggio di risposta echo ICMP. La matrice non può contenere più di 65.500 byte.

options
PingOptions

Oggetto PingOptions utilizzato per controllare la frammentazione e i valori TTL (Time-to-Live) per il pacchetto del messaggio echo ICMP.

userToken
Object

Oggetto passato al metodo richiamato al completamento dell'operazione asincrona.

Eccezioni

hostNameOrAddress è null o è una stringa vuota ("").

-oppure-

buffer è null.

timeout è minore di zero.

È in corso una chiamata a SendAsync.

È stata generata un'eccezione durante l'invio o la ricezione di messaggi ICMP. Per conoscere l'eccezione esatta generata, vedere l'eccezione interna.

Non è possibile risolvere hostNameOrAddress in un indirizzo IP valido.

L'oggetto è stato eliminato.

Le dimensioni di buffer superano i 65.500 byte.

.NET 7 e versioni successive solo in Linux: il processo non è con privilegi e buffer non è vuoto.

Esempio

Nell'esempio di codice seguente viene illustrato come chiamare questo metodo.

#using <System.dll>

using namespace System;
using namespace System::Text;
using namespace System::Net;
using namespace System::Net::NetworkInformation;
using namespace System::ComponentModel;
using namespace System::Threading;
void PingCompletedCallback( Object^ sender, PingCompletedEventArgs^ e );
void DisplayReply( PingReply^ reply );
int main()
{
   array<String^>^args = Environment::GetCommandLineArgs();
   if ( args->Length == 1 )
      throw gcnew ArgumentException( "Ping needs a host or IP Address." );

   String^ who = args[ 1 ];
   AutoResetEvent^ waiter = gcnew AutoResetEvent( false );
   
   Ping ^ pingSender = gcnew Ping;
   
   // When the PingCompleted event is raised,
   // the PingCompletedCallback method is called.
   pingSender->PingCompleted += gcnew PingCompletedEventHandler( PingCompletedCallback );
   
   // Create a buffer of 32 bytes of data to be transmitted.
   String^ data = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
   array<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 = gcnew 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." );
}


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.
      (dynamic_cast<AutoResetEvent^>(e->UserState))->Set();
   }

   
   // If an error occurred, display the exception to the user.
   if ( e->Error != nullptr )
   {
      Console::WriteLine( "Ping failed:" );
      Console::WriteLine( e->Error->ToString() );
      
      // Let the main thread resume. 
      (dynamic_cast<AutoResetEvent^>(e->UserState))->Set();
   }

   PingReply ^ reply = e->Reply;
   DisplayReply( reply );
   
   // Let the main thread resume.
   (dynamic_cast<AutoResetEvent^>(e->UserState))->Set();
}


void DisplayReply( PingReply ^ reply )
{
   if ( reply == nullptr )
      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 );
   }
}
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

Il SendAsync metodo invia il messaggio Echo in modo asincrono e, quando l'operazione viene completata correttamente o senza esito positivo, restituisce lo stato all'applicazione. Chiamare il metodo quando l'applicazione SendAsync non deve bloccare. Ogni chiamata viene eseguita in un thread separato 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 quando SendAsync genera l'evento . È 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. L'oggetto PingCompletedEventArgs eredita la UserState proprietà . Questa proprietà contiene l'oggetto userToken passato alla SendAsync chiamata.

Se l'applicazione deve bloccarsi durante l'attesa di una risposta, usare i Send metodi . Questi metodi sono sincroni.

Se il messaggio di risposta echo ICMP non viene ricevuto entro il tempo specificato dal timeout parametro , l'eco ICMP ha esito negativo e la Status proprietà è impostata su TimedOut.

Nota

Quando si specificano numeri molto piccoli per timeout, la risposta Ping può essere ricevuta anche se timeout sono trascorsi millisecondi.

Se la DontFragment proprietà è true e le dimensioni totali del pacchetto superano le dimensioni massime del pacchetto che possono essere trasmesse da uno dei nodi di routing tra i computer locali e remoti, la richiesta echo ICMP ha esito negativo. In questo caso, l'oggetto Status è impostato su PacketTooBig.

Utilizzare la Ttl proprietà per specificare il numero massimo di volte in cui il messaggio echo ICMP può essere inoltrato prima di raggiungere la destinazione. Se il pacchetto non raggiunge la destinazione dopo l'inoltro del numero specificato di volte, il pacchetto viene eliminato e la richiesta echo ICMP ha esito negativo. In questo caso, l'oggetto Status è impostato su TtlExpired.

Si applica a

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

Origine:
Ping.cs
Origine:
Ping.cs
Origine:
Ping.cs

Esegue un tentativo di invio in modalità asincrona di un messaggio echo ICMP (Internet Control Message Protocol) con il buffer di dati specificato al computer con il IPAddress specificato e riceve il messaggio di risposta echo ICMP corrispondente da quel computer. Questo overload consente di specificare un valore di timeout per l'operazione e di controllare la frammentazione e i valori TTL (Time-to-Live) per il pacchetto del messaggio echo ICMP.

public:
 void SendAsync(System::Net::IPAddress ^ address, int timeout, cli::array <System::Byte> ^ buffer, System::Net::NetworkInformation::PingOptions ^ options, System::Object ^ userToken);
public void SendAsync (System.Net.IPAddress address, int timeout, byte[] buffer, System.Net.NetworkInformation.PingOptions? options, object? userToken);
public void SendAsync (System.Net.IPAddress address, int timeout, byte[] buffer, System.Net.NetworkInformation.PingOptions options, object userToken);
member this.SendAsync : System.Net.IPAddress * int * byte[] * System.Net.NetworkInformation.PingOptions * obj -> unit
Public Sub SendAsync (address As IPAddress, timeout As Integer, buffer As Byte(), options As PingOptions, userToken As Object)

Parametri

address
IPAddress

Oggetto IPAddress che identifica il computer di destinazione del messaggio echo ICMP.

timeout
Int32

Valore Int32 che specifica il numero massimo di millisecondi durante i quali attendere il messaggio di risposta echo ICMP dopo l'invio del messaggio echo.

buffer
Byte[]

Matrice Byte contenente i dati da inviare con il messaggio echo ICMP e restituiti nel messaggio di risposta echo ICMP. La matrice non può contenere più di 65.500 byte.

options
PingOptions

Oggetto PingOptions utilizzato per controllare la frammentazione e i valori TTL (Time-to-Live) per il pacchetto del messaggio echo ICMP.

userToken
Object

Oggetto passato al metodo richiamato al completamento dell'operazione asincrona.

Eccezioni

address o buffer è null.

timeout è minore di zero.

È in corso una chiamata a SendAsync.

È stata generata un'eccezione durante l'invio o la ricezione di messaggi ICMP. Per conoscere l'eccezione esatta generata, vedere l'eccezione interna.

address non è un indirizzo IP valido.

L'oggetto è stato eliminato.

Le dimensioni di buffer superano i 65.500 byte.

.NET 7 e versioni successive solo in Linux: il processo non è con privilegi e buffer non è vuoto.

Esempio

Nell'esempio di codice seguente viene illustrato come chiamare questo metodo. Per un'implementazione del metodo di callback, vedere la sezione dell'esempio di overload del SendAsync metodo.

L'esempio di codice seguente richiede gli spazi dei nomi seguenti:

#using <System.dll>

using namespace System;
using namespace System::Net;
using namespace System::Net::NetworkInformation;
using namespace System::Text;
using namespace System::Threading;
using System;
using System.Net;
using System.Net.NetworkInformation;
using System.Text;
using System.Threading;

Nell'esempio di codice seguente viene inviato un messaggio echo ICMP in modo asincrono.

void AsyncComplexLocalPing()
{
   
   // Get an object that will block the main thread.
   AutoResetEvent^ waiter = gcnew AutoResetEvent( false );
   
   // Ping's the local machine.
   Ping ^ pingSender = gcnew Ping;
   
   // When the PingCompleted event is raised,
   // the PingCompletedCallback method is called.
   pingSender->PingCompleted += gcnew PingCompletedEventHandler( PingCompletedCallback );
   IPAddress^ address = IPAddress::Loopback;
   
   // Create a buffer of 32 bytes of data to be transmitted.
   String^ data = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
   array<Byte>^buffer = Encoding::ASCII->GetBytes( data );
   
   // Wait 10 seconds for a reply.
   int timeout = 10000;
   
   // 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 = gcnew PingOptions( 64,true );
   
   // Send the ping asynchronously.
   // Use the waiter as the user token.
   // When the callback completes, it can wake up this thread.
   pingSender->SendAsync( address, 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." );
}
public static void AsyncComplexLocalPing ()
{
    // Get an object that will block the main thread.
    AutoResetEvent waiter = new AutoResetEvent (false);

    // Ping's the local machine.
    Ping pingSender = new Ping ();

    // When the PingCompleted event is raised,
    // the PingCompletedCallback method is called.
    pingSender.PingCompleted += new PingCompletedEventHandler (PingCompletedCallback);

    IPAddress address = IPAddress.Loopback;

    // Create a buffer of 32 bytes of data to be transmitted.
    string data = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
    byte[] buffer = Encoding.ASCII.GetBytes (data);

    // Wait 10 seconds for a reply.
    int timeout = 10000;

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

    // Send the ping asynchronously.
    // Use the waiter as the user token.
    // When the callback completes, it can wake up this thread.
    pingSender.SendAsync (address, 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.");
}

Commenti

Il SendAsync metodo invia il messaggio Echo in modo asincrono e, quando l'operazione viene completata correttamente o senza esito positivo, restituisce lo stato all'applicazione. Chiamare il metodo quando l'applicazione SendAsync non deve bloccare. Ogni chiamata viene eseguita in un thread separato 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 quando SendAsync genera l'evento . È 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. L'oggetto PingCompletedEventArgs eredita la UserState proprietà . Questa proprietà contiene l'oggetto userToken passato alla SendAsync chiamata.

Se l'applicazione blocca durante l'attesa di una risposta, usare i Send metodi. Questi metodi sono sincroni.

Se il messaggio di risposta echo ICMP non viene ricevuto entro il tempo specificato dal timeout parametro, l'echo ICMP ha esito negativo e la Status proprietà è impostata su TimedOut.

Nota

Quando si specificano numeri molto piccoli per timeout, la risposta Ping può essere ricevuta anche se timeout sono trascorsi millisecondi.

Se la DontFragment proprietà è true e le dimensioni totali dei pacchetti superano le dimensioni massime dei pacchetti che possono essere trasmesse da uno dei nodi di routing tra i computer locali e remoti, la richiesta echo ICMP ha esito negativo. In questo caso, l'oggetto Status è impostato su PacketTooBig.

Utilizzare la Ttl proprietà per specificare il numero massimo di volte in cui è possibile inoltrare il messaggio echo ICMP prima di raggiungere la destinazione. Se il pacchetto non raggiunge la destinazione dopo l'inoltro del numero specificato di volte, il pacchetto viene rimosso e la richiesta echo ICMP non riesce. In questo caso, l'oggetto Status è impostato su TtlExpired.

Si applica a

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

Origine:
Ping.cs
Origine:
Ping.cs
Origine:
Ping.cs

Esegue un tentativo di invio in modalità asincrona di un messaggio echo ICMP (Internet Control Message Protocol) con il buffer di dati specificato al computer remoto specificato e riceve il messaggio di risposta echo ICMP corrispondente da quest'ultimo. Questo overload consente di specificare un valore di timeout per l'operazione.

public:
 void SendAsync(System::String ^ hostNameOrAddress, int timeout, cli::array <System::Byte> ^ buffer, System::Object ^ userToken);
public void SendAsync (string hostNameOrAddress, int timeout, byte[] buffer, object? userToken);
public void SendAsync (string hostNameOrAddress, int timeout, byte[] buffer, object userToken);
member this.SendAsync : string * int * byte[] * obj -> unit
Public Sub SendAsync (hostNameOrAddress As String, timeout As Integer, buffer As Byte(), userToken As Object)

Parametri

hostNameOrAddress
String

Oggetto String che identifica il computer di destinazione del messaggio echo ICMP. Il valore specificato per il parametro può essere un nome host o una rappresentazione in forma di stringa di un indirizzo IP.

timeout
Int32

Valore Int32 che specifica il numero massimo di millisecondi durante i quali attendere il messaggio di risposta echo ICMP dopo l'invio del messaggio echo.

buffer
Byte[]

Matrice Byte contenente i dati da inviare con il messaggio echo ICMP e restituiti nel messaggio di risposta echo ICMP. La matrice non può contenere più di 65.500 byte.

userToken
Object

Oggetto passato al metodo richiamato al completamento dell'operazione asincrona.

Eccezioni

hostNameOrAddress è null o è una stringa vuota ("").

-oppure-

buffer è null.

timeout è minore di zero.

È in corso una chiamata a SendAsync.

È stata generata un'eccezione durante l'invio o la ricezione di messaggi ICMP. Per conoscere l'eccezione esatta generata, vedere l'eccezione interna.

Non è possibile risolvere hostNameOrAddress in un indirizzo IP valido.

L'oggetto è stato eliminato.

Le dimensioni di buffer superano i 65.500 byte.

.NET 7 e versioni successive solo in Linux: il processo non è con privilegi e buffer non è vuoto.

Esempio

Nell'esempio di codice seguente viene illustrato come chiamare un SendAsync overload, vedere panoramica della Ping classe.

Commenti

Il SendAsync metodo invia il messaggio Echo in modo asincrono e, quando l'operazione viene completata correttamente o senza esito negativo, restituisce lo stato all'applicazione. Chiamare il metodo quando l'applicazione SendAsync non deve bloccare. Ogni chiamata viene eseguita in un thread separato 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 quando SendAsync genera l'evento. È necessario aggiungere un PingCompletedEventHandler delegato all'evento prima di chiamare SendAsync. Il metodo del delegato riceve un oggetto contenente un PingCompletedEventArgsPingReply oggetto che descrive il risultato della SendAsync chiamata. L'oggetto PingCompletedEventArgs eredita la UserState proprietà. Questa proprietà contiene l'oggetto userToken passato alla SendAsync chiamata.

Se l'applicazione deve bloccare durante l'attesa di una risposta, usare i Send metodi. Questi metodi sono sincroni.

Se il messaggio di risposta echo ICMP non viene ricevuto entro il tempo specificato dal timeout parametro, l'echo ICMP ha esito negativo e la Status proprietà è impostata su TimedOut.

Nota

Quando si specificano numeri molto piccoli per timeout, la risposta Ping può essere ricevuta anche se timeout sono trascorsi millisecondi.

Questo overload usa le impostazioni predefinite per la frammentazione dei pacchetti e l'inoltro dei pacchetti. Il pacchetto contenente il messaggio echo ICMP può essere frammentato in transito se la dimensione totale dei pacchetti supera le dimensioni massime dei pacchetti che possono essere trasmessi da uno dei nodi di routing tra i computer locali e remoti. Per evitare la frammentazione, usare uno dei SendAsync metodi che accetta un options parametro e impostare la DontFragment proprietà su true. Quando DontFragment è true e la dimensione totale del pacchetto supera le dimensioni massime dei pacchetti che possono essere trasmessi da uno dei nodi di routing tra i computer locali e remoti, la richiesta echo ICMP ha esito negativo. In questo caso, l'oggetto Status è impostato su PacketTooBig. I frammenti di pacchetti o pacchetti (se frammentati) possono essere inoltrati tramite il routing dei nodi 128 volte prima di essere ignorati. Per modificare questa impostazione, usare un overload che accetta un SendAsyncoptions parametro e impostare la proprietà sul Ttl valore desiderato. Se il pacchetto non raggiunge la destinazione dopo l'inoltro del numero specificato di volte, il pacchetto viene rimosso e la richiesta echo ICMP non riesce. In questo caso, l'oggetto Status è impostato su TtlExpired.

Si applica a

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

Origine:
Ping.cs
Origine:
Ping.cs
Origine:
Ping.cs

Esegue un tentativo di invio in modalità asincrona di un messaggio echo ICMP (Internet Control Message Protocol) con il buffer di dati specificato al computer con il IPAddress specificato e riceve il messaggio di risposta echo ICMP corrispondente da quel computer. Questo overload consente di specificare un valore di timeout per l'operazione.

public:
 void SendAsync(System::Net::IPAddress ^ address, int timeout, cli::array <System::Byte> ^ buffer, System::Object ^ userToken);
public void SendAsync (System.Net.IPAddress address, int timeout, byte[] buffer, object? userToken);
public void SendAsync (System.Net.IPAddress address, int timeout, byte[] buffer, object userToken);
member this.SendAsync : System.Net.IPAddress * int * byte[] * obj -> unit
Public Sub SendAsync (address As IPAddress, timeout As Integer, buffer As Byte(), userToken As Object)

Parametri

address
IPAddress

Oggetto IPAddress che identifica il computer di destinazione del messaggio echo ICMP.

timeout
Int32

Valore Int32 che specifica il numero massimo di millisecondi durante i quali attendere il messaggio di risposta echo ICMP dopo l'invio del messaggio echo.

buffer
Byte[]

Matrice Byte contenente i dati da inviare con il messaggio echo ICMP e restituiti nel messaggio di risposta echo ICMP. La matrice non può contenere più di 65.500 byte.

userToken
Object

Oggetto passato al metodo richiamato al completamento dell'operazione asincrona.

Eccezioni

address o buffer è null.

timeout è minore di zero.

È in corso una chiamata a SendAsync.

È stata generata un'eccezione durante l'invio o la ricezione di messaggi ICMP. Per conoscere l'eccezione esatta generata, vedere l'eccezione interna.

address non è un indirizzo IP valido.

L'oggetto è stato eliminato.

Le dimensioni di buffer superano i 65.500 byte.

.NET 7 e versioni successive solo in Linux: il processo non è con privilegi e buffer non è vuoto.

Esempio

Per un esempio di codice che illustra la chiamata a un SendAsync overload, vedere panoramica della Ping classe.

Commenti

Questo metodo invia il messaggio echo in modo asincrono e, quando l'operazione viene completata correttamente o senza esito negativo, restituisce lo stato all'applicazione. Chiamare il metodo quando l'applicazione SendAsync non deve bloccare. Ogni chiamata viene eseguita in un thread separato allocato automaticamente dal pool di thread. Al termine dell'operazione asincrona, genera l'evento PingCompleted . Per specificare il metodo chiamato quando SendAsync genera l'evento, è necessario aggiungere un PingCompletedEventHandler delegato all'evento prima di chiamare SendAsync. Il metodo del delegato riceve un oggetto contenente un PingCompletedEventArgsPingReply oggetto che descrive il risultato della SendAsync chiamata. L'oggetto PingCompletedEventArgs eredita la UserState proprietà. Questa proprietà contiene l'oggetto userToken passato alla SendAsync chiamata.

Nota

Se l'applicazione blocca durante l'attesa di una risposta, usare i Send metodi. Questi metodi sono sincroni.

Se il messaggio di risposta echo ICMP non viene ricevuto entro il tempo specificato dal timeout parametro, l'echo ICMP ha esito negativo e la Status proprietà è impostata su TimedOut.

Nota

Quando si specificano numeri molto piccoli per timeout, la risposta Ping può essere ricevuta anche se timeout sono trascorsi millisecondi.

Questo overload usa le impostazioni predefinite per la frammentazione dei pacchetti e l'inoltro dei pacchetti. Il pacchetto contenente il messaggio echo ICMP può essere frammentato in transito se la dimensione totale dei pacchetti supera le dimensioni massime dei pacchetti che possono essere trasmessi da uno dei nodi di routing tra i computer locali e remoti. Per evitare la frammentazione, usare uno dei SendAsync metodi che accetta un options parametro e impostare la DontFragment proprietà su true. Quando DontFragment è true e la dimensione totale del pacchetto supera le dimensioni massime dei pacchetti che possono essere trasmessi da uno dei nodi di routing tra i computer locali e remoti, la richiesta echo ICMP ha esito negativo. In questo caso, l'oggetto Status è impostato su PacketTooBig. I frammenti di pacchetti o pacchetti (se frammentati) possono essere inoltrati tramite il routing dei nodi 128 volte prima di essere ignorati. Per modificare questa impostazione, usare un overload che accetta un SendAsyncoptions parametro e impostare la proprietà sul Ttl valore desiderato. Se il pacchetto non raggiunge la destinazione dopo l'inoltro del numero specificato di volte, il pacchetto viene rimosso e la richiesta echo ICMP non riesce. In questo caso, l'oggetto Status è impostato su TtlExpired.

Si applica a

SendAsync(IPAddress, Int32, Object)

Origine:
Ping.cs
Origine:
Ping.cs
Origine:
Ping.cs

Esegue un tentativo di invio in modalità asincrona di un messaggio echo ICMP (Internet Control Message Protocol) a un computer con il IPAddress specificato e riceve il messaggio di risposta echo ICMP corrispondente da quel computer. Questo overload consente di specificare un valore di timeout per l'operazione.

public:
 void SendAsync(System::Net::IPAddress ^ address, int timeout, System::Object ^ userToken);
public void SendAsync (System.Net.IPAddress address, int timeout, object? userToken);
public void SendAsync (System.Net.IPAddress address, int timeout, object userToken);
member this.SendAsync : System.Net.IPAddress * int * obj -> unit
Public Sub SendAsync (address As IPAddress, timeout As Integer, userToken As Object)

Parametri

address
IPAddress

Oggetto IPAddress che identifica il computer di destinazione del messaggio echo ICMP.

timeout
Int32

Valore Int32 che specifica il numero massimo di millisecondi durante i quali attendere il messaggio di risposta echo ICMP dopo l'invio del messaggio echo.

userToken
Object

Oggetto passato al metodo richiamato al completamento dell'operazione asincrona.

Eccezioni

address è null.

timeout è minore di zero.

È stata generata un'eccezione durante l'invio o la ricezione di messaggi ICMP. Per conoscere l'eccezione esatta generata, vedere l'eccezione interna.

address non è un indirizzo IP valido.

L'oggetto è stato eliminato.

Esempio

Per un esempio di codice che illustra la chiamata a un SendAsync overload, vedere panoramica della Ping classe.

Commenti

Il SendAsync metodo invia il messaggio Echo in modo asincrono e, quando l'operazione viene completata correttamente o senza esito negativo, restituisce lo stato all'applicazione. Chiamare il metodo quando l'applicazione SendAsync non deve bloccare. Ogni chiamata viene eseguita in un thread separato 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 quando SendAsync genera l'evento. È necessario aggiungere un PingCompletedEventHandler delegato all'evento prima di chiamare SendAsync. Il metodo del delegato riceve un oggetto contenente un PingCompletedEventArgsPingReply oggetto che descrive il risultato della SendAsync chiamata. L'oggetto PingCompletedEventArgs eredita la UserState proprietà. Questa proprietà contiene l'oggetto userToken passato alla SendAsync chiamata.

Se l'applicazione deve bloccare durante l'attesa di una risposta, usare i Send metodi. Questi metodi sono sincroni.

Se il messaggio di risposta echo ICMP non viene ricevuto entro il tempo specificato dal timeout parametro, l'echo ICMP ha esito negativo e la Status proprietà è impostata su TimedOut.

Nota

Quando si specificano numeri molto piccoli per timeout, la risposta Ping può essere ricevuta anche se timeout sono trascorsi millisecondi.

Questo overload usa le impostazioni predefinite per la frammentazione dei pacchetti e l'inoltro dei pacchetti. Il pacchetto contenente il messaggio echo ICMP può essere frammentato in transito se la dimensione totale dei pacchetti supera le dimensioni massime dei pacchetti che possono essere trasmessi da uno dei nodi di routing tra i computer locali e remoti. Per evitare la frammentazione, usare uno dei SendAsync metodi che accetta un options parametro e impostare la DontFragment proprietà su true. Quando DontFragment è true e la dimensione totale del pacchetto supera le dimensioni massime dei pacchetti che possono essere trasmessi da uno dei nodi di routing tra i computer locali e remoti, la richiesta echo ICMP ha esito negativo. In questo caso, l'oggetto Status è impostato su PacketTooBig. I frammenti di pacchetti o pacchetti (se frammentati) possono essere inoltrati tramite il routing dei nodi 128 volte prima di essere ignorati. Per modificare questa impostazione, usare un overload che accetta un SendAsyncoptions parametro e impostare la proprietà sul Ttl valore desiderato. Se il pacchetto non raggiunge la destinazione dopo l'inoltro del numero specificato di volte, il pacchetto viene rimosso e la richiesta echo ICMP non riesce. In questo caso, l'oggetto Status è impostato su TtlExpired.

Si applica a

SendAsync(String, Object)

Origine:
Ping.cs
Origine:
Ping.cs
Origine:
Ping.cs

Esegue un tentativo di invio in modalità asincrona di un messaggio echo ICMP (Internet Control Message Protocol) al computer remoto specificato e riceve il messaggio di risposta echo ICMP corrispondente da quest'ultimo.

public:
 void SendAsync(System::String ^ hostNameOrAddress, System::Object ^ userToken);
public void SendAsync (string hostNameOrAddress, object? userToken);
public void SendAsync (string hostNameOrAddress, object userToken);
member this.SendAsync : string * obj -> unit
Public Sub SendAsync (hostNameOrAddress As String, userToken As Object)

Parametri

hostNameOrAddress
String

Oggetto String che identifica il computer di destinazione del messaggio echo ICMP. Il valore specificato per il parametro può essere un nome host o una rappresentazione in forma di stringa di un indirizzo IP.

userToken
Object

Oggetto passato al metodo richiamato al completamento dell'operazione asincrona.

Eccezioni

hostNameOrAddress è null o è una stringa vuota ("").

È in corso una chiamata al metodo SendAsync(String, Object).

È stata generata un'eccezione durante l'invio o la ricezione di messaggi ICMP. Per conoscere l'eccezione esatta generata, vedere l'eccezione interna.

Non è possibile risolvere hostNameOrAddress in un indirizzo IP valido.

L'oggetto è stato eliminato.

Esempio

Per un esempio di codice che illustra la chiamata al SendAsync metodo, vedere la panoramica della Ping classe.

Commenti

Il SendAsync metodo invia il messaggio echo in modo asincrono e, quando l'operazione viene completata correttamente o senza esito negativo, restituisce lo stato all'applicazione. Chiamare il metodo quando l'applicazione SendAsync non deve bloccare. Ogni chiamata a questo metodo viene eseguita in un thread separato allocato automaticamente dal pool di thread. Al termine dell'operazione asincrona, genera l'evento PingCompleted . Per specificare il metodo chiamato quando SendAsync genera l'evento, è necessario aggiungere un PingCompletedEventHandler delegato all'evento prima di chiamare SendAsync. Il metodo del delegato riceve un oggetto contenente un PingCompletedEventArgsPingReply oggetto che descrive il risultato della SendAsync chiamata. L'oggetto PingCompletedEventArgs eredita la UserState proprietà. Questa proprietà contiene l'oggetto userToken passato alla SendAsync chiamata.

Nota

Se l'applicazione deve bloccare durante l'attesa di una risposta, usare i Send metodi. Questi metodi sono sincroni.

Questo metodo invia un buffer di dati 32 Byte con il messaggio echo ICMP. Il metodo attende cinque secondi per un messaggio di risposta echo ICMP. Se non riceve una risposta in quel momento, il metodo restituisce e la Status proprietà è impostata su TimedOut.

Questo overload usa le impostazioni predefinite per la frammentazione dei pacchetti e l'inoltro dei pacchetti. Il pacchetto contenente il messaggio echo ICMP può essere frammentato in transito se la dimensione totale dei pacchetti supera le dimensioni massime dei pacchetti che possono essere trasmessi da uno dei nodi di routing tra i computer locali e remoti. Per evitare la frammentazione, usare uno dei SendAsync metodi che accetta un options parametro e impostare la DontFragment proprietà su true. Quando DontFragment è true e la dimensione totale del pacchetto supera le dimensioni massime dei pacchetti che possono essere trasmessi da uno dei nodi di routing tra i computer locali e remoti, la richiesta echo ICMP ha esito negativo. In questo caso, l'oggetto Status è impostato su PacketTooBig.

I frammenti di pacchetti o pacchetti possono essere inoltrati tramite il routing dei nodi 128 volte prima di essere ignorati. Per modificare questa impostazione, usare un overload che accetta un SendAsyncoptions parametro e impostare la proprietà sul Ttl valore desiderato. Se il pacchetto non raggiunge la destinazione dopo l'inoltro del numero specificato di volte, il pacchetto viene rimosso e la richiesta echo ICMP non riesce. In questo caso, l'oggetto Status è impostato su TtlExpired.

Si applica a

SendAsync(IPAddress, Object)

Origine:
Ping.cs
Origine:
Ping.cs
Origine:
Ping.cs

Esegue un tentativo di invio in modalità asincrona di un messaggio echo ICMP (Internet Control Message Protocol) a un computer con il IPAddress specificato e riceve il messaggio di risposta echo ICMP corrispondente da quel computer.

public:
 void SendAsync(System::Net::IPAddress ^ address, System::Object ^ userToken);
public void SendAsync (System.Net.IPAddress address, object? userToken);
public void SendAsync (System.Net.IPAddress address, object userToken);
member this.SendAsync : System.Net.IPAddress * obj -> unit
Public Sub SendAsync (address As IPAddress, userToken As Object)

Parametri

address
IPAddress

Oggetto IPAddress che identifica il computer di destinazione del messaggio echo ICMP.

userToken
Object

Oggetto passato al metodo richiamato al completamento dell'operazione asincrona.

Eccezioni

address è null.

È in corso una chiamata al metodo SendAsync.

È stata generata un'eccezione durante l'invio o la ricezione di messaggi ICMP. Per conoscere l'eccezione esatta generata, vedere l'eccezione interna.

address non è un indirizzo IP valido.

L'oggetto è stato eliminato.

Esempio

Per un esempio di codice che illustra la chiamata di un SendAsync metodo, vedere la panoramica della Ping classe.

Commenti

Il SendAsync metodo invia il messaggio echo in modo asincrono e, quando l'operazione viene completata correttamente o senza esito negativo, restituisce lo stato all'applicazione. Chiamare il metodo quando l'applicazione SendAsync non deve bloccare. Ogni chiamata a questo metodo viene eseguita in un thread separato allocato automaticamente dal pool di thread. Al termine dell'operazione asincrona, genera l'evento PingCompleted . Per specificare il metodo chiamato quando SendAsync genera l'evento, è necessario aggiungere un PingCompletedEventHandler delegato all'evento prima di chiamare SendAsync. Il metodo del delegato riceve un oggetto contenente un PingCompletedEventArgsPingReply oggetto che descrive il risultato della SendAsync chiamata. L'oggetto PingCompletedEventArgs eredita la UserState proprietà. Questa proprietà contiene l'oggetto userToken passato alla SendAsync chiamata.

Nota

Se l'applicazione deve bloccare durante l'attesa di una risposta, usare uno dei Send metodi. Questi metodi sono sincroni.

Questo metodo invia un buffer di dati 32 Byte con il messaggio echo ICMP. Il metodo attende cinque secondi per un messaggio di risposta echo ICMP. Se non riceve una risposta in quel momento, il metodo restituisce e la Status proprietà è impostata su TimedOut.

Questo overload usa le impostazioni predefinite per la frammentazione dei pacchetti e l'inoltro dei pacchetti. Il pacchetto contenente il messaggio echo ICMP può essere frammentato in transito se la dimensione totale dei pacchetti supera le dimensioni massime dei pacchetti che possono essere trasmessi da uno dei nodi di routing tra i computer locali e remoti. Per evitare la frammentazione, usare uno dei SendAsync metodi che accetta un options parametro e impostare la DontFragment proprietà su true. Quando DontFragment è true e la dimensione totale del pacchetto supera le dimensioni massime dei pacchetti che possono essere trasmessi da uno dei nodi di routing tra i computer locali e remoti, la richiesta echo ICMP ha esito negativo. In questo caso, l'oggetto Status è impostato su PacketTooBig.

I frammenti di pacchetti o pacchetti possono essere inoltrati tramite il routing dei nodi 128 volte prima di essere ignorati. Per modificare questa impostazione, usare un overload che accetta un SendAsyncoptions parametro e impostare la proprietà sul Ttl valore desiderato. Se il pacchetto non raggiunge la destinazione dopo l'inoltro del numero specificato di volte, il pacchetto viene rimosso e la richiesta echo ICMP non riesce. In questo caso, l'oggetto Status è impostato su TtlExpired.

Si applica a

SendAsync(String, Int32, Object)

Origine:
Ping.cs
Origine:
Ping.cs
Origine:
Ping.cs

Esegue un tentativo di invio in modalità asincrona di un messaggio echo ICMP (Internet Control Message Protocol) al computer remoto specificato e riceve il messaggio di risposta echo ICMP corrispondente da quest'ultimo. Questo overload consente di specificare un valore di timeout per l'operazione.

public:
 void SendAsync(System::String ^ hostNameOrAddress, int timeout, System::Object ^ userToken);
public void SendAsync (string hostNameOrAddress, int timeout, object? userToken);
public void SendAsync (string hostNameOrAddress, int timeout, object userToken);
member this.SendAsync : string * int * obj -> unit
Public Sub SendAsync (hostNameOrAddress As String, timeout As Integer, userToken As Object)

Parametri

hostNameOrAddress
String

Oggetto String che identifica il computer di destinazione del messaggio echo ICMP. Il valore specificato per il parametro può essere un nome host o una rappresentazione in forma di stringa di un indirizzo IP.

timeout
Int32

Valore Int32 che specifica il numero massimo di millisecondi durante i quali attendere il messaggio di risposta echo ICMP dopo l'invio del messaggio echo.

userToken
Object

Oggetto passato al metodo richiamato al completamento dell'operazione asincrona.

Eccezioni

hostNameOrAddress è null o è una stringa vuota ("").

timeout è minore di zero.

È in corso una chiamata a SendAsync.

È stata generata un'eccezione durante l'invio o la ricezione di messaggi ICMP. Per conoscere l'eccezione esatta generata, vedere l'eccezione interna.

Non è possibile risolvere hostNameOrAddress in un indirizzo IP valido.

L'oggetto è stato eliminato.

Esempio

Per un esempio di codice che illustra la chiamata al SendAsync metodo, vedere la panoramica della Ping classe.

Commenti

Il SendAsync metodo invia il messaggio Echo in modo asincrono e, quando l'operazione viene completata correttamente o senza esito negativo, restituisce lo stato all'applicazione. Chiamare il metodo quando l'applicazione SendAsync non deve bloccare. Ogni chiamata viene eseguita in un thread separato 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 quando SendAsync genera l'evento. È necessario aggiungere un PingCompletedEventHandler delegato all'evento prima di chiamare SendAsync. Il metodo del delegato riceve un oggetto contenente un PingCompletedEventArgsPingReply oggetto che descrive il risultato della SendAsync chiamata. L'oggetto PingCompletedEventArgs eredita la UserState proprietà. Questa proprietà contiene l'oggetto userToken passato alla SendAsync chiamata.

Se l'applicazione deve bloccare durante l'attesa di una risposta, usare i Send metodi. Questi metodi sono sincroni.

Se il messaggio di risposta echo ICMP non viene ricevuto entro il tempo specificato dal timeout parametro, l'echo ICMP ha esito negativo e la Status proprietà è impostata su TimedOut.

Nota

Quando si specificano numeri molto piccoli per timeout, la risposta Ping può essere ricevuta anche se timeout sono trascorsi millisecondi.

Questo overload usa le impostazioni predefinite per la frammentazione dei pacchetti e l'inoltro dei pacchetti. Il pacchetto contenente il messaggio echo ICMP può essere frammentato in transito se la dimensione totale dei pacchetti supera le dimensioni massime dei pacchetti che possono essere trasmessi da uno dei nodi di routing tra i computer locali e remoti. Per evitare la frammentazione, usare uno dei SendAsync metodi che accetta un options parametro e impostare la DontFragment proprietà su true. Quando DontFragment è true e la dimensione totale del pacchetto supera le dimensioni massime dei pacchetti che possono essere trasmessi da uno dei nodi di routing tra i computer locali e remoti, la richiesta echo ICMP ha esito negativo. In questo caso, l'oggetto Status è impostato su PacketTooBig. I frammenti di pacchetti o pacchetti (se frammentati) possono essere inoltrati tramite il routing dei nodi 128 volte prima di essere ignorati. Per modificare questa impostazione, usare un overload che accetta un SendAsyncoptions parametro e impostare la proprietà sul Ttl valore desiderato. Se il pacchetto non raggiunge la destinazione dopo l'inoltro del numero specificato di volte, il pacchetto viene rimosso e la richiesta echo ICMP non riesce. In questo caso, l'oggetto Status è impostato su TtlExpired.

Si applica a