Teilen über


Ping.SendAsync Methode

Definition

Versucht, eine ICMP (Internet Control Message Protocol)-Echomeldung asynchron an einen Computer zu senden und eine entsprechende ICMP-Echoantwortmeldung von diesem Computer zu empfangen.

Überlädt

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

Versucht, asynchron eine ICMP (Internet Control Message Protocol)-Echomeldung mit dem angegebenen Datenpuffer an den angegebenen Computer zu senden und eine entsprechende ICMP-Echoantwortmeldung von diesem Computer zu empfangen. Mit dieser Überladung können Sie einen Timeoutwert für den Vorgang angeben und die Werte für Fragmentierung und Gültigkeitsdauer des ICMP-Pakets steuern.

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

Versucht, asynchron eine ICMP (Internet Control Message Protocol)-Echomeldung mit dem angegebenen Datenpuffer an einen Computer mit der angegebenen IPAddress zu senden und eine entsprechende ICMP-Echoantwortmeldung von diesem Computer zu empfangen. Mit dieser Überladung können Sie einen Timeoutwert für den Vorgang angeben und die Werte für Fragmentierung und Gültigkeitsdauer des ICMP-Echomeldungspakets steuern.

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

Versucht, asynchron eine ICMP (Internet Control Message Protocol)-Echomeldung mit dem angegebenen Datenpuffer an den angegebenen Computer zu senden und eine entsprechende ICMP-Echoantwortmeldung von diesem Computer zu empfangen. Diese Überladung ermöglicht es Ihnen, einen Timeoutwert für den Vorgang anzugeben.

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

Versucht, asynchron eine ICMP (Internet Control Message Protocol)-Echomeldung mit dem angegebenen Datenpuffer an einen Computer mit der angegebenen IPAddress zu senden und eine entsprechende ICMP-Echoantwortmeldung von diesem Computer zu empfangen. Diese Überladung ermöglicht es Ihnen, einen Timeoutwert für den Vorgang anzugeben.

SendAsync(IPAddress, Int32, Object)

Versucht, asynchron eine ICMP (Internet Control Message Protocol)-Echomeldung an einen Computer mit der angegebenen IPAddress zu senden und eine entsprechende ICMP-Echoantwortmeldung von diesem Computer zu empfangen. Diese Überladung ermöglicht es Ihnen, einen Timeoutwert für den Vorgang anzugeben.

SendAsync(String, Object)

Versucht, asynchron eine ICMP (Internet Control Message Protocol)-Echomeldung an den angegebenen Computer zu senden und eine entsprechende ICMP-Echoantwortmeldung von diesem Computer zu empfangen.

SendAsync(IPAddress, Object)

Versucht, asynchron eine ICMP (Internet Control Message Protocol)-Echomeldung an einen Computer mit der angegebenen IPAddress zu senden und eine entsprechende ICMP-Echoantwortmeldung von diesem Computer zu empfangen.

SendAsync(String, Int32, Object)

Versucht, asynchron eine ICMP (Internet Control Message Protocol)-Echomeldung an den angegebenen Computer zu senden und eine entsprechende ICMP-Echoantwortmeldung von diesem Computer zu empfangen. Diese Überladung ermöglicht es Ihnen, einen Timeoutwert für den Vorgang anzugeben.

Hinweise

Diese Methoden führen nicht dazu, dass der Standard Thread Ihrer Anwendung blockiert wird. Wenn Sie blockieren möchten, während Sie auf die ICMP-Echoantwortnachricht warten, verwenden Sie die Send Methoden.

Hinweis

Die von einer der SendAsync Methoden zurückgegebene IP-Adresse kann von einem böswilligen Remotecomputer stammen. Stellen Sie damit keine Verbindung mit dem Remotecomputer her. Verwenden Sie DNS, um die IP-Adresse des Computers zu ermitteln, mit dem Sie eine Verbindung herstellen möchten.

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

Quelle:
Ping.cs
Quelle:
Ping.cs
Quelle:
Ping.cs

Versucht, asynchron eine ICMP (Internet Control Message Protocol)-Echomeldung mit dem angegebenen Datenpuffer an den angegebenen Computer zu senden und eine entsprechende ICMP-Echoantwortmeldung von diesem Computer zu empfangen. Mit dieser Überladung können Sie einen Timeoutwert für den Vorgang angeben und die Werte für Fragmentierung und Gültigkeitsdauer des ICMP-Pakets steuern.

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)

Parameter

hostNameOrAddress
String

Ein String, der den Computer bezeichnet, der das Ziel für die ICMP-Echomeldung ist. Der für diesen Parameter angegebene Wert kann eine Hostname oder eine Zeichenfolgenentsprechung einer IP-Adresse sein.

timeout
Int32

Ein Int32-Wert, der die maximale Anzahl von Millisekunden angibt (nach dem Senden der Echomeldung), für die auf die ICMP-Echoantwortmeldung gewartet werden soll.

buffer
Byte[]

Ein Byte-Array, das Daten enthält, die mit der ICMP-Echomeldung gesendet und in der ICMP-Echoantwortmeldung zurückgegeben werden sollen. Das Array kann höchstens 65.500 Bytes enthalten.

options
PingOptions

Ein PingOptions-Objekt, das verwendet wird, um die Werte für Fragmentierung und Gültigkeitsdauer des ICMP-Echomeldungspakets zu steuern.

userToken
Object

Ein Objekt, das an die beim Abschluss des asynchronen Vorgangs aufgerufene Methode übergeben wird.

Ausnahmen

hostNameOrAddress ist null oder eine leere Zeichenfolge ("").

- oder -

buffer ist null.

timeout ist kleiner als Null.

Ein Aufruf von SendAsync wird gerade ausgeführt.

Beim Senden oder Empfangen der ICMP-Meldungen wurde eine Ausnahme ausgelöst. Welche Ausnahme genau ausgelöst wurde, entnehmen Sie der internen Ausnahme.

hostNameOrAddress konnte nicht in eine gültige IP-Adresse aufgelöst werden.

Dieses Objekt wurde verworfen.

Die Größe des buffer übersteigt 65.500 Bytes.

.NET 7 und höhere Versionen nur unter Linux: Der Prozess ist nicht privilegiert und buffer nicht leer.

Beispiele

Im folgenden Codebeispiel wird veranschaulicht, wie diese Methode aufgerufen wird.

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

Hinweise

Die SendAsync Methode sendet die Echo-Nachricht asynchron und gibt die status an Ihre Anwendung zurück, wenn der Vorgang (erfolgreich oder nicht erfolgreich) abgeschlossen ist. Rufen Sie die -Methode auf SendAsync , wenn Ihre Anwendung nicht blockieren darf. Jeder Aufruf wird in einem separaten Thread ausgeführt, der automatisch aus dem Threadpool zugeordnet wird. Wenn der asynchrone Vorgang abgeschlossen ist, löst er das PingCompleted -Ereignis aus. Anwendungen verwenden einen PingCompletedEventHandler Delegaten, um die Methode anzugeben, die aufgerufen wird, wenn SendAsync das Ereignis ausgelöst wird. Sie müssen dem Ereignis einen PingCompletedEventHandler Delegaten hinzufügen, bevor Sie aufrufen SendAsync. Die Methode des Delegaten empfängt ein PingCompletedEventArgs Objekt, das ein PingReply Objekt enthält, das das Ergebnis des SendAsync Aufrufs beschreibt. Das PingCompletedEventArgs -Objekt erbt die UserState -Eigenschaft. Diese Eigenschaft enthält das userToken an den SendAsync Aufruf übergebene Objekt.

Wenn Ihre Anwendung während des Wartens auf eine Antwort blockieren soll, verwenden Sie die Send Methoden. Diese Methoden sind synchron.

Wenn die ICMP-Echoantwortnachricht nicht innerhalb der vom timeout Parameter angegebenen Zeit empfangen wird, schlägt das ICMP-Echo fehl, und die Status Eigenschaft ist auf TimedOutfestgelegt.

Hinweis

Wenn Sie sehr kleine Zahlen für timeoutangeben, kann die Ping-Antwort empfangen werden, auch wenn timeout Millisekunden abgelaufen sind.

Wenn die DontFragment Eigenschaft ist true und die Gesamtpaketgröße die maximale Paketgröße überschreitet, die von einem der Routingknoten zwischen dem lokalen computer und dem Remotecomputer übertragen werden kann, schlägt die ICMP-Echoanforderung fehl. Wenn dies geschieht, ist auf Status festgelegt PacketTooBig.

Verwenden Sie die Ttl -Eigenschaft, um anzugeben, wie oft die ICMP-Echonachricht maximal weitergeleitet werden kann, bevor sie ihr Ziel erreicht. Wenn das Paket sein Ziel nach der angegebenen Anzahl von Weiterleitungen nicht erreicht, wird das Paket verworfen, und die ICMP-Echoanforderung schlägt fehl. Wenn dies geschieht, ist auf Status festgelegt TtlExpired.

Gilt für:

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

Quelle:
Ping.cs
Quelle:
Ping.cs
Quelle:
Ping.cs

Versucht, asynchron eine ICMP (Internet Control Message Protocol)-Echomeldung mit dem angegebenen Datenpuffer an einen Computer mit der angegebenen IPAddress zu senden und eine entsprechende ICMP-Echoantwortmeldung von diesem Computer zu empfangen. Mit dieser Überladung können Sie einen Timeoutwert für den Vorgang angeben und die Werte für Fragmentierung und Gültigkeitsdauer des ICMP-Echomeldungspakets steuern.

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)

Parameter

address
IPAddress

Eine IPAddress, die den Computer bezeichnet, der das Ziel der ICMP-Echomeldung ist.

timeout
Int32

Ein Int32-Wert, der die maximale Anzahl von Millisekunden angibt (nach dem Senden der Echomeldung), für die auf die ICMP-Echoantwortmeldung gewartet werden soll.

buffer
Byte[]

Ein Byte-Array, das Daten enthält, die mit der ICMP-Echomeldung gesendet und in der ICMP-Echoantwortmeldung zurückgegeben werden sollen. Das Array kann höchstens 65.500 Bytes enthalten.

options
PingOptions

Ein PingOptions-Objekt, das verwendet wird, um die Werte für Fragmentierung und Gültigkeitsdauer des ICMP-Echomeldungspakets zu steuern.

userToken
Object

Ein Objekt, das an die beim Abschluss des asynchronen Vorgangs aufgerufene Methode übergeben wird.

Ausnahmen

address oder buffer ist null.

timeout ist kleiner als Null.

Ein Aufruf von SendAsync wird gerade ausgeführt.

Beim Senden oder Empfangen der ICMP-Meldungen wurde eine Ausnahme ausgelöst. Welche Ausnahme genau ausgelöst wurde, entnehmen Sie der internen Ausnahme.

address ist keine gültige IP-Adresse.

Dieses Objekt wurde verworfen.

Die Größe des buffer übersteigt 65.500 Bytes.

.NET 7 und höhere Versionen nur unter Linux: Der Prozess ist nicht privilegiert und buffer nicht leer.

Beispiele

Im folgenden Codebeispiel wird veranschaulicht, wie diese Methode aufgerufen wird. Eine Implementierung der Rückrufmethode finden Sie im Abschnitt Zum Beispiel für SendAsync Die Methodenüberladung.

Im folgenden Codebeispiel sind die folgenden Namespaces erforderlich:

#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;

Im folgenden Codebeispiel wird eine ICMP-Echomeldung asynchron gesendet.

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

Hinweise

Die SendAsync Methode sendet die Echo-Nachricht asynchron und gibt die status an Ihre Anwendung zurück, wenn der Vorgang (erfolgreich oder nicht erfolgreich) abgeschlossen ist. Rufen Sie die -Methode auf SendAsync , wenn Ihre Anwendung nicht blockieren darf. Jeder Aufruf wird in einem separaten Thread ausgeführt, der automatisch aus dem Threadpool zugeordnet wird. Wenn der asynchrone Vorgang abgeschlossen ist, löst er das PingCompleted -Ereignis aus. Anwendungen verwenden einen PingCompletedEventHandler Delegaten, um die Methode anzugeben, die aufgerufen wird, wenn SendAsync das Ereignis ausgelöst wird. Sie müssen dem Ereignis einen PingCompletedEventHandler Delegaten hinzufügen, bevor Sie aufrufen SendAsync. Die Methode des Delegaten empfängt ein PingCompletedEventArgs Objekt, das ein PingReply Objekt enthält, das das Ergebnis des SendAsync Aufrufs beschreibt. Das PingCompletedEventArgs -Objekt erbt die UserState -Eigenschaft. Diese Eigenschaft enthält das userToken an den SendAsync Aufruf übergebene Objekt.

Wenn Ihre Anwendung während des Wartens auf eine Antwort blockiert, verwenden Sie die Send Methoden. Diese Methoden sind synchron.

Wenn die ICMP-Echoantwortnachricht nicht innerhalb der vom timeout Parameter angegebenen Zeit empfangen wird, schlägt das ICMP-Echo fehl, und die Status -Eigenschaft ist auf TimedOutfestgelegt.

Hinweis

Wenn Sie sehr kleine Zahlen für timeoutangeben, kann die Pingantwort empfangen werden, auch wenn timeout Millisekunden abgelaufen sind.

Wenn die DontFragment -Eigenschaft ist true und die Gesamtpaketgröße die maximale Paketgröße überschreitet, die von einem der Routingknoten zwischen dem lokalen computer und dem Remotecomputer übertragen werden kann, schlägt die ICMP-Echoanforderung fehl. In diesem Fall wird auf Status festgelegt PacketTooBig.

Verwenden Sie die Ttl -Eigenschaft, um anzugeben, wie oft die ICMP-Echonachricht maximal weitergeleitet werden kann, bevor sie ihr Ziel erreicht. Wenn das Paket sein Ziel nach der angegebenen Anzahl von Weiterleitungen nicht erreicht, wird das Paket verworfen, und die ICMP-Echoanforderung schlägt fehl. In diesem Fall wird auf Status festgelegt TtlExpired.

Gilt für:

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

Quelle:
Ping.cs
Quelle:
Ping.cs
Quelle:
Ping.cs

Versucht, asynchron eine ICMP (Internet Control Message Protocol)-Echomeldung mit dem angegebenen Datenpuffer an den angegebenen Computer zu senden und eine entsprechende ICMP-Echoantwortmeldung von diesem Computer zu empfangen. Diese Überladung ermöglicht es Ihnen, einen Timeoutwert für den Vorgang anzugeben.

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)

Parameter

hostNameOrAddress
String

Ein String, der den Computer bezeichnet, der das Ziel für die ICMP-Echomeldung ist. Der für diesen Parameter angegebene Wert kann eine Hostname oder eine Zeichenfolgenentsprechung einer IP-Adresse sein.

timeout
Int32

Ein Int32-Wert, der die maximale Anzahl von Millisekunden angibt (nach dem Senden der Echomeldung), für die auf die ICMP-Echoantwortmeldung gewartet werden soll.

buffer
Byte[]

Ein Byte-Array, das Daten enthält, die mit der ICMP-Echomeldung gesendet und in der ICMP-Echoantwortmeldung zurückgegeben werden sollen. Das Array kann höchstens 65.500 Bytes enthalten.

userToken
Object

Ein Objekt, das an die beim Abschluss des asynchronen Vorgangs aufgerufene Methode übergeben wird.

Ausnahmen

hostNameOrAddress ist null oder eine leere Zeichenfolge ("").

- oder -

buffer ist null.

timeout ist kleiner als Null.

Ein Aufruf von SendAsync wird gerade ausgeführt.

Beim Senden oder Empfangen der ICMP-Meldungen wurde eine Ausnahme ausgelöst. Welche Ausnahme genau ausgelöst wurde, entnehmen Sie der internen Ausnahme.

hostNameOrAddress konnte nicht in eine gültige IP-Adresse aufgelöst werden.

Dieses Objekt wurde verworfen.

Die Größe des buffer übersteigt 65.500 Bytes.

.NET 7 und höhere Versionen nur unter Linux: Der Prozess ist nicht privilegiert und buffer nicht leer.

Beispiele

Im folgenden Codebeispiel wird das Aufrufen einer SendAsync Überladung veranschaulicht. Weitere Informationen finden Sie in der Übersicht über die Ping Klasse.

Hinweise

Die SendAsync Methode sendet die Echo-Nachricht asynchron und gibt nach Abschluss des Vorgangs (erfolgreich oder nicht erfolgreich) die status an Ihre Anwendung zurück. Rufen Sie die SendAsync -Methode auf, wenn Ihre Anwendung nicht blockieren soll. Jeder Aufruf wird in einem separaten Thread ausgeführt, der automatisch aus dem Threadpool zugeordnet wird. Wenn der asynchrone Vorgang abgeschlossen ist, löst er das PingCompleted -Ereignis aus. Anwendungen verwenden einen PingCompletedEventHandler Delegaten, um die Methode anzugeben, die aufgerufen wird, wenn SendAsync das Ereignis ausgelöst wird. Sie müssen dem Ereignis einen PingCompletedEventHandler Delegaten hinzufügen, bevor Sie aufrufen SendAsync. Die Methode des Delegaten empfängt ein PingCompletedEventArgs -Objekt, das ein PingReply -Objekt enthält, das das Ergebnis des SendAsync Aufrufs beschreibt. Das PingCompletedEventArgs -Objekt erbt die UserState -Eigenschaft. Diese Eigenschaft enthält das -Objekt, das userToken an den SendAsync Aufruf übergeben wird.

Wenn Ihre Anwendung während des Wartens auf eine Antwort blockieren soll, verwenden Sie die Send Methoden. Diese Methoden sind synchron.

Wenn die ICMP-Echoantwortnachricht nicht innerhalb der vom timeout Parameter angegebenen Zeit empfangen wird, schlägt das ICMP-Echo fehl, und die Status -Eigenschaft ist auf TimedOutfestgelegt.

Hinweis

Wenn Sie sehr kleine Zahlen für timeoutangeben, kann die Pingantwort empfangen werden, auch wenn timeout Millisekunden abgelaufen sind.

Diese Überladung verwendet Standardeinstellungen für die Paketfragmentierung und Paketweiterleitung. Das Paket, das die ICMP-Echonachricht enthält, kann während der Übertragung fragmentiert werden, wenn die Gesamtpaketgröße die maximale Paketgröße überschreitet, die von einem der Routingknoten zwischen den lokalen und Remotecomputern übertragen werden kann. Um die Fragmentierung zu verhindern, verwenden Sie eine der Methoden, die SendAsync einen options Parameter akzeptiert, und legen Sie die DontFragment -Eigenschaft auf fest true. Wenn DontFragment ist true und die Gesamtpaketgröße die maximale Paketgröße überschreitet, die von einem der Routingknoten zwischen den lokalen und Remotecomputern übertragen werden kann, schlägt die ICMP-Echoanforderung fehl. In diesem Fall wird auf Status festgelegt PacketTooBig. Die Paket- oder Paketfragmente (falls fragmentiert) können 128-mal von Routingknoten weitergeleitet werden, bevor sie verworfen werden. Um diese Einstellung zu ändern, verwenden Sie eine SendAsync Überladung, die einen options Parameter akzeptiert, und legen Sie die Ttl -Eigenschaft auf den gewünschten Wert fest. Wenn das Paket sein Ziel nach der angegebenen Anzahl von Weiterleitungen nicht erreicht, wird das Paket verworfen, und die ICMP-Echoanforderung schlägt fehl. In diesem Fall wird auf Status festgelegt TtlExpired.

Gilt für:

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

Quelle:
Ping.cs
Quelle:
Ping.cs
Quelle:
Ping.cs

Versucht, asynchron eine ICMP (Internet Control Message Protocol)-Echomeldung mit dem angegebenen Datenpuffer an einen Computer mit der angegebenen IPAddress zu senden und eine entsprechende ICMP-Echoantwortmeldung von diesem Computer zu empfangen. Diese Überladung ermöglicht es Ihnen, einen Timeoutwert für den Vorgang anzugeben.

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)

Parameter

address
IPAddress

Eine IPAddress, die den Computer bezeichnet, der das Ziel der ICMP-Echomeldung ist.

timeout
Int32

Ein Int32-Wert, der die maximale Anzahl von Millisekunden angibt (nach dem Senden der Echomeldung), für die auf die ICMP-Echoantwortmeldung gewartet werden soll.

buffer
Byte[]

Ein Byte-Array, das Daten enthält, die mit der ICMP-Echomeldung gesendet und in der ICMP-Echoantwortmeldung zurückgegeben werden sollen. Das Array kann höchstens 65.500 Bytes enthalten.

userToken
Object

Ein Objekt, das an die beim Abschluss des asynchronen Vorgangs aufgerufene Methode übergeben wird.

Ausnahmen

address oder buffer ist null.

timeout ist kleiner als Null.

Ein Aufruf von SendAsync wird gerade ausgeführt.

Beim Senden oder Empfangen der ICMP-Meldungen wurde eine Ausnahme ausgelöst. Welche Ausnahme genau ausgelöst wurde, entnehmen Sie der internen Ausnahme.

address ist keine gültige IP-Adresse.

Dieses Objekt wurde verworfen.

Die Größe des buffer übersteigt 65.500 Bytes.

.NET 7 und höhere Versionen nur unter Linux: Der Prozess ist nicht privilegiert und buffer nicht leer.

Beispiele

Ein Codebeispiel, das das Aufrufen einer SendAsync Überladung veranschaulicht, finden Sie in der Übersicht über die Ping Klasse.

Hinweise

Diese Methode sendet die Echomeldung asynchron und gibt nach Abschluss des Vorgangs (erfolgreich oder nicht erfolgreich) die status an Ihre Anwendung zurück. Rufen Sie die SendAsync -Methode auf, wenn Ihre Anwendung nicht blockieren soll. Jeder Aufruf wird in einem separaten Thread ausgeführt, der automatisch aus dem Threadpool zugeordnet wird. Wenn der asynchrone Vorgang abgeschlossen ist, löst er das PingCompleted -Ereignis aus. Um die Methode anzugeben, die aufgerufen wird, wenn SendAsync das Ereignis ausgelöst wird, müssen Sie dem Ereignis einen PingCompletedEventHandler Delegaten hinzufügen, bevor Sie aufrufen SendAsync. Die -Methode des Delegaten empfängt ein PingCompletedEventArgs -Objekt, das ein PingReply -Objekt enthält, das das Ergebnis des SendAsync Aufrufs beschreibt. Das PingCompletedEventArgs -Objekt erbt die UserState -Eigenschaft. Diese Eigenschaft enthält das -Objekt, das userToken an den SendAsync Aufruf übergeben wird.

Hinweis

Wenn Ihre Anwendung während des Wartens auf eine Antwort blockiert, verwenden Sie die Send Methoden. Diese Methoden sind synchron.

Wenn die ICMP-Echoantwortnachricht nicht innerhalb der vom timeout Parameter angegebenen Zeit empfangen wird, schlägt das ICMP-Echo fehl, und die Status -Eigenschaft ist auf TimedOutfestgelegt.

Hinweis

Wenn Sie sehr kleine Zahlen für timeoutangeben, kann die Pingantwort empfangen werden, auch wenn timeout Millisekunden abgelaufen sind.

Diese Überladung verwendet Standardeinstellungen für die Paketfragmentierung und Paketweiterleitung. Das Paket, das die ICMP-Echonachricht enthält, kann während der Übertragung fragmentiert werden, wenn die Gesamtpaketgröße die maximale Paketgröße überschreitet, die von einem der Routingknoten zwischen den lokalen und Remotecomputern übertragen werden kann. Um die Fragmentierung zu verhindern, verwenden Sie eine der Methoden, die SendAsync einen options Parameter akzeptiert, und legen Sie die DontFragment -Eigenschaft auf fest true. Wenn DontFragment ist true und die Gesamtpaketgröße die maximale Paketgröße überschreitet, die von einem der Routingknoten zwischen den lokalen und Remotecomputern übertragen werden kann, schlägt die ICMP-Echoanforderung fehl. In diesem Fall wird auf Status festgelegt PacketTooBig. Die Paket- oder Paketfragmente (falls fragmentiert) können 128-mal von Routingknoten weitergeleitet werden, bevor sie verworfen werden. Um diese Einstellung zu ändern, verwenden Sie eine SendAsync Überladung, die einen options Parameter akzeptiert, und legen Sie die Ttl -Eigenschaft auf den gewünschten Wert fest. Wenn das Paket sein Ziel nach der angegebenen Anzahl von Weiterleitungen nicht erreicht, wird das Paket verworfen, und die ICMP-Echoanforderung schlägt fehl. In diesem Fall wird auf Status festgelegt TtlExpired.

Gilt für:

SendAsync(IPAddress, Int32, Object)

Quelle:
Ping.cs
Quelle:
Ping.cs
Quelle:
Ping.cs

Versucht, asynchron eine ICMP (Internet Control Message Protocol)-Echomeldung an einen Computer mit der angegebenen IPAddress zu senden und eine entsprechende ICMP-Echoantwortmeldung von diesem Computer zu empfangen. Diese Überladung ermöglicht es Ihnen, einen Timeoutwert für den Vorgang anzugeben.

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)

Parameter

address
IPAddress

Eine IPAddress, die den Computer bezeichnet, der das Ziel der ICMP-Echomeldung ist.

timeout
Int32

Ein Int32-Wert, der die maximale Anzahl von Millisekunden angibt (nach dem Senden der Echomeldung), für die auf die ICMP-Echoantwortmeldung gewartet werden soll.

userToken
Object

Ein Objekt, das an die beim Abschluss des asynchronen Vorgangs aufgerufene Methode übergeben wird.

Ausnahmen

address ist null.

timeout ist kleiner als Null.

Ein Aufruf der SendAsync(IPAddress, Int32, Byte[], Object)-Methode wird gerade ausgeführt.

Beim Senden oder Empfangen der ICMP-Meldungen wurde eine Ausnahme ausgelöst. Welche Ausnahme genau ausgelöst wurde, entnehmen Sie der internen Ausnahme.

address ist keine gültige IP-Adresse.

Dieses Objekt wurde verworfen.

Beispiele

Ein Codebeispiel, das das Aufrufen einer SendAsync Überladung veranschaulicht, finden Sie in der Übersicht über die Ping Klasse.

Hinweise

Die SendAsync Methode sendet die Echo-Nachricht asynchron und gibt nach Abschluss des Vorgangs (erfolgreich oder nicht erfolgreich) die status an Ihre Anwendung zurück. Rufen Sie die SendAsync -Methode auf, wenn Ihre Anwendung nicht blockieren soll. Jeder Aufruf wird in einem separaten Thread ausgeführt, der automatisch aus dem Threadpool zugeordnet wird. Wenn der asynchrone Vorgang abgeschlossen ist, löst er das PingCompleted -Ereignis aus. Anwendungen verwenden einen PingCompletedEventHandler Delegaten, um die Methode anzugeben, die aufgerufen wird, wenn SendAsync das Ereignis ausgelöst wird. Sie müssen dem Ereignis einen PingCompletedEventHandler Delegaten hinzufügen, bevor Sie aufrufen SendAsync. Die -Methode des Delegaten empfängt ein PingCompletedEventArgs -Objekt, das ein PingReply -Objekt enthält, das das Ergebnis des SendAsync Aufrufs beschreibt. Das PingCompletedEventArgs -Objekt erbt die UserState -Eigenschaft. Diese Eigenschaft enthält das -Objekt, das userToken an den SendAsync Aufruf übergeben wird.

Wenn Ihre Anwendung während des Wartens auf eine Antwort blockieren soll, verwenden Sie die Send Methoden. Diese Methoden sind synchron.

Wenn die ICMP-Echoantwortnachricht nicht innerhalb der vom timeout Parameter angegebenen Zeit empfangen wird, schlägt das ICMP-Echo fehl, und die Status -Eigenschaft ist auf TimedOutfestgelegt.

Hinweis

Wenn Sie sehr kleine Zahlen für timeoutangeben, kann die Pingantwort empfangen werden, auch wenn timeout Millisekunden abgelaufen sind.

Diese Überladung verwendet Standardeinstellungen für die Paketfragmentierung und Paketweiterleitung. Das Paket, das die ICMP-Echonachricht enthält, kann während der Übertragung fragmentiert werden, wenn die Gesamtpaketgröße die maximale Paketgröße überschreitet, die von einem der Routingknoten zwischen den lokalen und Remotecomputern übertragen werden kann. Um die Fragmentierung zu verhindern, verwenden Sie eine der Methoden, die SendAsync einen options Parameter akzeptiert, und legen Sie die DontFragment -Eigenschaft auf fest true. Wenn DontFragment ist true und die Gesamtpaketgröße die maximale Paketgröße überschreitet, die von einem der Routingknoten zwischen den lokalen und Remotecomputern übertragen werden kann, schlägt die ICMP-Echoanforderung fehl. In diesem Fall wird auf Status festgelegt PacketTooBig. Die Paket- oder Paketfragmente (falls fragmentiert) können 128-mal von Routingknoten weitergeleitet werden, bevor sie verworfen werden. Um diese Einstellung zu ändern, verwenden Sie eine SendAsync Überladung, die einen options Parameter akzeptiert, und legen Sie die Ttl -Eigenschaft auf den gewünschten Wert fest. Wenn das Paket sein Ziel nach der angegebenen Anzahl von Weiterleitungen nicht erreicht, wird das Paket verworfen, und die ICMP-Echoanforderung schlägt fehl. In diesem Fall wird auf Status festgelegt TtlExpired.

Gilt für:

SendAsync(String, Object)

Quelle:
Ping.cs
Quelle:
Ping.cs
Quelle:
Ping.cs

Versucht, asynchron eine ICMP (Internet Control Message Protocol)-Echomeldung an den angegebenen Computer zu senden und eine entsprechende ICMP-Echoantwortmeldung von diesem Computer zu empfangen.

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)

Parameter

hostNameOrAddress
String

Ein String, der den Computer bezeichnet, der das Ziel für die ICMP-Echomeldung ist. Der für diesen Parameter angegebene Wert kann eine Hostname oder eine Zeichenfolgenentsprechung einer IP-Adresse sein.

userToken
Object

Ein Objekt, das an die beim Abschluss des asynchronen Vorgangs aufgerufene Methode übergeben wird.

Ausnahmen

hostNameOrAddress ist null oder eine leere Zeichenfolge ("").

Ein Aufruf der SendAsync(String, Object)-Methode wird gerade ausgeführt.

Beim Senden oder Empfangen der ICMP-Meldungen wurde eine Ausnahme ausgelöst. Welche Ausnahme genau ausgelöst wurde, entnehmen Sie der internen Ausnahme.

hostNameOrAddress konnte nicht in eine gültige IP-Adresse aufgelöst werden.

Dieses Objekt wurde verworfen.

Beispiele

Ein Codebeispiel, das das Aufrufen der SendAsync -Methode veranschaulicht, finden Sie in der Übersicht über die Ping Klasse.

Hinweise

Die SendAsync -Methode sendet die Echomeldung asynchron und gibt nach Abschluss des Vorgangs (erfolgreich oder nicht erfolgreich) die status an Ihre Anwendung zurück. Rufen Sie die SendAsync -Methode auf, wenn Ihre Anwendung nicht blockieren soll. Jeder Aufruf dieser Methode wird in einem separaten Thread ausgeführt, der automatisch aus dem Threadpool zugeordnet wird. Wenn der asynchrone Vorgang abgeschlossen ist, löst er das PingCompleted -Ereignis aus. Um die Methode anzugeben, die aufgerufen wird, wenn SendAsync das Ereignis ausgelöst wird, müssen Sie dem Ereignis einen PingCompletedEventHandler Delegaten hinzufügen, bevor Sie aufrufen SendAsync. Die -Methode des Delegaten empfängt ein PingCompletedEventArgs -Objekt, das ein PingReply -Objekt enthält, das das Ergebnis des SendAsync Aufrufs beschreibt. Das PingCompletedEventArgs -Objekt erbt die UserState -Eigenschaft. Diese Eigenschaft enthält das -Objekt, das userToken an den SendAsync Aufruf übergeben wird.

Hinweis

Wenn Ihre Anwendung während des Wartens auf eine Antwort blockieren soll, verwenden Sie die Send Methoden. Diese Methoden sind synchron.

Diese Methode sendet einen 32-Datenpuffer Byte mit der ICMP-Echomeldung. Die -Methode wartet fünf Sekunden auf eine ICMP-Echoantwortnachricht. Wenn in diesem Zeitraum keine Antwort empfangen wird, wird die -Methode zurückgegeben, und die Status -Eigenschaft wird auf TimedOutfestgelegt.

Diese Überladung verwendet Standardeinstellungen für die Paketfragmentierung und Paketweiterleitung. Das Paket, das die ICMP-Echonachricht enthält, kann während der Übertragung fragmentiert werden, wenn die Gesamtpaketgröße die maximale Paketgröße überschreitet, die von einem der Routingknoten zwischen den lokalen und Remotecomputern übertragen werden kann. Um die Fragmentierung zu verhindern, verwenden Sie eine der Methoden, die SendAsync einen options Parameter akzeptiert, und legen Sie die DontFragment -Eigenschaft auf fest true. Wenn DontFragment ist true und die Gesamtpaketgröße die maximale Paketgröße überschreitet, die von einem der Routingknoten zwischen den lokalen und Remotecomputern übertragen werden kann, schlägt die ICMP-Echoanforderung fehl. In diesem Fall wird auf Status festgelegt PacketTooBig.

Die Paket- oder Paketfragmente können von Routingknoten 128-mal weitergeleitet werden, bevor sie verworfen werden. Um diese Einstellung zu ändern, verwenden Sie eine SendAsync Überladung, die einen options Parameter akzeptiert, und legen Sie die Ttl -Eigenschaft auf den gewünschten Wert fest. Wenn das Paket sein Ziel nach der angegebenen Anzahl von Weiterleitungen nicht erreicht, wird das Paket verworfen, und die ICMP-Echoanforderung schlägt fehl. In diesem Fall wird auf Status festgelegt TtlExpired.

Gilt für:

SendAsync(IPAddress, Object)

Quelle:
Ping.cs
Quelle:
Ping.cs
Quelle:
Ping.cs

Versucht, asynchron eine ICMP (Internet Control Message Protocol)-Echomeldung an einen Computer mit der angegebenen IPAddress zu senden und eine entsprechende ICMP-Echoantwortmeldung von diesem Computer zu empfangen.

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)

Parameter

address
IPAddress

Eine IPAddress, die den Computer bezeichnet, der das Ziel der ICMP-Echomeldung ist.

userToken
Object

Ein Objekt, das an die beim Abschluss des asynchronen Vorgangs aufgerufene Methode übergeben wird.

Ausnahmen

address ist null.

Ein Aufruf der SendAsync-Methode wird gerade ausgeführt.

Beim Senden oder Empfangen der ICMP-Meldungen wurde eine Ausnahme ausgelöst. Welche Ausnahme genau ausgelöst wurde, entnehmen Sie der internen Ausnahme.

address ist keine gültige IP-Adresse.

Dieses Objekt wurde verworfen.

Beispiele

Ein Codebeispiel, das das Aufrufen einer SendAsync Methode veranschaulicht, finden Sie in der Übersicht über die Ping Klasse.

Hinweise

Die SendAsync -Methode sendet die Echomeldung asynchron und gibt nach Abschluss des Vorgangs (erfolgreich oder nicht erfolgreich) die status an Ihre Anwendung zurück. Rufen Sie die SendAsync -Methode auf, wenn Ihre Anwendung nicht blockieren soll. Jeder Aufruf dieser Methode wird in einem separaten Thread ausgeführt, der automatisch aus dem Threadpool zugeordnet wird. Wenn der asynchrone Vorgang abgeschlossen ist, löst er das PingCompleted -Ereignis aus. Um die Methode anzugeben, die aufgerufen wird, wenn SendAsync das Ereignis ausgelöst wird, müssen Sie dem Ereignis einen PingCompletedEventHandler Delegaten hinzufügen, bevor Sie aufrufen SendAsync. Die -Methode des Delegaten empfängt ein PingCompletedEventArgs -Objekt, das ein PingReply -Objekt enthält, das das Ergebnis des SendAsync Aufrufs beschreibt. Das PingCompletedEventArgs -Objekt erbt die UserState -Eigenschaft. Diese Eigenschaft enthält das -Objekt, das userToken an den SendAsync Aufruf übergeben wird.

Hinweis

Wenn Ihre Anwendung während des Wartens auf eine Antwort blockieren soll, verwenden Sie eine der Send Methoden. Diese Methoden sind synchron.

Diese Methode sendet einen 32-Datenpuffer Byte mit der ICMP-Echomeldung. Die -Methode wartet fünf Sekunden auf eine ICMP-Echoantwortnachricht. Wenn in diesem Zeitraum keine Antwort empfangen wird, gibt die Methode zurück, und die Status -Eigenschaft wird auf TimedOutfestgelegt.

Diese Überladung verwendet Standardeinstellungen für die Paketfragmentierung und Paketweiterleitung. Das Paket, das die ICMP-Echonachricht enthält, kann während der Übertragung fragmentiert werden, wenn die Gesamtpaketgröße die maximale Paketgröße überschreitet, die von einem der Routingknoten zwischen den lokalen und Remotecomputern übertragen werden kann. Um die Fragmentierung zu verhindern, verwenden Sie eine der Methoden, die SendAsync einen options Parameter akzeptiert, und legen Sie die DontFragment -Eigenschaft auf fest true. Wenn DontFragment ist true und die Gesamtpaketgröße die maximale Paketgröße überschreitet, die von einem der Routingknoten zwischen den lokalen und Remotecomputern übertragen werden kann, schlägt die ICMP-Echoanforderung fehl. In diesem Fall wird auf Status festgelegt PacketTooBig.

Die Paket- oder Paketfragmente können von Routingknoten 128-mal weitergeleitet werden, bevor sie verworfen werden. Um diese Einstellung zu ändern, verwenden Sie eine SendAsync Überladung, die einen options Parameter akzeptiert, und legen Sie die Ttl -Eigenschaft auf den gewünschten Wert fest. Wenn das Paket sein Ziel nach der angegebenen Anzahl von Weiterleitungen nicht erreicht, wird das Paket verworfen, und die ICMP-Echoanforderung schlägt fehl. In diesem Fall wird auf Status festgelegt TtlExpired.

Gilt für:

SendAsync(String, Int32, Object)

Quelle:
Ping.cs
Quelle:
Ping.cs
Quelle:
Ping.cs

Versucht, asynchron eine ICMP (Internet Control Message Protocol)-Echomeldung an den angegebenen Computer zu senden und eine entsprechende ICMP-Echoantwortmeldung von diesem Computer zu empfangen. Diese Überladung ermöglicht es Ihnen, einen Timeoutwert für den Vorgang anzugeben.

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)

Parameter

hostNameOrAddress
String

Ein String, der den Computer bezeichnet, der das Ziel für die ICMP-Echomeldung ist. Der für diesen Parameter angegebene Wert kann eine Hostname oder eine Zeichenfolgenentsprechung einer IP-Adresse sein.

timeout
Int32

Ein Int32-Wert, der die maximale Anzahl von Millisekunden angibt (nach dem Senden der Echomeldung), für die auf die ICMP-Echoantwortmeldung gewartet werden soll.

userToken
Object

Ein Objekt, das an die beim Abschluss des asynchronen Vorgangs aufgerufene Methode übergeben wird.

Ausnahmen

hostNameOrAddress ist null oder eine leere Zeichenfolge ("").

timeout ist kleiner als Null.

Ein Aufruf von SendAsync wird gerade ausgeführt.

Beim Senden oder Empfangen der ICMP-Meldungen wurde eine Ausnahme ausgelöst. Welche Ausnahme genau ausgelöst wurde, entnehmen Sie der internen Ausnahme.

hostNameOrAddress konnte nicht in eine gültige IP-Adresse aufgelöst werden.

Dieses Objekt wurde verworfen.

Beispiele

Ein Codebeispiel, das das Aufrufen der SendAsync -Methode veranschaulicht, finden Sie in der Übersicht über die Ping Klasse.

Hinweise

Die SendAsync Methode sendet die Echo-Nachricht asynchron und gibt die status an Ihre Anwendung zurück, wenn der Vorgang (erfolgreich oder nicht erfolgreich) abgeschlossen ist. Rufen Sie die -Methode auf SendAsync , wenn Ihre Anwendung nicht blockieren soll. Jeder Aufruf wird in einem separaten Thread ausgeführt, der automatisch aus dem Threadpool zugeordnet wird. Wenn der asynchrone Vorgang abgeschlossen ist, löst er das PingCompleted -Ereignis aus. Anwendungen verwenden einen PingCompletedEventHandler Delegaten, um die Methode anzugeben, die aufgerufen wird, wenn SendAsync das Ereignis ausgelöst wird. Sie müssen dem Ereignis einen PingCompletedEventHandler Delegaten hinzufügen, bevor Sie aufrufen SendAsync. Die Methode des Delegaten empfängt ein PingCompletedEventArgs Objekt, das ein PingReply Objekt enthält, das das Ergebnis des SendAsync Aufrufs beschreibt. Das PingCompletedEventArgs -Objekt erbt die UserState -Eigenschaft. Diese Eigenschaft enthält das userToken an den SendAsync Aufruf übergebene Objekt.

Wenn Ihre Anwendung während des Wartens auf eine Antwort blockieren soll, verwenden Sie die Send Methoden. Diese Methoden sind synchron.

Wenn die ICMP-Echoantwortnachricht nicht innerhalb der vom timeout Parameter angegebenen Zeit empfangen wird, schlägt das ICMP-Echo fehl, und die Status Eigenschaft ist auf TimedOutfestgelegt.

Hinweis

Wenn Sie sehr kleine Zahlen für timeoutangeben, kann die Ping-Antwort empfangen werden, auch wenn timeout Millisekunden abgelaufen sind.

Diese Überladung verwendet Standardeinstellungen für Paketfragmentierung und Paketweiterleitung. Das Paket, das die ICMP-Echomeldung enthält, kann bei der Übertragung fragmentiert werden, wenn die Gesamtpaketgröße die maximale Paketgröße überschreitet, die von einem der Routingknoten zwischen den lokalen Und Remotecomputern übertragen werden kann. Um die Fragmentierung zu verhindern, verwenden Sie eine der Methoden, die SendAsync einen options Parameter akzeptiert, und legen Sie die DontFragment -Eigenschaft auf fest true. Wenn DontFragment ist true und die Gesamtpaketgröße die maximale Paketgröße überschreitet, die von einem der Routingknoten zwischen dem lokalen computer und dem Remotecomputer übertragen werden kann, schlägt die ICMP-Echoanforderung fehl. Wenn dies geschieht, ist auf Status festgelegt PacketTooBig. Das Paket oder die Paketfragmente (falls fragmentiert) können durch Routingknoten 128-mal weitergeleitet werden, bevor sie verworfen werden. Um diese Einstellung zu ändern, verwenden Sie eine SendAsync Überladung, die einen options Parameter akzeptiert, und legen Sie die Ttl Eigenschaft auf den gewünschten Wert fest. Wenn das Paket sein Ziel nach der angegebenen Anzahl von Weiterleitungen nicht erreicht, wird das Paket verworfen, und die ICMP-Echoanforderung schlägt fehl. Wenn dies geschieht, ist auf Status festgelegt TtlExpired.

Gilt für: