共用方式為


Ping 類別

定義

允許應用程式判斷遠端電腦是否可透過網路存取。

public ref class Ping : System::ComponentModel::Component
public ref class Ping : IDisposable
public ref class Ping : System::ComponentModel::Component, IDisposable
public class Ping : System.ComponentModel.Component
public class Ping : IDisposable
public class Ping : System.ComponentModel.Component, IDisposable
type Ping = class
    inherit Component
type Ping = class
    interface IDisposable
type Ping = class
    inherit Component
    interface IDisposable
Public Class Ping
Inherits Component
Public Class Ping
Implements IDisposable
Public Class Ping
Inherits Component
Implements IDisposable
繼承
繼承
Ping
實作

範例

以下程式碼範例示範如何同步使用該 Ping 類別。

using System;
using System.Net;
using System.Net.NetworkInformation;
using System.Text;

namespace Examples.System.Net.NetworkInformation.PingTest
{
    public class PingExample
    {
        // args[0] can be an IPaddress or host name.
        public static void Main (string[] args)
        {
            Ping pingSender = new Ping ();
            PingOptions options = new PingOptions ();

            // Use the default Ttl value which is 128,
            // but change the fragmentation behavior.
            options.DontFragment = true;

            // Create a buffer of 32 bytes of data to be transmitted.
            string data = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
            byte[] buffer = Encoding.ASCII.GetBytes (data);
            int timeout = 120;
            PingReply reply = pingSender.Send (args[0], timeout, buffer, options);
            if (reply.Status == IPStatus.Success)
            {
                Console.WriteLine ("Address: {0}", reply.Address.ToString ());
                Console.WriteLine ("RoundTrip time: {0}", reply.RoundtripTime);
                Console.WriteLine ("Time to live: {0}", reply.Options.Ttl);
                Console.WriteLine ("Don't fragment: {0}", reply.Options.DontFragment);
                Console.WriteLine ("Buffer size: {0}", reply.Buffer.Length);
            }
        }
    }
}
open System.Net.NetworkInformation
open System.Text

// args[0] can be an IPaddress or host name.
[<EntryPoint>]
let main args =
    let pingSender = new Ping()

    // Use the default Ttl value which is 128,
    // but change the fragmentation behavior.
    let options = PingOptions()
    options.DontFragment <- true

    // Create a buffer of 32 bytes of data to be transmitted.
    let data = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
    let buffer = Encoding.ASCII.GetBytes data
    let timeout = 120
    let reply: PingReply = pingSender.Send(args.[0], timeout, buffer, options)

    match reply.Status with
    | IPStatus.Success ->
        printfn "Address: %O" reply.Address
        printfn "RoundTrip time: %d" reply.RoundtripTime
        printfn "Time to live: %d" reply.Options.Ttl
        printfn "Don't fragment: %b" reply.Options.DontFragment
        printfn "Buffer size: %d" reply.Buffer.Length
        0
    | _ ->
        eprintfn "Error sending ping: %O" reply
        eprintfn "Error was: %O" reply.Status
        1

以下程式碼範例示範了非同步使用該 Ping 類別的方法。

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

備註

應用程式利用此 Ping 類別來偵測遠端電腦是否可被存取。

網路拓撲可判斷是否 Ping 能成功聯繫遠端主機。 代理伺服器、網路位址轉換(NAT)設備或防火牆的存在與配置,可能阻礙 Ping 成功。 成功 Ping 僅表示遠端主機可透過網路聯繫;遠端主機上是否存在較高階服務(如網頁伺服器)並不保證。

此類別提供類似 Ping.exe 命令列工具的功能。 SendSendAsync方法會向遠端電腦發送網際網路控制訊息協定(ICMP)回聲請求訊息,並等待該電腦發出的 ICMP 回波回覆訊息。 欲了解 ICMP 訊息的詳細描述,請參閱 RFC 792,網址為 https://www.ietf.org

以下類型與該 Ping 類別共用,詳情如下所述。

類型名稱 說明
IPStatus 定義描述 ICMP 迴聲請求訊息結果的狀態碼。
PingOptions 允許你設定或取得控制請求封包可轉發次數(Ttl)的設定(),以及是否能被分段(DontFragment )。
PingReply 包含ICMP超聲請求的結果。
PingException 若發生無法恢復的錯誤,則會被拋棄。
PingCompletedEventArgs 包含與 PingCompleted 事件相關的資料,當通話完成或取消時 SendAsync 會被提出。
PingCompletedEventHandler 提供回撥方法的代理在通話 SendAsync 完成或取消時會被呼叫。

SendSendAsync 方法會在物件PingReply中回傳回應。 該屬性回 PingReply.StatusIPStatus 一個值,表示請求的結果。

發送請求時,必須指定遠端電腦。 你可以透過提供主機名稱字串、以字串格式的 IP 位址,或物件來 IPAddress 達成。

您也可以指定以下任何類型的資訊:

  • 資料將隨請求而來。 指定 buffer 可以讓你了解特定大小封包往返遠端主機和網路路徑最大傳輸單元所需的時間。 (詳見SendSendAsync參數buffer過載。)

  • ICMP Echo 封包是否可在傳輸過程中被分割。 (參見DontFragment性質及Send取參數options的或SendAsync超載。)

  • 路由節點(如路由器或閘道器)能轉發封包多少次,才能在它抵達目的地電腦或被丟棄之前轉發。 (參見 Ttl 以及 SendSendAsync 或 取參數 options 的超載。)

  • 回覆必須在期限內收到。 (參見 Send or SendAsync 參數 timeout 過載。

Ping 類別提供同步與非同步兩種方式來傳送請求。 如果你的應用程式在等待回覆時阻塞,請使用這些 Send 方法;這些方法是同步的。 如果你的應用程式不應該阻塞,就使用非同步 SendAsync 方法。 SendAsync呼叫 在自己的執行緒中執行,該執行緒會自動從執行緒池中分配。 當非同步操作完成時,會提高事件。PingCompleted 應用程式使用 PingCompletedEventHandler 代理來指定事件所呼叫 PingCompleted 的方法。 您必須在致電SendAsync前加入PingCompletedEventHandler活動代表。 代理的方法接收 PingCompletedEventArgs 到一個物件,該物件包含 PingReply 描述呼叫結果 SendAsync 的物件。

你不能用同一個類別實例 Ping 同時產生多個 ICMP Echo 請求。 通話進行中撥打Send或在所有先前通話結束前多次撥打SendAsync,會導致 InvalidOperationExceptionSendAsync

建構函式

名稱 Description
Ping()

初始化 Ping 類別的新執行個體。

屬性

名稱 Description
CanRaiseEvents

會得到一個值,表示該元件是否能引發事件。

(繼承來源 Component)
Container

得到 IContainer 包含 Component的 。

(繼承來源 Component)
DesignMode

會得到一個值,表示目前 Component 是否處於設計模式。

(繼承來源 Component)
Events

會取得與此 Component連結的事件處理程序清單。

(繼承來源 Component)
Site

取得或設定 ISiteComponent

(繼承來源 Component)

方法

名稱 Description
CreateObjRef(Type)

建立一個物件,包含產生代理伺服器所需的所有相關資訊,用於與遠端物件通訊。

(繼承來源 MarshalByRefObject)
Dispose()

釋放未管理的資源並處理由 Ping.

Dispose()

釋放所有由 Component.

(繼承來源 Component)
Dispose(Boolean)

釋放物件所使用的 Ping 未管理資源,並可選擇性地處置這些受管理資源。

Dispose(Boolean)

釋放 未管理的資源, Component 並可選擇性地釋放受管理資源。

(繼承來源 Component)
Equals(Object)

判斷指定的物件是否等於目前的物件。

(繼承來源 Object)
GetHashCode()

做為預設哈希函式。

(繼承來源 Object)
GetLifetimeService()
已淘汰.

取得目前控制此實例生命週期政策的終身服務物件。

(繼承來源 MarshalByRefObject)
GetService(Type)

回傳一個由 或Component其 所提供的Container服務的物件。

(繼承來源 Component)
GetType()

取得目前實例的 Type

(繼承來源 Object)
InitializeLifetimeService()
已淘汰.

取得一個終身服務物件以控制此實例的終身政策。

(繼承來源 MarshalByRefObject)
MemberwiseClone()

建立目前 Object的淺層複本。

(繼承來源 Object)
MemberwiseClone(Boolean)

建立一個 MarshalByRefObject 目前物件的淺層複製品。

(繼承來源 MarshalByRefObject)
OnPingCompleted(PingCompletedEventArgs)

引發 PingCompleted 事件。

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

嘗試將帶有指定資料緩衝區的網際網路控制訊息協定(ICMP)回波訊息傳送給擁有指定 IPAddress 資料緩衝區的電腦,並從該電腦接收對應的 ICMP 回波回覆訊息。 此過載允許你指定操作與控制碎片的逾時值,以及 ICMP 回聲訊息封包的存活時間值。

Send(IPAddress, Int32, Byte[])

嘗試將帶有指定資料緩衝區的網際網路控制訊息協定(ICMP)回聲訊息傳送給擁有指定 IPAddress資料緩衝區的電腦,並從該電腦接收相應的ICMP回波回覆訊息。 這個超載讓你可以為操作指定逾時值。

Send(IPAddress, Int32)

嘗試將帶有指定資料緩衝區的網際網路控制訊息協定(ICMP)回聲訊息傳送給擁有指定 IPAddress資料緩衝區的電腦,並從該電腦接收相應的ICMP回波回覆訊息。 此方法允許你指定操作的逾時值。

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

嘗試向具備指定 IPAddress的電腦發送網際網路控制訊息協定(ICMP)回波訊息,並從該電腦接收相應的 ICMP 回波回覆訊息。

Send(IPAddress)

嘗試向擁有指定 IPAddress的電腦發送網際網路控制訊息協定(ICMP)迴波訊息,並從該電腦接收相應的 ICMP 回波回覆訊息。

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

嘗試將帶有指定資料緩衝區的網際網路控制訊息協定(ICMP)回聲訊息傳送至指定電腦,並從該電腦接收對應的 ICMP 回波回覆訊息。 此過載允許你指定操作與控制碎片的逾時值,以及 ICMP 封包的存活時間值。

Send(String, Int32, Byte[])

嘗試將帶有指定資料緩衝區的網際網路控制訊息協定(ICMP)回聲訊息傳送至指定電腦,並從該電腦接收對應的 ICMP 回波回覆訊息。 這個超載讓你可以為操作指定逾時值。

Send(String, Int32)

嘗試向指定的電腦發送網際網路控制訊息協定(ICMP)回聲訊息,並接收該電腦對應的 ICMP 回波回覆訊息。 此方法允許你指定操作的逾時值。

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

嘗試向指定的電腦發送網際網路控制訊息協定(ICMP)迴波訊息,並接收該電腦對應的 ICMP 迴波回覆訊息。

Send(String)

嘗試向指定的電腦發送網際網路控制訊息協定(ICMP)回聲訊息,並接收該電腦對應的 ICMP 回波回覆訊息。

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

非同步嘗試將帶有指定資料緩衝區的網際網路控制訊息協定(ICMP)回聲訊息傳送給擁有指定 IPAddress資料緩衝區的電腦,並從該電腦接收對應的ICMP回聲回覆訊息。 這個超載讓你可以為操作指定逾時值。

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

非同步嘗試將帶有指定資料緩衝區的網際網路控制訊息協定(ICMP)回聲訊息傳送給擁有指定 IPAddress資料緩衝區的電腦,並從該電腦接收對應的ICMP回聲回覆訊息。 此過載允許你指定操作與控制碎片的逾時值,以及 ICMP 回聲訊息封包的存活時間值。

SendAsync(IPAddress, Int32, Object)

非同步嘗試向擁有指定 IPAddress的電腦發送網際網路控制訊息協定(ICMP)回波訊息,並從該電腦接收相應的 ICMP 回波回覆訊息。 這個超載讓你可以為操作指定逾時值。

SendAsync(IPAddress, Object)

非同步嘗試向擁有指定 IPAddress的電腦發送網際網路控制訊息協定(ICMP)回波訊息,並從該電腦接收相應的 ICMP 回波回覆訊息。

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

非同步嘗試將帶有指定資料緩衝區的網際網路控制訊息協定(ICMP)回聲訊息傳送至指定電腦,並從該電腦接收相應的 ICMP 回聲回覆訊息。 這個超載讓你可以為操作指定逾時值。

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

非同步嘗試將帶有指定資料緩衝區的網際網路控制訊息協定(ICMP)回聲訊息傳送至指定電腦,並從該電腦接收相應的 ICMP 回聲回覆訊息。 此過載允許你指定操作與控制碎片的逾時值,以及 ICMP 封包的存活時間值。

SendAsync(String, Int32, Object)

非同步嘗試向指定的電腦發送網際網路控制訊息協定(ICMP)回波訊息,並從該電腦接收相應的 ICMP 回波訊息。 這個超載讓你可以為操作指定逾時值。

SendAsync(String, Object)

非同步嘗試向指定的電腦發送網際網路控制訊息協定(ICMP)回波訊息,並從該電腦接收相應的 ICMP 回波訊息。

SendAsyncCancel()

取消所有待處理的非同步請求,以發送網際網路控制訊息協定(ICMP)回波訊息,並接收相應的 ICMP 回波回覆訊息。

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

以指定資料緩衝區向擁有指定 IPAddress資料緩衝區的網際網路控制訊息協定(ICMP)回波訊息,並以非同步操作接收該電腦對應的ICMP回波回覆訊息。 此過載允許你指定操作的逾時值、用於傳送與接收的緩衝區,以及控制 ICMP 回波訊息封包的碎片化與存活時間值。

SendPingAsync(IPAddress, Int32, Byte[])

將帶有指定資料緩衝區的網際網路控制訊息協定(ICMP)回波訊息傳送給擁有指定 IPAddress資料緩衝區的電腦,並以非同步操作方式接收該電腦對應的ICMP回波回覆訊息。 這個超載功能允許你指定操作的逾時值,以及用於發送和接收的緩衝區。

SendPingAsync(IPAddress, Int32)

將帶有指定資料緩衝區的網際網路控制訊息協定(ICMP)回波訊息傳送給擁有指定 IPAddress資料緩衝區的電腦,並以非同步操作方式接收該電腦對應的ICMP回波回覆訊息。 這個超載讓你可以為操作指定逾時值。

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

以指定資料緩衝區向擁有指定 IPAddress資料緩衝區的網際網路控制訊息協定(ICMP)回波訊息,並以非同步操作接收該電腦對應的ICMP回波回覆訊息。 此超載允許你指定操作的逾時值、用於發送與接收的緩衝區、控制分段與存活時間值,以及 CancellationToken ICMP 迴波訊息封包的緩衝區。

SendPingAsync(IPAddress)

將帶有指定資料緩衝區的網際網路控制訊息協定(ICMP)回波訊息傳送給擁有指定 IPAddress資料緩衝區的電腦,並以非同步操作方式接收該電腦對應的ICMP回波回覆訊息。

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

將帶有指定資料緩衝區的網際網路控制訊息協定(ICMP)回聲訊息傳送至指定電腦,並以非同步操作方式接收該電腦對應的 ICMP 回波回覆訊息。 此過載允許你指定操作的逾時值、用於傳送與接收的緩衝區,以及控制 ICMP 回波訊息封包的碎片化與存活時間值。

SendPingAsync(String, Int32, Byte[])

將帶有指定資料緩衝區的網際網路控制訊息協定(ICMP)回聲訊息傳送至指定電腦,並以非同步操作方式接收該電腦對應的 ICMP 回波回覆訊息。 這個超載功能允許你指定操作的逾時值,以及用於發送和接收的緩衝區。

SendPingAsync(String, Int32)

將帶有指定資料緩衝區的網際網路控制訊息協定(ICMP)回聲訊息傳送至指定電腦,並以非同步操作方式接收該電腦對應的 ICMP 回波回覆訊息。 這個超載讓你可以為操作指定逾時值。

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

將帶有指定資料緩衝區的網際網路控制訊息協定(ICMP)回波訊息傳送至指定電腦,並以非同步操作方式接收該電腦對應的ICMP回波回覆訊息。 此超載允許你指定操作的逾時值、用於發送與接收的緩衝區、控制分段與存活時間值,以及 CancellationToken ICMP 迴波訊息封包的緩衝區。

SendPingAsync(String)

將帶有指定資料緩衝區的網際網路控制訊息協定(ICMP)回聲訊息傳送至指定電腦,並以非同步操作方式接收該電腦對應的 ICMP 回波回覆訊息。

ToString()

回傳 String 包含 的名稱 Component(若有的話)。 此方法不應被覆蓋。

(繼承來源 Component)
ToString()

傳回表示目前 物件的字串。

(繼承來源 Object)

事件

名稱 Description
Disposed

當元件被呼叫方法 Dispose() 時會發生。

(繼承來源 Component)
PingCompleted

當發送網際網路控制訊息協定(ICMP)回波訊息並接收相應的 ICMP 回波訊息的非同步操作完成或取消時,就會發生。

明確介面實作

名稱 Description
IDisposable.Dispose()

釋放該類別實例 Ping 所使用的所有資源。

適用於

另請參閱