Ping.SendAsync 方法

定義

嘗試以非同步方式將網際網路控制訊息通訊協定 (ICMP) 回應訊息傳送給電腦,並從該電腦接收對應的 ICMP 回應回覆訊息。

多載

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

嘗試以非同步方式將網際網路控制訊息通訊協定 (ICMP) 回應訊息,連同指定的資料緩衝區一起傳送給指定的電腦,並從該電腦接收對應的 ICMP 回應的回覆訊息。 這個多載可讓您指定作業的逾時值,以及控制 ICMP 封包的分散和存留時間值。

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

嘗試以非同步方式將網際網路控制訊息通訊協定 (ICMP) 回應訊息,連同指定的資料緩衝區一起傳送給具有指定 IPAddress 的電腦,並從該電腦接收對應的 ICMP 回應的回覆訊息。 這個多載可以讓您指定作業的逾時值,以及控制 ICMP 回應訊息封包的分散和存留時間值。

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

嘗試以非同步方式將網際網路控制訊息通訊協定 (ICMP) 回應訊息,連同指定的資料緩衝區一起傳送給指定的電腦,並從該電腦接收對應的 ICMP 回應的回覆訊息。 這個多載可以讓您為作業指定逾時值。

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

嘗試以非同步方式將網際網路控制訊息通訊協定 (ICMP) 回應訊息,連同指定的資料緩衝區一起傳送給具有指定 IPAddress 的電腦,並從該電腦接收對應的 ICMP 回應的回覆訊息。 這個多載可以讓您為作業指定逾時值。

SendAsync(IPAddress, Int32, Object)

嘗試以非同步方式將網際網路控制訊息通訊協定 (ICMP) 回應訊息,傳送給具有指定之 IPAddress 的電腦,並從該電腦接收對應的 ICMP 回應回覆訊息。 這個多載可以讓您為作業指定逾時值。

SendAsync(String, Object)

嘗試以非同步方式將網際網路控制訊息通訊協定 (ICMP) 回應訊息傳送給指定的電腦,並從該電腦接收對應的 ICMP 回應回覆訊息。

SendAsync(IPAddress, Object)

嘗試以非同步方式將網際網路控制訊息通訊協定 (ICMP) 回應訊息,傳送給具有指定之 IPAddress 的電腦,並從該電腦接收對應的 ICMP 回應回覆訊息。

SendAsync(String, Int32, Object)

嘗試以非同步方式將網際網路控制訊息通訊協定 (ICMP) 回應訊息傳送給指定的電腦,並從該電腦接收對應的 ICMP 回應回覆訊息。 這個多載可以讓您為作業指定逾時值。

備註

這些方法不會造成應用程式的主要執行緒遭到封鎖。 如果您想要在等候 ICMP 回應回復訊息時封鎖,請使用 Send 方法。

注意

任何 SendAsync 方法所傳回的 IP 位址都可能源自惡意遠端電腦。 請勿使用此連線到遠端電腦。 使用 DNS 來判斷您要連線之電腦的 IP 位址。

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

來源:
Ping.cs
來源:
Ping.cs
來源:
Ping.cs

嘗試以非同步方式將網際網路控制訊息通訊協定 (ICMP) 回應訊息,連同指定的資料緩衝區一起傳送給指定的電腦,並從該電腦接收對應的 ICMP 回應的回覆訊息。 這個多載可讓您指定作業的逾時值,以及控制 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)

參數

hostNameOrAddress
String

String,識別 ICMP 回應訊息的目標電腦。 指定給這個參數的值可以是主機名稱或 IP 位址的字串表示。

timeout
Int32

Int32 值,指定等候 ICMP 回應回覆訊息的最大毫秒數 (在傳送回應訊息之後)。 

buffer
Byte[]

Byte 陣列,包含要與 ICMP 回應訊息一同傳送以及要在 ICMP 回應回覆訊息中傳回的資料。 陣列的位元組不可以超過 65,500 以上。

options
PingOptions

PingOptions 物件,用來控制 ICMP 回應訊息封包的分散和存留時間值。

userToken
Object

非同步作業完成時,傳遞至所叫用方法的物件。

例外狀況

hostNameOrAddressnull 或空字串 ("")。

-或-

buffernull

timeout 小於零。

傳送或接收 ICMP 訊息時發生例外狀況。 查看被擲回之例外狀況的內部真正例外狀況。

hostNameOrAddress 無法解析成有效的 IP 位址。

這個物件已經過處置。

buffer 的大小超過 65500 個位元組。

僅限 Linux 上的 .NET 7 和更新版本:此程式為非特殊許可權,且 buffer 不是空的。

範例

下列程式碼範例示範如何呼叫這個方法。

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

備註

方法會 SendAsync 以非同步方式傳送 Echo 訊息,當作業順利或失敗 () 時,會將狀態傳回至您的應用程式。 當您的應用程式不得封鎖時, SendAsync 請呼叫 方法。 每個呼叫都會在從執行緒集區自動設定的個別執行緒中執行。 非同步作業完成時,會引發 PingCompleted 事件。 應用程式會使用 PingCompletedEventHandler 委派來指定引發事件時 SendAsync 呼叫的方法。 您必須先將 PingCompletedEventHandler 委派新增至 事件,才能呼叫 SendAsync 。 委派的 方法會收到 PingCompletedEventArgs 物件,其中包含 PingReply 描述呼叫結果 SendAsync 的 物件。 物件 PingCompletedEventArgsUserState 繼承 屬性。 這個屬性包含 userToken 傳遞至呼叫的物件 SendAsync

如果您的應用程式應該在等候回復時封鎖,請使用 Send 方法;這些方法是同步的。

如果在 參數指定的 timeout 時間內未收到 ICMP 回應回復訊息,ICMP 回應會失敗,而且 Status 屬性會設定為 TimedOut

注意

針對 指定非常小的數位 timeout 時,即使經過毫秒,仍可接收 timeout Ping 回復。

DontFragment如果 屬性為 true ,且封包大小總計超過本機和遠端電腦之間其中一個路由節點可傳輸的封包大小上限,ICMP 回應要求就會失敗。 發生這種情況時,會將 Status 設定為 PacketTooBig

Ttl使用 屬性來指定 ICMP 回顯訊息在到達目的地之前可轉送的最大次數。 如果封包在轉送指定的次數之後未到達其目的地,則會捨棄封包,而且 ICMP 回應要求會失敗。 發生這種情況時,會將 Status 設定為 TtlExpired

適用於

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

來源:
Ping.cs
來源:
Ping.cs
來源:
Ping.cs

嘗試以非同步方式將網際網路控制訊息通訊協定 (ICMP) 回應訊息,連同指定的資料緩衝區一起傳送給具有指定 IPAddress 的電腦,並從該電腦接收對應的 ICMP 回應的回覆訊息。 這個多載可以讓您指定作業的逾時值,以及控制 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)

參數

address
IPAddress

IPAddress,識別 ICMP 回應訊息的目標電腦。

timeout
Int32

Int32 值,指定等候 ICMP 回應回覆訊息的最大毫秒數 (在傳送回應訊息之後)。 

buffer
Byte[]

Byte 陣列,包含要與 ICMP 回應訊息一同傳送以及要在 ICMP 回應回覆訊息中傳回的資料。 陣列的位元組不可以超過 65,500 以上。

options
PingOptions

PingOptions 物件,用來控制 ICMP 回應訊息封包的分散和存留時間值。

userToken
Object

非同步作業完成時,傳遞至所叫用方法的物件。

例外狀況

addressbuffernull

timeout 小於零。

傳送或接收 ICMP 訊息時發生例外狀況。 查看被擲回之例外狀況的內部真正例外狀況。

address 不是有效的 IP 位址。

這個物件已經過處置。

buffer 的大小超過 65500 個位元組。

僅限 Linux 上的 .NET 7 和更新版本:此程式為非特殊許可權,且 buffer 不是空的。

範例

下列程式碼範例示範如何呼叫這個方法。 如需回呼方法的實作,請參閱 SendAsync 方法多載範例一節。

下列程式碼範例需要下列命名空間:

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

下列程式碼範例會以非同步方式傳送 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.");
}

備註

方法會 SendAsync 以非同步方式傳送 Echo 訊息,當作業順利或失敗 () 時,會將狀態傳回至您的應用程式。 當您的應用程式不得封鎖時, SendAsync 請呼叫 方法。 每個呼叫都會在從執行緒集區自動設定的個別執行緒中執行。 非同步作業完成時,會引發 PingCompleted 事件。 應用程式會使用 PingCompletedEventHandler 委派來指定引發事件時 SendAsync 呼叫的方法。 您必須先將 PingCompletedEventHandler 委派新增至 事件,才能呼叫 SendAsync 。 委派的 方法會收到 PingCompletedEventArgs 物件,其中包含 PingReply 描述呼叫結果 SendAsync 的 物件。 物件 PingCompletedEventArgsUserState 繼承 屬性。 這個屬性包含 userToken 傳遞至呼叫的物件 SendAsync

如果您的應用程式在等候回復時封鎖,請使用 Send 方法;這些方法是同步的。

如果 ICMP 回應回復訊息未在 參數指定的 timeout 時間內收到,ICMP 回應就會失敗,而且 Status 屬性會設定為 TimedOut

注意

針對 指定非常小的數位 timeout 時,即使 timeout 經過毫秒,仍可接收 Ping 回復。

如果 屬性是 true 且封 DontFragment 包大小總計超過本機和遠端電腦之間其中一個路由節點可以傳輸的最大封包大小,ICMP 回應要求就會失敗。 發生這種情況時,會 Status 設定為 PacketTooBig

Ttl使用 屬性來指定 ICMP 回應訊息在到達目的地之前可以轉送的次數上限。 如果封包在轉送指定的次數之後未到達其目的地,則會捨棄封包,而且 ICMP 回應要求會失敗。 發生這種情況時,會 Status 設定為 TtlExpired

適用於

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

來源:
Ping.cs
來源:
Ping.cs
來源:
Ping.cs

嘗試以非同步方式將網際網路控制訊息通訊協定 (ICMP) 回應訊息,連同指定的資料緩衝區一起傳送給指定的電腦,並從該電腦接收對應的 ICMP 回應的回覆訊息。 這個多載可以讓您為作業指定逾時值。

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)

參數

hostNameOrAddress
String

String,識別 ICMP 回應訊息的目標電腦。 指定給這個參數的值可以是主機名稱或 IP 位址的字串表示。

timeout
Int32

Int32 值,指定等候 ICMP 回應回覆訊息的最大毫秒數 (在傳送回應訊息之後)。 

buffer
Byte[]

Byte 陣列,包含要與 ICMP 回應訊息一同傳送以及要在 ICMP 回應回覆訊息中傳回的資料。 陣列的位元組不可以超過 65,500 以上。

userToken
Object

非同步作業完成時,傳遞至所叫用方法的物件。

例外狀況

hostNameOrAddressnull 或空字串 ("")。

-或-

buffernull

timeout 小於零。

傳送或接收 ICMP 訊息時發生例外狀況。 查看被擲回之例外狀況的內部真正例外狀況。

hostNameOrAddress 無法解析成有效的 IP 位址。

這個物件已經過處置。

buffer 的大小超過 65500 個位元組。

僅限 Linux 上的 .NET 7 和更新版本:此程式為非特殊許可權,且 buffer 不是空的。

範例

下列程式碼範例示範如何呼叫 SendAsync 多載,請參閱 Ping 類別概觀。

備註

方法會 SendAsync 以非同步方式傳送 Echo 訊息,當作業順利或失敗 () 時,會將狀態傳回至您的應用程式。 SendAsync當應用程式不應該封鎖時,請呼叫 方法。 每個呼叫都會在從執行緒集區自動設定的個別執行緒中執行。 非同步作業完成時,它會引發 PingCompleted 事件。 應用程式會使用 PingCompletedEventHandler 委派來指定引發事件時 SendAsync 所呼叫的方法。 您必須在呼叫 SendAsync 之前,將委派新增 PingCompletedEventHandler 至 事件。 委派的 方法會 PingCompletedEventArgs 接收 物件,其中包含 PingReply 描述呼叫結果的 SendAsync 物件。 物件 PingCompletedEventArgsUserState 繼承 屬性。 這個屬性包含 userToken 撥入電話的物件 SendAsync

如果您的應用程式在等候回復時應該封鎖,請使用 Send 方法;這些方法是同步的。

如果 ICMP 回應回復訊息未在 參數指定的 timeout 時間內收到,ICMP 回應就會失敗,而且 Status 屬性會設定為 TimedOut

注意

針對 指定非常小的數位 timeout 時,即使 timeout 經過毫秒,仍可接收 Ping 回復。

此多載會使用封包片段和封包轉送的預設設定。 如果封包大小總計超過本機和遠端電腦之間的其中一個路由節點可以傳輸的封包大小上限,則包含 ICMP 回應訊息的封包可以分散傳輸。 若要防止片段,請使用採用 options 參數的 SendAsync 其中一種方法,並將 屬性設定 DontFragmenttrue 。 當 DontFragmenttrue 且封包大小總計超過本機和遠端電腦之間的其中一個路由節點可以傳輸的最大封包大小時,ICMP 回應要求就會失敗。 發生這種情況時,會 Status 設定為 PacketTooBig 。 如果路由節點可以在捨棄前 128 次轉送分散) ,封包或封包片段 (。 若要變更此設定,請使用 SendAsync 採用 options 參數的多載,並將 屬性設定 Ttl 為所需的值。 如果封包在轉送指定的次數之後未到達其目的地,則會捨棄封包,而且 ICMP 回應要求會失敗。 發生這種情況時,會 Status 設定為 TtlExpired

適用於

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

來源:
Ping.cs
來源:
Ping.cs
來源:
Ping.cs

嘗試以非同步方式將網際網路控制訊息通訊協定 (ICMP) 回應訊息,連同指定的資料緩衝區一起傳送給具有指定 IPAddress 的電腦,並從該電腦接收對應的 ICMP 回應的回覆訊息。 這個多載可以讓您為作業指定逾時值。

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)

參數

address
IPAddress

IPAddress,識別 ICMP 回應訊息的目標電腦。

timeout
Int32

Int32 值,指定等候 ICMP 回應回覆訊息的最大毫秒數 (在傳送回應訊息之後)。 

buffer
Byte[]

Byte 陣列,包含要與 ICMP 回應訊息一同傳送以及要在 ICMP 回應回覆訊息中傳回的資料。 陣列的位元組不可以超過 65,500 以上。

userToken
Object

非同步作業完成時,傳遞至所叫用方法的物件。

例外狀況

addressbuffernull

timeout 小於零。

傳送或接收 ICMP 訊息時發生例外狀況。 查看被擲回之例外狀況的內部真正例外狀況。

address 不是有效的 IP 位址。

這個物件已經過處置。

buffer 的大小超過 65500 個位元組。

僅限 Linux 上的 .NET 7 和更新版本:此程式為非特殊許可權,且 buffer 不是空的。

範例

如需示範呼叫 SendAsync 多載的程式碼範例,請參閱 Ping 類別概觀。

備註

這個方法會以非同步方式傳送回應訊息,而且當 (作業順利或未成功) 時,會將狀態傳回至您的應用程式。 SendAsync當應用程式不應該封鎖時,請呼叫 方法。 每個呼叫都會在從執行緒集區自動設定的個別執行緒中執行。 非同步作業完成時,它會引發 PingCompleted 事件。 若要指定引發事件時 SendAsync 所呼叫的方法,您必須先將委派加入 PingCompletedEventHandler 事件,再呼叫 SendAsync 。 委派的 方法會 PingCompletedEventArgs 接收 物件,其中包含 PingReply 描述呼叫結果的 SendAsync 物件。 物件 PingCompletedEventArgsUserState 繼承 屬性。 這個屬性包含 userToken 撥入電話的物件 SendAsync

注意

如果您的應用程式在等候回復時封鎖,請使用 Send 方法;這些方法是同步的。

如果 ICMP 回應回復訊息未在 參數指定的 timeout 時間內收到,ICMP 回應就會失敗,而且 Status 屬性會設定為 TimedOut

注意

針對 指定非常小的數位 timeout 時,即使 timeout 經過毫秒,仍可接收 Ping 回復。

此多載會使用封包片段和封包轉送的預設設定。 如果封包大小總計超過本機和遠端電腦之間的其中一個路由節點可以傳輸的封包大小上限,則包含 ICMP 回應訊息的封包可以分散傳輸。 若要防止片段,請使用採用 options 參數的 SendAsync 其中一種方法,並將 屬性設定 DontFragmenttrue 。 當 DontFragmenttrue 且封包大小總計超過本機和遠端電腦之間的其中一個路由節點可以傳輸的最大封包大小時,ICMP 回應要求就會失敗。 發生這種情況時,會 Status 設定為 PacketTooBig 。 如果路由節點可以在捨棄前 128 次轉送分散) ,封包或封包片段 (。 若要變更此設定,請使用 SendAsync 採用 options 參數的多載,並將 屬性設定 Ttl 為所需的值。 如果封包在轉送指定的次數之後未到達其目的地,則會捨棄封包,而且 ICMP 回應要求會失敗。 發生這種情況時,會 Status 設定為 TtlExpired

適用於

SendAsync(IPAddress, Int32, Object)

來源:
Ping.cs
來源:
Ping.cs
來源:
Ping.cs

嘗試以非同步方式將網際網路控制訊息通訊協定 (ICMP) 回應訊息,傳送給具有指定之 IPAddress 的電腦,並從該電腦接收對應的 ICMP 回應回覆訊息。 這個多載可以讓您為作業指定逾時值。

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)

參數

address
IPAddress

IPAddress,識別 ICMP 回應訊息的目標電腦。

timeout
Int32

Int32 值,指定等候 ICMP 回應回覆訊息的最大毫秒數 (在傳送回應訊息之後)。 

userToken
Object

非同步作業完成時,傳遞至所叫用方法的物件。

例外狀況

addressnull

timeout 小於零。

傳送或接收 ICMP 訊息時發生例外狀況。 查看被擲回之例外狀況的內部真正例外狀況。

address 不是有效的 IP 位址。

這個物件已經過處置。

範例

如需示範呼叫 SendAsync 多載的程式碼範例,請參閱 Ping 類別概觀。

備註

方法會 SendAsync 以非同步方式傳送 Echo 訊息,當作業順利或失敗 () 時,會將狀態傳回至您的應用程式。 SendAsync當應用程式不應該封鎖時,請呼叫 方法。 每個呼叫都會在從執行緒集區自動設定的個別執行緒中執行。 非同步作業完成時,它會引發 PingCompleted 事件。 應用程式會使用 PingCompletedEventHandler 委派來指定引發事件時 SendAsync 所呼叫的方法。 您必須在呼叫 SendAsync 之前,將委派新增 PingCompletedEventHandler 至 事件。 委派的 方法會 PingCompletedEventArgs 接收 物件,其中包含 PingReply 描述呼叫結果的 SendAsync 物件。 物件 PingCompletedEventArgsUserState 繼承 屬性。 這個屬性包含 userToken 撥入電話的物件 SendAsync

如果您的應用程式在等候回復時應該封鎖,請使用 Send 方法;這些方法是同步的。

如果 ICMP 回應回復訊息未在 參數指定的 timeout 時間內收到,ICMP 回應就會失敗,而且 Status 屬性會設定為 TimedOut

注意

針對 指定非常小的數位 timeout 時,即使 timeout 經過毫秒,仍可接收 Ping 回復。

此多載會使用封包片段和封包轉送的預設設定。 如果封包大小總計超過本機和遠端電腦之間的其中一個路由節點可以傳輸的封包大小上限,則包含 ICMP 回應訊息的封包可以分散傳輸。 若要防止片段,請使用採用 options 參數的 SendAsync 其中一種方法,並將 屬性設定 DontFragmenttrue 。 當 DontFragmenttrue 且封包大小總計超過本機和遠端電腦之間的其中一個路由節點可以傳輸的最大封包大小時,ICMP 回應要求就會失敗。 發生這種情況時,會 Status 設定為 PacketTooBig 。 如果路由節點可以在捨棄前 128 次轉送分散) ,封包或封包片段 (。 若要變更此設定,請使用 SendAsync 採用 options 參數的多載,並將 屬性設定 Ttl 為所需的值。 如果封包在轉送指定的次數之後未到達其目的地,則會捨棄封包,而且 ICMP 回應要求會失敗。 發生這種情況時,會 Status 設定為 TtlExpired

適用於

SendAsync(String, Object)

來源:
Ping.cs
來源:
Ping.cs
來源:
Ping.cs

嘗試以非同步方式將網際網路控制訊息通訊協定 (ICMP) 回應訊息傳送給指定的電腦,並從該電腦接收對應的 ICMP 回應回覆訊息。

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)

參數

hostNameOrAddress
String

String,識別 ICMP 回應訊息的目標電腦。 指定給這個參數的值可以是主機名稱或 IP 位址的字串表示。

userToken
Object

非同步作業完成時,傳遞至所叫用方法的物件。

例外狀況

hostNameOrAddressnull 或空字串 ("")。

傳送或接收 ICMP 訊息時發生例外狀況。 查看被擲回之例外狀況的內部真正例外狀況。

hostNameOrAddress 無法解析成有效的 IP 位址。

這個物件已經過處置。

範例

如需示範呼叫 SendAsync 方法的程式碼範例,請參閱 Ping 類別概觀。

備註

方法會 SendAsync 以非同步方式傳送回應訊息,而且 (當作業順利或未成功) 時,會將狀態傳回至您的應用程式。 SendAsync當應用程式不應該封鎖時,請呼叫 方法。 這個方法的每個呼叫都會在從執行緒集區自動設定的個別執行緒中執行。 非同步作業完成時,它會引發 PingCompleted 事件。 若要指定引發事件時 SendAsync 所呼叫的方法,您必須先將委派加入 PingCompletedEventHandler 事件,再呼叫 SendAsync 。 委派的 方法會 PingCompletedEventArgs 接收 物件,其中包含 PingReply 描述呼叫結果的 SendAsync 物件。 物件 PingCompletedEventArgsUserState 繼承 屬性。 這個屬性包含 userToken 撥入電話的物件 SendAsync

注意

如果您的應用程式在等候回復時應該封鎖,請使用 Send 方法;這些方法是同步的。

這個方法會使用 ICMP 回應訊息傳送 32 Byte 個資料緩衝區。 方法會等候五秒的 ICMP 回應回復訊息。 如果在該方法傳回時未收到回復,且 Status 屬性會設定為 TimedOut

此多載會使用封包片段和封包轉送的預設設定。 如果封包大小總計超過本機和遠端電腦之間的其中一個路由節點可以傳輸的封包大小上限,則包含 ICMP 回應訊息的封包可以分散傳輸。 若要防止片段,請使用採用 options 參數的 SendAsync 其中一種方法,並將 屬性設定 DontFragmenttrue 。 當 DontFragmenttrue 且封包大小總計超過本機和遠端電腦之間的其中一個路由節點可以傳輸的最大封包大小時,ICMP 回應要求就會失敗。 發生這種情況時,會 Status 設定為 PacketTooBig

在捨棄之前,路由節點可以轉送封包或封包片段 128 次。 若要變更此設定,請使用 SendAsync 採用 options 參數的多載,並將 屬性設定 Ttl 為所需的值。 如果封包在轉送指定的次數之後未到達其目的地,則會捨棄封包,而且 ICMP 回應要求會失敗。 發生這種情況時,會 Status 設定為 TtlExpired

適用於

SendAsync(IPAddress, Object)

來源:
Ping.cs
來源:
Ping.cs
來源:
Ping.cs

嘗試以非同步方式將網際網路控制訊息通訊協定 (ICMP) 回應訊息,傳送給具有指定之 IPAddress 的電腦,並從該電腦接收對應的 ICMP 回應回覆訊息。

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)

參數

address
IPAddress

IPAddress,識別 ICMP 回應訊息的目標電腦。

userToken
Object

非同步作業完成時,傳遞至所叫用方法的物件。

例外狀況

addressnull

正在呼叫 SendAsync 方法。

傳送或接收 ICMP 訊息時發生例外狀況。 查看被擲回之例外狀況的內部真正例外狀況。

address 不是有效的 IP 位址。

這個物件已經過處置。

範例

如需示範呼叫 SendAsync 方法的程式碼範例,請參閱 Ping 類別概觀。

備註

方法會 SendAsync 以非同步方式傳送回應訊息,而且 (當作業順利或未成功) 時,會將狀態傳回至您的應用程式。 SendAsync當應用程式不應該封鎖時,請呼叫 方法。 這個方法的每個呼叫都會在從執行緒集區自動設定的個別執行緒中執行。 非同步作業完成時,它會引發 PingCompleted 事件。 若要指定引發事件時 SendAsync 所呼叫的方法,您必須先將委派加入 PingCompletedEventHandler 事件,再呼叫 SendAsync 。 委派的 方法會 PingCompletedEventArgs 接收 物件,其中包含 PingReply 描述呼叫結果的 SendAsync 物件。 物件 PingCompletedEventArgsUserState 繼承 屬性。 這個屬性包含 userToken 撥入電話的物件 SendAsync

注意

如果您的應用程式應該在等候回復時封鎖,請使用其中 Send 一種方法;這些方法是同步的。

這個方法會使用 ICMP 回應訊息傳送 32 Byte 個資料緩衝區。 方法會等候五秒的 ICMP 回應回復訊息。 如果該時間未收到回復,方法會傳回 ,且 Status 屬性會設定為 TimedOut

此多載會使用封包片段和封包轉送的預設設定。 如果封包大小總計超過本機和遠端電腦之間的其中一個路由節點可以傳輸的封包大小上限,則包含 ICMP 回應訊息的封包可以分散傳輸。 若要防止片段,請使用採用 options 參數的 SendAsync 其中一種方法,並將 屬性設定 DontFragmenttrue 。 當 DontFragmenttrue 且封包大小總計超過本機和遠端電腦之間的其中一個路由節點可以傳輸的最大封包大小時,ICMP 回應要求就會失敗。 發生這種情況時,會 Status 設定為 PacketTooBig

在捨棄之前,路由節點可以轉送封包或封包片段 128 次。 若要變更此設定,請使用 SendAsync 採用 options 參數的多載,並將 屬性設定 Ttl 為所需的值。 如果封包在轉送指定的次數之後未到達其目的地,則會捨棄封包,而且 ICMP 回應要求會失敗。 發生這種情況時,會 Status 設定為 TtlExpired

適用於

SendAsync(String, Int32, Object)

來源:
Ping.cs
來源:
Ping.cs
來源:
Ping.cs

嘗試以非同步方式將網際網路控制訊息通訊協定 (ICMP) 回應訊息傳送給指定的電腦,並從該電腦接收對應的 ICMP 回應回覆訊息。 這個多載可以讓您為作業指定逾時值。

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)

參數

hostNameOrAddress
String

String,識別 ICMP 回應訊息的目標電腦。 指定給這個參數的值可以是主機名稱或 IP 位址的字串表示。

timeout
Int32

Int32 值,指定等候 ICMP 回應回覆訊息的最大毫秒數 (在傳送回應訊息之後)。 

userToken
Object

非同步作業完成時,傳遞至所叫用方法的物件。

例外狀況

hostNameOrAddressnull 或空字串 ("")。

timeout 小於零。

傳送或接收 ICMP 訊息時發生例外狀況。 查看被擲回之例外狀況的內部真正例外狀況。

hostNameOrAddress 無法解析成有效的 IP 位址。

這個物件已經過處置。

範例

如需示範呼叫 SendAsync 方法的程式碼範例,請參閱 Ping 類別概觀。

備註

方法會 SendAsync 以非同步方式傳送 Echo 訊息,當作業順利或失敗 () 時,會將狀態傳回至您的應用程式。 當您的應用程式不應該封鎖時, SendAsync 請呼叫 方法。 每個呼叫都會在從執行緒集區自動設定的個別執行緒中執行。 非同步作業完成時,會引發 PingCompleted 事件。 應用程式會使用 PingCompletedEventHandler 委派來指定引發事件時 SendAsync 呼叫的方法。 您必須先將 PingCompletedEventHandler 委派新增至 事件,才能呼叫 SendAsync 。 委派的 方法會收到 PingCompletedEventArgs 物件,其中包含 PingReply 描述呼叫結果 SendAsync 的 物件。 物件 PingCompletedEventArgsUserState 繼承 屬性。 這個屬性包含 userToken 傳遞至呼叫的物件 SendAsync

如果您的應用程式應該在等候回復時封鎖,請使用 Send 方法;這些方法是同步的。

如果在 參數指定的 timeout 時間內未收到 ICMP 回應回復訊息,ICMP 回應會失敗,而且 Status 屬性會設定為 TimedOut

注意

針對 指定非常小的數位 timeout 時,即使經過毫秒,仍可接收 timeout Ping 回復。

此多載會使用封包片段和封包轉送的預設設定。 如果封包大小總計超過本機和遠端電腦之間其中一個路由節點可傳輸的封包大小上限,則包含 ICMP 回應訊息的封包可以分散傳輸。 若要防止片段,請使用採用 參數的 SendAsync 其中一種方法 options ,並將 屬性設定 DontFragmenttrue 。 當 是 DontFragmenttrue 且封包大小總計超過本機和遠端電腦之間其中一個路由節點可傳輸的封包大小上限時,ICMP 回應要求會失敗。 發生這種情況時,會將 Status 設定為 PacketTooBig 。 如果路由節點可以在捨棄之前 128 次轉送分散) ,封包或封包片段 (。 若要變更此設定,請使用 SendAsync 採用 options 參數的多載,並將 屬性設定 Ttl 為所需的值。 如果封包在轉送指定的次數之後未到達其目的地,則會捨棄封包,而且 ICMP 回應要求會失敗。 發生這種情況時,會將 Status 設定為 TtlExpired

適用於