Udostępnij za pośrednictwem


Ping.SendAsync Metoda

Definicja

Asynchronicznie próbuje wysłać do komputera komunikat echa protokołu ICMP (Internet Control Message Protocol) i otrzymać odpowiedni komunikat odpowiedzi echa ICMP z tego komputera.

Przeciążenia

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

Asynchronicznie próbuje wysłać komunikat echa protokołu ICMP (Internet Control Message Protocol) z określonym buforem danych do określonego komputera i odbiera odpowiedni komunikat odpowiedzi echa ICMP z tego komputera. To przeciążenie umożliwia określenie wartości limitu czasu dla operacji i kontroli fragmentacji oraz wartości Time-to-Live pakietu ICMP.

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

Asynchronicznie próbuje wysłać komunikat echa protokołu ICMP (Internet Control Message Protocol) z określonym buforem danych do komputera, który ma określony IPAddresselement , i odbiera odpowiedni komunikat odpowiedzi echa ICMP z tego komputera. To przeciążenie umożliwia określenie wartości limitu czasu dla operacji i fragmentacji kontrolki oraz wartości Time-to-Live dla pakietu komunikatu echa ICMP.

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

Asynchronicznie próbuje wysłać komunikat echa protokołu ICMP (Internet Control Message Protocol) z określonym buforem danych do określonego komputera i odbiera odpowiedni komunikat odpowiedzi echa ICMP z tego komputera. To przeciążenie umożliwia określenie wartości limitu czasu dla operacji.

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

Asynchronicznie próbuje wysłać komunikat echa protokołu ICMP (Internet Control Message Protocol) z określonym buforem danych do komputera, który ma określony IPAddresselement , i odbiera odpowiedni komunikat odpowiedzi echa ICMP z tego komputera. To przeciążenie umożliwia określenie wartości limitu czasu dla operacji.

SendAsync(IPAddress, Int32, Object)

Asynchronicznie próbuje wysłać komunikat echa protokołu ICMP (Internet Control Message Protocol) do komputera, który ma określony IPAddresselement , i odbiera odpowiedni komunikat odpowiedzi echa ICMP z tego komputera. To przeciążenie umożliwia określenie wartości limitu czasu dla operacji.

SendAsync(String, Object)

Asynchronicznie próbuje wysłać komunikat echa protokołu ICMP (Internet Control Message Protocol) do określonego komputera i odbiera odpowiedni komunikat odpowiedzi echa ICMP z tego komputera.

SendAsync(IPAddress, Object)

Asynchronicznie próbuje wysłać komunikat echa protokołu ICMP (Internet Control Message Protocol) do komputera, który ma określony IPAddresselement , i odbiera odpowiedni komunikat odpowiedzi echa ICMP z tego komputera.

SendAsync(String, Int32, Object)

Asynchronicznie próbuje wysłać komunikat echa protokołu ICMP (Internet Control Message Protocol) do określonego komputera i odbiera odpowiedni komunikat odpowiedzi echa ICMP z tego komputera. To przeciążenie umożliwia określenie wartości limitu czasu dla operacji.

Uwagi

Te metody nie powodują blokowania głównego wątku aplikacji. Jeśli chcesz zablokować podczas oczekiwania na komunikat odpowiedzi echa ICMP, użyj Send metod .

Uwaga

Adres IP zwracany przez dowolną z SendAsync metod może pochodzić ze złośliwego komputera zdalnego. Nie należy łączyć się z komputerem zdalnym przy użyciu tego polecenia. Użyj systemu DNS, aby określić adres IP maszyny, z którą chcesz nawiązać połączenie.

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

Źródło:
Ping.cs
Źródło:
Ping.cs
Źródło:
Ping.cs

Asynchronicznie próbuje wysłać komunikat echa protokołu ICMP (Internet Control Message Protocol) z określonym buforem danych do określonego komputera i odbiera odpowiedni komunikat odpowiedzi echa ICMP z tego komputera. To przeciążenie umożliwia określenie wartości limitu czasu dla operacji i kontroli fragmentacji oraz wartości Time-to-Live pakietu 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)

Parametry

hostNameOrAddress
String

Element String identyfikujący komputer, który jest miejscem docelowym komunikatu echa ICMP. Wartość określona dla tego parametru może być nazwą hosta lub ciągiem reprezentującym adres IP.

timeout
Int32

Int32 Wartość określająca maksymalną liczbę milisekund (po wysłaniu wiadomości echa) w celu oczekiwania na komunikat odpowiedzi echa ICMP.

buffer
Byte[]

Tablica zawierająca Byte dane do wysłania z komunikatem echa ICMP i zwrócona w komunikacie odpowiedzi echa ICMP. Tablica nie może zawierać więcej niż 65 500 bajtów.

options
PingOptions

PingOptions Obiekt służący do kontrolowania fragmentacji i wartości time-to-Live dla pakietu komunikatów echa ICMP.

userToken
Object

Obiekt, który jest przekazywany do metody wywoływanej po zakończeniu operacji asynchronicznej.

Wyjątki

hostNameOrAddress jest null ciągiem pustym ("").

-lub-

buffer to null.

Parametr timeout ma wartość niższą niż zero.

Wywołanie metody SendAsync jest w toku.

Podczas wysyłania lub odbierania komunikatów ICMP został zgłoszony wyjątek. Zobacz wyjątek wewnętrzny, aby uzyskać dokładny wyjątek, który został zgłoszony.

hostNameOrAddress Nie można rozpoznać prawidłowego adresu IP.

Ten obiekt został usunięty.

Rozmiar buffer przekracza 65500 bajtów.

.NET 7 i nowsze wersje tylko w systemie Linux: proces jest nieuprzywilejowany i buffer nie jest pusty.

Przykłady

W poniższym przykładzie kodu pokazano, jak wywołać tę metodę.

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

Uwagi

Metoda SendAsync wysyła komunikat echo asynchronicznie i po zakończeniu operacji (pomyślnie lub bez powodzenia) zwraca stan do aplikacji. Wywołaj metodę SendAsync , gdy aplikacja nie może blokować. Każde wywołanie jest wykonywane w osobnym wątku, który jest automatycznie przydzielany z puli wątków. Po zakończeniu operacji asynchronicznej zgłaszane jest PingCompleted zdarzenie. Aplikacje używają delegata PingCompletedEventHandler , aby określić metodę, która jest wywoływana, gdy SendAsync zgłasza zdarzenie. Przed wywołaniem metody SendAsyncnależy dodać PingCompletedEventHandler delegata do zdarzenia . Metoda delegata odbiera PingCompletedEventArgs obiekt, który zawiera PingReply obiekt opisujący wynik SendAsync wywołania. Obiekt PingCompletedEventArgs dziedziczy UserState właściwość . Ta właściwość zawiera userToken obiekt przekazany do wywołania SendAsync .

Jeśli aplikacja powinna blokować podczas oczekiwania na odpowiedź, użyj Send metod . Te metody są synchroniczne.

Jeśli komunikat odpowiedzi echa ICMP nie zostanie odebrany w czasie określonym przez timeout parametr, echo ICMP zakończy się niepowodzeniem, a Status właściwość ma wartość TimedOut.

Uwaga

Podczas określania bardzo małych liczb dla timeoutpolecenia można odebrać odpowiedź ping, nawet jeśli timeout upłynął czas milisekund.

DontFragment Jeśli właściwość jest true i łączny rozmiar pakietu przekracza maksymalny rozmiar pakietu, który może być przesyłany przez jeden z węzłów routingu między komputerami lokalnymi i zdalnymi, żądanie echa ICMP kończy się niepowodzeniem. W takim przypadku parametr Status jest ustawiony na PacketTooBigwartość .

Ttl Użyj właściwości , aby określić maksymalną liczbę przypadków przekazywania komunikatu echa ICMP przed dotarciem do miejsca docelowego. Jeśli pakiet nie osiągnie miejsca docelowego po przesłaniu dalej określonej liczby razy, pakiet zostanie odrzucony, a żądanie echa ICMP zakończy się niepowodzeniem. W takim przypadku parametr Status jest ustawiony na TtlExpiredwartość .

Dotyczy

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

Źródło:
Ping.cs
Źródło:
Ping.cs
Źródło:
Ping.cs

Asynchronicznie próbuje wysłać komunikat echa protokołu ICMP (Internet Control Message Protocol) z określonym buforem danych do komputera, który ma określony IPAddresselement , i odbiera odpowiedni komunikat odpowiedzi echa ICMP z tego komputera. To przeciążenie umożliwia określenie wartości limitu czasu dla operacji i fragmentacji kontrolki oraz wartości Time-to-Live dla pakietu komunikatu echa 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)

Parametry

address
IPAddress

Element IPAddress identyfikujący komputer, który jest miejscem docelowym komunikatu echa ICMP.

timeout
Int32

Int32 Wartość określająca maksymalną liczbę milisekund (po wysłaniu wiadomości echa) w celu oczekiwania na komunikat odpowiedzi echa ICMP.

buffer
Byte[]

Tablica zawierająca Byte dane do wysłania z komunikatem echa ICMP i zwrócona w komunikacie odpowiedzi echa ICMP. Tablica nie może zawierać więcej niż 65 500 bajtów.

options
PingOptions

PingOptions Obiekt służący do kontrolowania fragmentacji i wartości time-to-Live dla pakietu komunikatów echa ICMP.

userToken
Object

Obiekt, który jest przekazywany do metody wywoływanej po zakończeniu operacji asynchronicznej.

Wyjątki

address lub buffer ma wartość null.

Parametr timeout ma wartość niższą niż zero.

Wywołanie metody SendAsync jest w toku.

Podczas wysyłania lub odbierania komunikatów ICMP został zgłoszony wyjątek. Zobacz wyjątek wewnętrzny, aby uzyskać dokładny wyjątek, który został zgłoszony.

address nie jest prawidłowym adresem IP.

Ten obiekt został usunięty.

Rozmiar buffer przekracza 65500 bajtów.

.NET 7 i nowsze wersje tylko w systemie Linux: proces jest nieuprzywilejowany i buffer nie jest pusty.

Przykłady

W poniższym przykładzie kodu pokazano, jak wywołać tę metodę. Aby zapoznać się z implementacją metody wywołania zwrotnego, zobacz sekcję SendAsync przykładową przeciążenia metody.

Poniższy przykład kodu wymaga następujących przestrzeni nazw:

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

Poniższy przykład kodu wysyła asynchronicznie komunikat echa ICMP.

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

Uwagi

Metoda SendAsync wysyła komunikat echo asynchronicznie i po zakończeniu operacji (pomyślnie lub bez powodzenia) zwraca stan do aplikacji. Wywołaj metodę SendAsync , gdy aplikacja nie może blokować. Każde wywołanie jest wykonywane w osobnym wątku, który jest automatycznie przydzielany z puli wątków. Po zakończeniu operacji asynchronicznej zgłaszane jest PingCompleted zdarzenie. Aplikacje używają delegata PingCompletedEventHandler , aby określić metodę, która jest wywoływana, gdy SendAsync zgłasza zdarzenie. Przed wywołaniem metody SendAsyncnależy dodać PingCompletedEventHandler delegata do zdarzenia . Metoda delegata odbiera PingCompletedEventArgs obiekt, który zawiera PingReply obiekt opisujący wynik SendAsync wywołania. Obiekt PingCompletedEventArgs dziedziczy UserState właściwość . Ta właściwość zawiera userToken obiekt przekazany do wywołania SendAsync .

Jeśli aplikacja blokuje oczekiwanie na odpowiedź, użyj Send metod . Te metody są synchroniczne.

Jeśli komunikat odpowiedzi echa ICMP nie zostanie odebrany w czasie określonym przez timeout parametr, echo ICMP zakończy się niepowodzeniem, a Status właściwość ma wartość TimedOut.

Uwaga

Podczas określania bardzo małych liczb dla timeoutpolecenia można odebrać odpowiedź ping, nawet jeśli timeout upłynął czas milisekund.

DontFragment Jeśli właściwość jest true i łączny rozmiar pakietu przekracza maksymalny rozmiar pakietu, który może być przesyłany przez jeden z węzłów routingu między komputerami lokalnymi i zdalnymi, żądanie echa ICMP kończy się niepowodzeniem. W takim przypadku parametr Status jest ustawiony na PacketTooBigwartość .

Ttl Użyj właściwości , aby określić maksymalną liczbę przypadków przekazywania komunikatu echa ICMP przed dotarciem do miejsca docelowego. Jeśli pakiet nie osiągnie miejsca docelowego po przesłaniu dalej określonej liczby razy, pakiet zostanie odrzucony, a żądanie echa ICMP zakończy się niepowodzeniem. W takim przypadku parametr Status jest ustawiony na TtlExpiredwartość .

Dotyczy

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

Źródło:
Ping.cs
Źródło:
Ping.cs
Źródło:
Ping.cs

Asynchronicznie próbuje wysłać komunikat echa protokołu ICMP (Internet Control Message Protocol) z określonym buforem danych do określonego komputera i odbiera odpowiedni komunikat odpowiedzi echa ICMP z tego komputera. To przeciążenie umożliwia określenie wartości limitu czasu dla operacji.

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)

Parametry

hostNameOrAddress
String

Element String identyfikujący komputer, który jest miejscem docelowym komunikatu echa ICMP. Wartość określona dla tego parametru może być nazwą hosta lub ciągiem reprezentującym adres IP.

timeout
Int32

Int32 Wartość określająca maksymalną liczbę milisekund (po wysłaniu wiadomości echa) w celu oczekiwania na komunikat odpowiedzi echa ICMP.

buffer
Byte[]

Tablica zawierająca Byte dane do wysłania z komunikatem echa ICMP i zwrócona w komunikacie odpowiedzi echa ICMP. Tablica nie może zawierać więcej niż 65 500 bajtów.

userToken
Object

Obiekt, który jest przekazywany do metody wywoływanej po zakończeniu operacji asynchronicznej.

Wyjątki

hostNameOrAddress jest null ciągiem pustym ("").

-lub-

buffer to null.

Parametr timeout ma wartość niższą niż zero.

Wywołanie metody SendAsync jest w toku.

Podczas wysyłania lub odbierania komunikatów ICMP został zgłoszony wyjątek. Zobacz wyjątek wewnętrzny, aby uzyskać dokładny wyjątek, który został zgłoszony.

hostNameOrAddress Nie można rozpoznać prawidłowego adresu IP.

Ten obiekt został usunięty.

Rozmiar buffer przekracza 65500 bajtów.

.NET 7 i nowsze wersje tylko w systemie Linux: proces jest nieuprzywilejowany i buffer nie jest pusty.

Przykłady

W poniższym przykładzie kodu pokazano, jak wywołać SendAsync przeciążenie, zobacz Ping omówienie klasy.

Uwagi

Metoda SendAsync wysyła komunikat echo asynchronicznie i po zakończeniu operacji (pomyślnie lub bez powodzenia) zwraca stan do aplikacji. Wywołaj metodę SendAsync , gdy aplikacja nie powinna blokować. Każde wywołanie jest wykonywane w osobnym wątku, który jest automatycznie przydzielany z puli wątków. Po zakończeniu operacji asynchronicznej zgłaszane jest PingCompleted zdarzenie. Aplikacje używają delegata PingCompletedEventHandler , aby określić metodę, która jest wywoływana, gdy SendAsync zgłasza zdarzenie. Przed wywołaniem metody SendAsyncnależy dodać PingCompletedEventHandler delegata do zdarzenia . Metoda delegata odbiera PingCompletedEventArgs obiekt zawierający PingReply obiekt opisujący wynik SendAsync wywołania. Obiekt PingCompletedEventArgs dziedziczy UserState właściwość . Ta właściwość zawiera userToken obiekt przekazany do wywołania SendAsync .

Jeśli aplikacja powinna blokować podczas oczekiwania na odpowiedź, użyj Send metod . Te metody są synchroniczne.

Jeśli komunikat odpowiedzi echa ICMP nie zostanie odebrany w czasie określonym przez timeout parametr, echo ICMP zakończy się niepowodzeniem, a Status właściwość ma wartość TimedOut.

Uwaga

Podczas określania bardzo małych liczb dla timeoutpolecenia można odebrać odpowiedź ping, nawet jeśli timeout upłynął czas milisekund.

To przeciążenie używa domyślnych ustawień fragmentacji pakietów i przekazywania pakietów. Pakiet zawierający komunikat echa ICMP może zostać pofragmentowany podczas przesyłania, jeśli całkowity rozmiar pakietu przekracza maksymalny rozmiar pakietu, który może być przesyłany przez jeden z węzłów routingu między komputerami lokalnymi i zdalnymi. Aby zapobiec fragmentacji, użyj jednej z SendAsync metod, które pobiera options parametr i ustaw DontFragment właściwość na truewartość . Gdy DontFragment wartość jest true i łączny rozmiar pakietu przekracza maksymalny rozmiar pakietu, który może być przesyłany przez jeden z węzłów routingu między komputerami lokalnymi i zdalnymi, żądanie echa ICMP kończy się niepowodzeniem. W takim przypadku parametr Status jest ustawiony na PacketTooBigwartość . Fragmenty pakietu lub pakietu (jeśli zostały pofragmentowane) mogą być przekazywane przez węzły routingu 128 razy przed odrzuceniem. Aby zmienić to ustawienie, użyj SendAsync przeciążenia, które przyjmuje options parametr i ustaw Ttl właściwość na żądaną wartość. Jeśli pakiet nie osiągnie miejsca docelowego po przesłaniu dalej określonej liczby razy, pakiet zostanie odrzucony, a żądanie echa ICMP zakończy się niepowodzeniem. W takim przypadku parametr Status jest ustawiony na TtlExpiredwartość .

Dotyczy

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

Źródło:
Ping.cs
Źródło:
Ping.cs
Źródło:
Ping.cs

Asynchronicznie próbuje wysłać komunikat echa protokołu ICMP (Internet Control Message Protocol) z określonym buforem danych do komputera, który ma określony IPAddresselement , i odbiera odpowiedni komunikat odpowiedzi echa ICMP z tego komputera. To przeciążenie umożliwia określenie wartości limitu czasu dla operacji.

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)

Parametry

address
IPAddress

Element IPAddress identyfikujący komputer, który jest miejscem docelowym komunikatu echa ICMP.

timeout
Int32

Int32 Wartość określająca maksymalną liczbę milisekund (po wysłaniu wiadomości echa) w celu oczekiwania na komunikat odpowiedzi echa ICMP.

buffer
Byte[]

Tablica zawierająca Byte dane do wysłania z komunikatem echa ICMP i zwrócona w komunikacie odpowiedzi echa ICMP. Tablica nie może zawierać więcej niż 65 500 bajtów.

userToken
Object

Obiekt, który jest przekazywany do metody wywoływanej po zakończeniu operacji asynchronicznej.

Wyjątki

address lub buffer ma wartość null.

Parametr timeout ma wartość niższą niż zero.

Wywołanie metody SendAsync jest w toku.

Podczas wysyłania lub odbierania komunikatów ICMP został zgłoszony wyjątek. Zobacz wyjątek wewnętrzny, aby uzyskać dokładny wyjątek, który został zgłoszony.

address nie jest prawidłowym adresem IP.

Ten obiekt został usunięty.

Rozmiar buffer przekracza 65500 bajtów.

.NET 7 i nowsze wersje tylko w systemie Linux: proces jest nieuprzywilejowany i buffer nie jest pusty.

Przykłady

Aby zapoznać się z przykładem kodu, który demonstruje wywoływanie SendAsync przeciążenia, zobacz Ping omówienie klasy.

Uwagi

Ta metoda wysyła komunikat echa asynchronicznie, a gdy operacja zakończy się (pomyślnie lub bez powodzenia), zwraca stan aplikacji. Wywołaj metodę SendAsync , gdy aplikacja nie powinna blokować. Każde wywołanie jest wykonywane w osobnym wątku, który jest automatycznie przydzielany z puli wątków. Po zakończeniu operacji asynchronicznej zgłaszane jest PingCompleted zdarzenie. Aby określić metodę wywoływaną podczas SendAsync wywoływania zdarzenia, należy dodać PingCompletedEventHandler delegata do zdarzenia przed wywołaniem metody SendAsync. Metoda delegata odbiera PingCompletedEventArgs obiekt, który zawiera PingReply obiekt opisujący wynik SendAsync wywołania. Obiekt PingCompletedEventArgs dziedziczy UserState właściwość . Ta właściwość zawiera userToken obiekt przekazany do wywołania SendAsync .

Uwaga

Jeśli aplikacja blokuje oczekiwanie na odpowiedź, użyj Send metod . Te metody są synchroniczne.

Jeśli komunikat odpowiedzi echa ICMP nie zostanie odebrany w czasie określonym przez timeout parametr, echo ICMP zakończy się niepowodzeniem, a Status właściwość ma wartość TimedOut.

Uwaga

Podczas określania bardzo małych liczb dla timeoutpolecenia można odebrać odpowiedź ping, nawet jeśli timeout upłynął czas milisekund.

To przeciążenie używa domyślnych ustawień fragmentacji pakietów i przekazywania pakietów. Pakiet zawierający komunikat echa ICMP może zostać pofragmentowany podczas przesyłania, jeśli całkowity rozmiar pakietu przekracza maksymalny rozmiar pakietu, który może być przesyłany przez jeden z węzłów routingu między komputerami lokalnymi i zdalnymi. Aby zapobiec fragmentacji, użyj jednej z SendAsync metod, które pobiera options parametr i ustaw DontFragment właściwość na truewartość . Gdy DontFragment wartość jest true i łączny rozmiar pakietu przekracza maksymalny rozmiar pakietu, który może być przesyłany przez jeden z węzłów routingu między komputerami lokalnymi i zdalnymi, żądanie echa ICMP kończy się niepowodzeniem. W takim przypadku parametr Status jest ustawiony na PacketTooBigwartość . Fragmenty pakietu lub pakietu (jeśli zostały pofragmentowane) mogą być przekazywane przez węzły routingu 128 razy przed odrzuceniem. Aby zmienić to ustawienie, użyj SendAsync przeciążenia, które przyjmuje options parametr i ustaw Ttl właściwość na żądaną wartość. Jeśli pakiet nie osiągnie miejsca docelowego po przesłaniu dalej określonej liczby razy, pakiet zostanie odrzucony, a żądanie echa ICMP zakończy się niepowodzeniem. W takim przypadku parametr Status jest ustawiony na TtlExpiredwartość .

Dotyczy

SendAsync(IPAddress, Int32, Object)

Źródło:
Ping.cs
Źródło:
Ping.cs
Źródło:
Ping.cs

Asynchronicznie próbuje wysłać komunikat echo protokołu ICMP (Internet Control Message Protocol) do komputera, który ma określony IPAddresselement , i odbiera odpowiedni komunikat odpowiedzi echa ICMP z tego komputera. To przeciążenie umożliwia określenie wartości limitu czasu dla operacji.

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)

Parametry

address
IPAddress

Element IPAddress identyfikujący komputer, który jest miejscem docelowym komunikatu echa ICMP.

timeout
Int32

Int32 Wartość określająca maksymalną liczbę milisekund (po wysłaniu komunikatu echa) na oczekiwanie na komunikat odpowiedzi echa ICMP.

userToken
Object

Obiekt przekazywany do metody wywoływanej po zakończeniu operacji asynchronicznej.

Wyjątki

address to null.

Parametr timeout ma wartość niższą niż zero.

Podczas wysyłania lub odbierania komunikatów ICMP został zgłoszony wyjątek. Zobacz wyjątek wewnętrzny, aby uzyskać dokładny wyjątek, który został zgłoszony.

address nie jest prawidłowym adresem IP.

Ten obiekt został usunięty.

Przykłady

Aby zapoznać się z przykładem kodu, który demonstruje wywoływanie SendAsync przeciążenia, zobacz Ping omówienie klasy.

Uwagi

Metoda SendAsync wysyła komunikat echo asynchronicznie i po zakończeniu operacji (pomyślnie lub bez powodzenia) zwraca stan aplikacji. Wywołaj metodę SendAsync , gdy aplikacja nie powinna blokować. Każde wywołanie jest wykonywane w osobnym wątku, który jest automatycznie przydzielany z puli wątków. Po zakończeniu operacji asynchronicznej zgłasza PingCompleted ono zdarzenie. Aplikacje używają delegata, aby określić metodę PingCompletedEventHandler wywoływaną podczas SendAsync zgłaszania zdarzenia. Przed wywołaniem polecenia SendAsyncnależy dodać delegata PingCompletedEventHandler do zdarzenia . Metoda delegata odbiera PingCompletedEventArgs obiekt zawierający obiekt opisujący PingReply wynik wywołania SendAsync . Obiekt PingCompletedEventArgs dziedziczy UserState właściwość. Ta właściwość zawiera userToken obiekt przekazany do wywołania SendAsync .

Jeśli aplikacja powinna zablokować oczekiwanie na odpowiedź, użyj Send metod , te metody są synchroniczne.

Jeśli komunikat odpowiedzi echa ICMP nie zostanie odebrany w czasie określonym przez timeout parametr, echo ICMP zakończy się niepowodzeniem, a Status właściwość jest ustawiona na TimedOut.

Uwaga

Podczas określania bardzo małych liczb dla timeoutpolecenia można odebrać odpowiedź ping, nawet jeśli timeout upłynął czas milisekund.

To przeciążenie używa domyślnych ustawień fragmentacji pakietów i przekazywania pakietów. Pakiet zawierający komunikat echa ICMP można fragmentować w trakcie przesyłania, jeśli łączny rozmiar pakietu przekracza maksymalny rozmiar pakietu, który może być przesyłany przez jeden z węzłów routingu między komputerami lokalnymi i zdalnymi. Aby zapobiec fragmentacji, użyj jednej z SendAsync metod, która przyjmuje options parametr i ustaw DontFragment właściwość na true. Gdy DontFragment jest i true łączny rozmiar pakietu przekracza maksymalny rozmiar pakietu, który może być przesyłany przez jeden z węzłów routingu między komputerami lokalnymi i zdalnymi, żądanie echa ICMP kończy się niepowodzeniem. W takim przypadku Status parametr jest ustawiony na PacketTooBigwartość . Pakiety lub fragmenty pakietów (jeśli fragmentowane) mogą być przekazywane przez węzły routingu 128 razy przed odrzuceniem. Aby zmienić to ustawienie, użyj SendAsync przeciążenia, które przyjmuje options parametr i ustaw Ttl właściwość na żądaną wartość. Jeśli pakiet nie dociera do miejsca docelowego po przesłaniu dalej określonej liczby razy, pakiet zostanie odrzucony, a żądanie echa ICMP zakończy się niepowodzeniem. W takim przypadku Status parametr jest ustawiony na TtlExpiredwartość .

Dotyczy

SendAsync(String, Object)

Źródło:
Ping.cs
Źródło:
Ping.cs
Źródło:
Ping.cs

Asynchronicznie próbuje wysłać komunikat echa protokołu ICMP (Internet Control Message Protocol) do określonego komputera i odbiera odpowiedni komunikat odpowiedzi echa ICMP z tego komputera.

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)

Parametry

hostNameOrAddress
String

Element String identyfikujący komputer, który jest miejscem docelowym komunikatu echa ICMP. Wartość określona dla tego parametru może być nazwą hosta lub ciągiem reprezentującym adres IP.

userToken
Object

Obiekt przekazywany do metody wywoływanej po zakończeniu operacji asynchronicznej.

Wyjątki

hostNameOrAddress jest ciągiem null pustym ("").

Podczas wysyłania lub odbierania komunikatów ICMP został zgłoszony wyjątek. Zobacz wyjątek wewnętrzny, aby uzyskać dokładny wyjątek, który został zgłoszony.

hostNameOrAddress nie można rozpoznać prawidłowego adresu IP.

Ten obiekt został usunięty.

Przykłady

Aby zapoznać się z przykładem kodu, który demonstruje wywołanie SendAsync metody, zobacz Ping omówienie klasy.

Uwagi

Metoda SendAsync wysyła komunikat echo asynchronicznie i po zakończeniu operacji (pomyślnie lub bez powodzenia) zwraca stan aplikacji. Wywołaj metodę SendAsync , gdy aplikacja nie powinna blokować. Każde wywołanie tej metody jest wykonywane w osobnym wątku, który jest automatycznie przydzielany z puli wątków. Po zakończeniu operacji asynchronicznej zgłasza PingCompleted ono zdarzenie. Aby określić metodę wywoływaną podczas SendAsync wywoływania zdarzenia, należy dodać delegata PingCompletedEventHandler do zdarzenia przed wywołaniem metody SendAsync. Metoda delegata odbiera PingCompletedEventArgs obiekt zawierający obiekt opisujący PingReply wynik wywołania SendAsync . Obiekt PingCompletedEventArgs dziedziczy UserState właściwość. Ta właściwość zawiera userToken obiekt przekazany do wywołania SendAsync .

Uwaga

Jeśli aplikacja powinna zablokować oczekiwanie na odpowiedź, użyj Send metod , te metody są synchroniczne.

Ta metoda wysyła bufor danych 32 Byte z komunikatem echa ICMP. Metoda czeka pięć sekund na komunikat odpowiedzi echa ICMP. Jeśli w tym czasie metoda zwróci odpowiedź, a właściwość jest ustawiona Status na TimedOutwartość .

To przeciążenie używa domyślnych ustawień fragmentacji pakietów i przekazywania pakietów. Pakiet zawierający komunikat echa ICMP można fragmentować w trakcie przesyłania, jeśli łączny rozmiar pakietu przekracza maksymalny rozmiar pakietu, który może być przesyłany przez jeden z węzłów routingu między komputerami lokalnymi i zdalnymi. Aby zapobiec fragmentacji, użyj jednej z SendAsync metod, która przyjmuje options parametr i ustaw DontFragment właściwość na true. Gdy DontFragment jest i true łączny rozmiar pakietu przekracza maksymalny rozmiar pakietu, który może być przesyłany przez jeden z węzłów routingu między komputerami lokalnymi i zdalnymi, żądanie echa ICMP kończy się niepowodzeniem. W takim przypadku Status parametr jest ustawiony na PacketTooBigwartość .

Pakiety lub fragmenty pakietów można przekazywać przez węzły routingu 128 razy przed odrzuceniem. Aby zmienić to ustawienie, użyj SendAsync przeciążenia, które przyjmuje options parametr i ustaw Ttl właściwość na żądaną wartość. Jeśli pakiet nie dociera do miejsca docelowego po przesłaniu dalej określonej liczby razy, pakiet zostanie odrzucony, a żądanie echa ICMP zakończy się niepowodzeniem. W takim przypadku Status parametr jest ustawiony na TtlExpiredwartość .

Dotyczy

SendAsync(IPAddress, Object)

Źródło:
Ping.cs
Źródło:
Ping.cs
Źródło:
Ping.cs

Asynchronicznie próbuje wysłać komunikat echo protokołu ICMP (Internet Control Message Protocol) do komputera, który ma określony IPAddresselement , i odbiera odpowiedni komunikat odpowiedzi echa ICMP z tego komputera.

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)

Parametry

address
IPAddress

Element IPAddress identyfikujący komputer, który jest miejscem docelowym komunikatu echa ICMP.

userToken
Object

Obiekt przekazywany do metody wywoływanej po zakończeniu operacji asynchronicznej.

Wyjątki

address to null.

Wywołanie SendAsync metody jest w toku.

Podczas wysyłania lub odbierania komunikatów ICMP został zgłoszony wyjątek. Zobacz wyjątek wewnętrzny, aby uzyskać dokładny wyjątek, który został zgłoszony.

address nie jest prawidłowym adresem IP.

Ten obiekt został usunięty.

Przykłady

Aby zapoznać się z przykładem kodu, który demonstruje wywoływanie SendAsync metody, zobacz Ping omówienie klasy.

Uwagi

Metoda SendAsync wysyła komunikat echo asynchronicznie i po zakończeniu operacji (pomyślnie lub bez powodzenia) zwraca stan aplikacji. Wywołaj metodę SendAsync , gdy aplikacja nie powinna blokować. Każde wywołanie tej metody jest wykonywane w osobnym wątku, który jest automatycznie przydzielany z puli wątków. Po zakończeniu operacji asynchronicznej zgłasza PingCompleted ono zdarzenie. Aby określić metodę wywoływaną podczas SendAsync wywoływania zdarzenia, należy dodać delegata PingCompletedEventHandler do zdarzenia przed wywołaniem metody SendAsync. Metoda delegata odbiera PingCompletedEventArgs obiekt zawierający obiekt opisujący PingReply wynik wywołania SendAsync . Obiekt PingCompletedEventArgs dziedziczy UserState właściwość. Ta właściwość zawiera userToken obiekt przekazany do wywołania SendAsync .

Uwaga

Jeśli aplikacja powinna zablokować oczekiwanie na odpowiedź, użyj jednej z Send metod. Te metody są synchroniczne.

Ta metoda wysyła bufor danych 32 Byte z komunikatem echa ICMP. Metoda czeka pięć sekund na komunikat odpowiedzi echa ICMP. Jeśli nie otrzyma odpowiedzi w tym czasie, metoda zwraca wartość , a właściwość jest ustawiona Status na TimedOutwartość .

To przeciążenie używa domyślnych ustawień fragmentacji pakietów i przekazywania pakietów. Pakiet zawierający komunikat echa ICMP można fragmentować w trakcie przesyłania, jeśli łączny rozmiar pakietu przekracza maksymalny rozmiar pakietu, który może być przesyłany przez jeden z węzłów routingu między komputerami lokalnymi i zdalnymi. Aby zapobiec fragmentacji, użyj jednej z SendAsync metod, która przyjmuje options parametr i ustaw DontFragment właściwość na true. Gdy DontFragment jest i true łączny rozmiar pakietu przekracza maksymalny rozmiar pakietu, który może być przesyłany przez jeden z węzłów routingu między komputerami lokalnymi i zdalnymi, żądanie echa ICMP kończy się niepowodzeniem. W takim przypadku Status parametr jest ustawiony na PacketTooBigwartość .

Pakiety lub fragmenty pakietów można przekazywać przez węzły routingu 128 razy przed odrzuceniem. Aby zmienić to ustawienie, użyj SendAsync przeciążenia, które przyjmuje options parametr i ustaw Ttl właściwość na żądaną wartość. Jeśli pakiet nie dociera do miejsca docelowego po przesłaniu dalej określonej liczby razy, pakiet zostanie odrzucony, a żądanie echa ICMP zakończy się niepowodzeniem. W takim przypadku Status parametr jest ustawiony na TtlExpiredwartość .

Dotyczy

SendAsync(String, Int32, Object)

Źródło:
Ping.cs
Źródło:
Ping.cs
Źródło:
Ping.cs

Asynchronicznie próbuje wysłać komunikat echa protokołu ICMP (Internet Control Message Protocol) do określonego komputera i odbiera odpowiedni komunikat odpowiedzi echa ICMP z tego komputera. To przeciążenie umożliwia określenie wartości limitu czasu dla operacji.

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)

Parametry

hostNameOrAddress
String

Element String identyfikujący komputer, który jest miejscem docelowym komunikatu echa ICMP. Wartość określona dla tego parametru może być nazwą hosta lub ciągiem reprezentującym adres IP.

timeout
Int32

Int32 Wartość określająca maksymalną liczbę milisekund (po wysłaniu wiadomości echa) w celu oczekiwania na komunikat odpowiedzi echa ICMP.

userToken
Object

Obiekt, który jest przekazywany do metody wywoływanej po zakończeniu operacji asynchronicznej.

Wyjątki

hostNameOrAddress jest ciągiem null pustym ("").

Parametr timeout ma wartość niższą niż zero.

Wywołanie metody jest SendAsync w toku.

Podczas wysyłania lub odbierania komunikatów ICMP został zgłoszony wyjątek. Zobacz wyjątek wewnętrzny, aby uzyskać dokładny wyjątek, który został zgłoszony.

hostNameOrAddress nie można rozpoznać prawidłowego adresu IP.

Ten obiekt został usunięty.

Przykłady

Aby zapoznać się z przykładem kodu, który demonstruje wywołanie SendAsync metody, zobacz Ping omówienie klasy.

Uwagi

Metoda SendAsync wysyła komunikat echo asynchronicznie i po zakończeniu operacji (pomyślnie lub bez powodzenia) zwraca stan do aplikacji. Wywołaj metodę SendAsync , gdy aplikacja nie powinna blokować. Każde wywołanie jest wykonywane w osobnym wątku, który jest automatycznie przydzielany z puli wątków. Po zakończeniu operacji asynchronicznej zgłaszane jest PingCompleted zdarzenie. Aplikacje używają delegata PingCompletedEventHandler , aby określić metodę, która jest wywoływana, gdy SendAsync zgłasza zdarzenie. Przed wywołaniem metody SendAsyncnależy dodać PingCompletedEventHandler delegata do zdarzenia . Metoda delegata odbiera PingCompletedEventArgs obiekt, który zawiera PingReply obiekt opisujący wynik SendAsync wywołania. Obiekt PingCompletedEventArgs dziedziczy UserState właściwość . Ta właściwość zawiera userToken obiekt przekazany do wywołania SendAsync .

Jeśli aplikacja powinna blokować podczas oczekiwania na odpowiedź, użyj Send metod . Te metody są synchroniczne.

Jeśli komunikat odpowiedzi echa ICMP nie zostanie odebrany w czasie określonym przez timeout parametr, echo ICMP zakończy się niepowodzeniem, a Status właściwość ma wartość TimedOut.

Uwaga

Podczas określania bardzo małych liczb dla timeoutpolecenia można odebrać odpowiedź ping, nawet jeśli timeout upłynął czas milisekund.

To przeciążenie używa domyślnych ustawień fragmentacji pakietów i przekazywania pakietów. Pakiet zawierający komunikat echa ICMP może zostać pofragmentowany podczas przesyłania, jeśli całkowity rozmiar pakietu przekracza maksymalny rozmiar pakietu, który może być przesyłany przez jeden z węzłów routingu między komputerami lokalnymi i zdalnymi. Aby zapobiec fragmentacji, użyj jednej z SendAsync metod, które pobiera options parametr i ustaw DontFragment właściwość na truewartość . Gdy DontFragment wartość jest true i łączny rozmiar pakietu przekracza maksymalny rozmiar pakietu, który może być przesyłany przez jeden z węzłów routingu między komputerami lokalnymi i zdalnymi, żądanie echa ICMP kończy się niepowodzeniem. W takim przypadku parametr Status jest ustawiony na PacketTooBigwartość . Fragmenty pakietu lub pakietu (jeśli zostały pofragmentowane) mogą być przekazywane przez węzły routingu 128 razy przed odrzuceniem. Aby zmienić to ustawienie, użyj SendAsync przeciążenia, które przyjmuje options parametr i ustaw Ttl właściwość na żądaną wartość. Jeśli pakiet nie osiągnie miejsca docelowego po przesłaniu dalej określonej liczby razy, pakiet zostanie odrzucony, a żądanie echa ICMP zakończy się niepowodzeniem. W takim przypadku parametr Status jest ustawiony na TtlExpiredwartość .

Dotyczy