程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#中ping類的用法

C#中ping類的用法

編輯:C#入門知識

繼承層次結構

--------------------------------------------------------------------------------

System.Object
  System.MarshalByRefObject
    System.ComponentModel.Component
      System.Net.NetworkInformation.Ping


命名空間:  System.Net.NetworkInformation
程序集:  System(在 System.dll 中)

語法


--------------------------------------------------------------------------------

 public class Ping : Component
Ping 類型公開以下成員。
構造函數

--------------------------------------------------------------------------------

  名稱 說明
 Ping 初始化 Ping 類的新實例。 

屬性

--------------------------------------------------------------------------------

  名稱 說明
 CanRaiseEvents 獲取一個指示組件是否可以引發事件的值。 (繼承自 Component。)
 Container 獲取 IContainer,它包含 Component。 (繼承自 Component。)
 DesignMode 獲取一個值,用以指示 Component 當前是否處於設計模式。 (繼承自 Component。)
 Events 獲取附加到此 Component 的事件處理程序的列表。 (繼承自 Component。)
 Site 獲取或設置 Component 的 ISite。 (繼承自 Component。)

方法

--------------------------------------------------------------------------------

  名稱 說明
 CreateObjRef 創建一個對象,該對象包含生成用於與遠程對象進行通信的代理所需的全部相關信息。 (繼承自 MarshalByRefObject。)
 Dispose() 釋放由 Component 使用的所有資源。 (繼承自 Component。)
 Dispose(Boolean) 釋放由 Ping 對象使用的非托管資源,並可根據需要釋放托管資源。 (重寫 Component.Dispose(Boolean)。)
 Equals(Object) 確定指定的 Object 是否等於當前的 Object。 (繼承自 Object。)
 Finalize 在通過垃圾回收將 Component 回收之前,釋放非托管資源並執行其他清理操作。 (繼承自 Component。)
 GetHashCode 用作特定類型的哈希函數。 (繼承自 Object。)
 GetLifetimeService 檢索控制此實例的生存期策略的當前生存期服務對象。 (繼承自 MarshalByRefObject。)
 GetService 返回一個對象,該對象表示由 Component 或它的 Container 提供的服務。 (繼承自 Component。)
 GetType 獲取當前實例的 Type。 (繼承自 Object。)
 InitializeLifetimeService 獲取控制此實例的生存期策略的生存期服務對象。 (繼承自 MarshalByRefObject。)
 MemberwiseClone() 創建當前 Object 的淺表副本。 (繼承自 Object。)
 MemberwiseClone(Boolean) 創建當前 MarshalByRefObject 對象的淺表副本。 (繼承自 MarshalByRefObject。)
 OnPingCompleted 引發 PingCompleted 事件。 
 Send(IPAddress) 嘗試將 Internet 控制消息協議 (ICMP) 回送消息發送到具有指定 IPAddress 的計算機,並接收來自該計算機的相應 ICMP 回送答復消息。 
 Send(String) 嘗試向指定的計算機發送 Internet 控制消息協議 (ICMP) 回送消息,並從該計算機接收相應的 ICMP 回送答復消息。 
 Send(IPAddress, Int32) 嘗試將包含指定數據緩沖區的 Internet 控制消息協議 (ICMP) 回送消息發送到具有指定的 IPAddress 的計算機,並接收來自該計算機的相應 ICMP 回送應答消息。 使用此方法可以為操作指定一個超時值。 
 Send(String, Int32) 嘗試向指定的計算機發送 Internet 控制消息協議 (ICMP) 回送消息,並從該計算機接收相應的 ICMP 回送答復消息。 使用此方法可以為操作指定一個超時值。 
 Send(IPAddress, Int32, Byte[]) 嘗試將包含指定數據緩沖區的 Internet 控制消息協議 (ICMP) 回送消息發送到具有指定的 IPAddress 的計算機,並接收來自該計算機的相應 ICMP 回送應答消息。 此重載使您可以為操作指定一個超時值。 
 Send(String, Int32, Byte[]) 嘗試用指定的數據緩沖區將 Internet 控制消息協議 (ICMP) 回顯消息發送到指定計算機,然後從該計算機接收對應的 ICMP 回顯回復消息。 此重載使您可以為操作指定一個超時值。 
 Send(IPAddress, Int32, Byte[], PingOptions) 嘗試將包含指定數據緩沖區的 Internet 控制消息協議 (ICMP) 回送消息發送到具有指定 IPAddress 的計算機,並接收來自該計算機的相應 ICMP 回送答復消息。 此重載允許您指定操作的超時值,並控制 ICMP 回顯消息數據包的碎片和生存時間值。 
 Send(String, Int32, Byte[], PingOptions) 嘗試用指定的數據緩沖區將 Internet 控制消息協議 (ICMP) 回顯消息發送到指定計算機,然後從該計算機接收對應的 ICMP 回顯回復消息。 此重載允許您指定操作的超時值,並控制 ICMP 數據包的碎片和生存時間值。 
 SendAsync(IPAddress, Object) 嘗試以異步方式向指定 IPAddress 的計算機發送 Internet 控制消息協議 (ICMP) 回送消息,並從該計算機接收相應的 ICMP 回送答復消息。 
 SendAsync(String, Object) 嘗試以異步方式向指定的計算機發送 Internet 控制消息協議 (ICMP) 回送消息,並從該計算機接收相應的 ICMP 回送答復消息。 
 SendAsync(IPAddress, Int32, Object) 嘗試以異步方式向指定 IPAddress 的計算機發送 Internet 控制消息協議 (ICMP) 回送消息,並從該計算機接收相應的 ICMP 回送答復消息。 此重載使您可以為操作指定一個超時值。 
 SendAsync(String, Int32, Object) 嘗試以異步方式向指定的計算機發送 Internet 控制消息協議 (ICMP) 回送消息,並從該計算機接收相應的 ICMP 回送答復消息。 此重載使您可以為操作指定一個超時值。 
 SendAsync(IPAddress, Int32, Byte[], Object) 嘗試用指定的數據緩沖區以異步方式將 Internet 控制消息協議 (ICMP) 回顯消息發送到具有指定的 IPAddress 的計算機,並從該計算機接收對應的 ICMP 回顯回復消息。 此重載使您可以為操作指定一個超時值。 
 SendAsync(String, Int32, Byte[], Object) 嘗試用指定的數據緩沖區以異步方式將 Internet 控制消息協議 (ICMP) 回顯消息發送到指定計算機,並從該計算機接收對應的 ICMP 回顯回復消息。 此重載使您可以為操作指定一個超時值。 
 SendAsync(IPAddress, Int32, Byte[], PingOptions, Object) 嘗試用指定的數據緩沖區以異步方式將 Internet 控制消息協議 (ICMP) 回顯消息發送到具有指定的 IPAddress 的計算機,並從該計算機接收對應的 ICMP 回顯回復消息。 此重載允許您指定操作的超時值,並控制 ICMP 回顯消息數據包的碎片和生存時間值。 
 SendAsync(String, Int32, Byte[], PingOptions, Object) 嘗試用指定的數據緩沖區以異步方式將 Internet 控制消息協議 (ICMP) 回顯消息發送到指定計算機,並從該計算機接收對應的 ICMP 回顯回復消息。 此重載允許您指定操作的超時值,並控制 ICMP 數據包的碎片和生存時間值。 
 SendAsyncCancel 取消所有掛起的發送 Internet 控制消息協議 (ICMP) 回送消息並接收相應 ICMP 回送答復消息的異步請求。 
 ToString 返回包含 Component 的名稱的 String(如果有)。 不應重寫此方法。 (繼承自 Component。)

事件

--------------------------------------------------------------------------------

  名稱 說明
 Disposed 當通過調用 Dispose 方法釋放組件時發生。 (繼承自 Component。)
 PingCompleted 當發送 Internet 控制消息協議 (ICMP) 回送消息並接收相應 ICMP 回送答復消息的異步操作完成或被取消時發生。 

備注

--------------------------------------------------------------------------------

應用程序使用 Ping 類檢測是否可訪問遠程計算機。

網絡拓撲可確定 Ping 是否可成功聯系遠程主機。 如果存在或配置了代理服務器、網絡地址轉換 (NAT) 設備或防火牆,可能會妨礙 Ping 成功。 Ping 成功只是表示可以通過網絡訪問遠程主機;但並不保證遠程主機上存在更高級別的服務(例如 Web 服務器)。

此類提供的功能類似於 Ping.exe 命令行工具。 Send 和 SendAsync 方法將 Internet 控制消息協議 (ICMP) 回送請求消息發送到遠程計算機並等待來自該計算機的 ICMP 回送答復消息。 有關 ICMP 消息的詳細說明,請參見 RFC 792,這可以在 http://www.ietf.org 上找到。

以下類型與 Ping 類一起使用,詳見下文。

類型名稱
 說明
 
IPStatus
 定義描述 ICMP 回送請求消息結果的狀態代碼。
 
PingOptions
 允許配置或檢索控制請求數據包可以轉發的次數 (Ttl) 和數據包是否可以分段 (DontFragment) 的設置。
 
PingReply
 包含 ICMP 回送請求的結果。
 
PingException
 發生不可恢復的錯誤時引發。
 
PingCompletedEventArgs
 包含與 PingCompleted 事件關聯的數據,這些事件在 SendAsync 調用完成或被取消時引發。
 
PingCompletedEventHandler
 提供在 SendAsync 調用完成或被取消時調用的回調方法的委托。
 

Send 和 SendAsync 方法在 PingReply 對象中返回答復。 PingReply.Status 屬性返回 IPStatus 值以指示請求結果。

發送請求時,必須指定遠程計算機。 為此可以提供主機名字符串、字符串格式的 IP 地址或 IPAddress 對象。

還可以指定以下任何類型的信息:

與請求一起發送的數據。 指定 buffer 可了解特定大小的數據包傳送到或來自遠程主機所需的時間量,以及網絡路徑的最大傳輸單位。 (請參見帶 buffer 參數的 Send 或 SendAsync 重載。)

ICMP 回送數據包在傳輸時是否可以分段。 (請參見 DontFragment 屬性和帶 options 參數的 Send 或 SendAsync 重載。)

路由節點(如路由器或網關)在數據包到達目標計算機或被丟棄之前可以轉發數據包的次數。 (請參見 Ttl 和帶 options 參數的 Send 或 SendAsync 重載。)

必須收到答復的時間限制。 (請參見帶 timeout 參數的 Send 或 SendAsync 重載。)

Ping 類提供了發送請求的同步方法和異步方法。 如果應用程序應在等待答復時阻止,請使用 Send 方法;這些方法是同步的。 如果應用程序不應阻止,請使用異步 SendAsync 方法。 SendAsync 調用在它自己的、從線程池自動分配的線程中執行。 當異步操作完成時,它會引發 PingCompleted 事件。 應用程序使用 PingCompletedEventHandler 委托指定為 PingCompleted 事件調用的方法。 在調用 SendAsync 之前,必須為該事件添加 PingCompletedEventHandler 委托。 該委托的方法收到一個 PingCompletedEventArgs 對象,該對象包含一個描述 SendAsync 調用結果的 PingReply 對象。

不能使用 Ping 類的同一實例生成多個同時 ICMP 回送請求。 當 SendAsync 調用正在進行時調用 Send 或者在所有以前的調用完成前多次調用 SendAsync 將導致 InvalidOperationException。

示例

--------------------------------------------------------------------------------

下面的代碼示例演示如何同步使用 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);
            }
        }
    }
}


下面的代碼示例演示如何異步使用 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);
            }
        }
    }
}

作者:a125138

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved