次の方法で共有


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 は、ネットワーク上でリモート ホストに到達できることのみを示します。リモート ホスト上に上位レベルのサービス (Web サーバーなど) が存在することは保証されません。

このクラスは、Ping.exe コマンド ライン ツールと同様の機能を提供します。 SendおよびSendAsyncメソッドは、インターネット制御メッセージ プロトコル (ICMP) エコー要求メッセージをリモート コンピューターに送信し、そのコンピューターからの ICMP エコー応答メッセージを待機します。 ICMP メッセージの詳細については、 https://www.ietf.orgで利用可能な RFC 792 を参照してください。

次の型は、 Ping クラスで使用され、以下で詳しく説明します。

型名 説明
IPStatus ICMP エコー要求メッセージの結果を記述する状態コードを定義します。
PingOptions 要求パケットを転送できる回数 (Ttl)、およびフラグメント化できるかどうかを制御する設定を構成または取得できます (DontFragment )。
PingReply ICMP エコー要求の結果を格納します。
PingException 回復不可能なエラーが発生した場合にスローされます。
PingCompletedEventArgs SendAsync呼び出しが完了または取り消されたときに発生する、PingCompleted イベントに関連付けられたデータを格納します。
PingCompletedEventHandler SendAsync呼び出しが完了または取り消されたときに呼び出されるコールバック メソッドを提供するデリゲート。

SendメソッドとSendAsync メソッドは、PingReply オブジェクトで応答を返します。 PingReply.Status プロパティは、要求の結果を示すIPStatus値を返します。

要求を送信するときは、リモート コンピューターを指定する必要があります。 これを行うには、ホスト名の文字列、文字列形式の IP アドレス、または IPAddress オブジェクトを指定します。

次のいずれかの種類の情報を指定することもできます。

  • 要求に付随するデータ。 bufferを指定すると、リモート ホストとの間で送受信される特定のサイズのパケットに必要な時間と、ネットワーク パスの最大伝送単位を学習できます。 (buffer パラメーターを受け取るSendまたはSendAsyncオーバーロードを参照してください)。

  • ICMP エコー パケットを転送中にフラグメント化できるかどうか。 (options パラメーターを受け取るDontFragment プロパティとSendまたはSendAsyncオーバーロードを参照してください)。

  • ルーティング ノード (ルーターやゲートウェイなど) が宛先コンピューターに到達するか破棄されるまでにパケットを転送できる回数。 (options パラメーターを受け取るTtlおよびSendまたはSendAsyncオーバーロードを参照してください)。

  • 応答を受信する必要がある時間制限。 (timeout パラメーターを受け取るSendまたはSendAsyncオーバーロードを参照してください。

Ping クラスは、要求を送信するための同期メソッドと非同期メソッドの両方を提供します。 応答の待機中にアプリケーションがブロックする必要がある場合は、 Send メソッドを使用します。これらのメソッドは同期的です。 アプリケーションでブロックしない場合は、非同期 SendAsync メソッドを使用します。 SendAsyncの呼び出しは、スレッド プールから自動的に割り当てられる独自のスレッドで実行されます。 非同期操作が完了すると、 PingCompleted イベントが発生します。 アプリケーションでは、 PingCompletedEventHandler デリゲートを使用して、 PingCompleted イベントに対して呼び出されるメソッドを指定します。 SendAsyncを呼び出す前に、PingCompletedEventHandler デリゲートをイベントに追加する必要があります。 デリゲートのメソッドは、SendAsync呼び出しの結果を記述するPingReply オブジェクトを含むPingCompletedEventArgs オブジェクトを受け取ります。

Ping クラスの同じインスタンスを使用して、複数の同時 ICMP エコー要求を生成することはできません。 SendAsync呼び出しの進行中にSendを呼び出すか、以前のすべての呼び出しが完了する前にSendAsyncを複数回呼び出すと、InvalidOperationExceptionが発生します。

コンストラクター

名前 説明
Ping()

Ping クラスの新しいインスタンスを初期化します。

プロパティ

名前 説明
CanRaiseEvents

コンポーネントがイベントを発生できるかどうかを示す値を取得します。

(継承元 Component)
Container

IContainerを含むComponentを取得します。

(継承元 Component)
DesignMode

Componentが現在デザイン モードであるかどうかを示す値を取得します。

(継承元 Component)
Events

この Componentにアタッチされているイベント ハンドラーの一覧を取得します。

(継承元 Component)
Site

ISiteComponentを取得または設定します。

(継承元 Component)

メソッド

名前 説明
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 エコー メッセージ パケットの断片化と Time-to-Live 値を制御できます。

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 パケットの断片化と Time-to-Live 値を制御できます。

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 エコー メッセージ パケットの断片化と Time-to-Live 値を制御できます。

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 パケットの断片化と Time-to-Live 値を制御できます。

SendAsync(String, Int32, Object)

指定したコンピューターにインターネット制御メッセージ プロトコル (ICMP) エコー メッセージを非同期的に送信し、そのコンピューターから対応する ICMP エコー応答メッセージを受信しようとします。 このオーバーロードを使用すると、操作のタイムアウト値を指定できます。

SendAsync(String, Object)

指定したコンピューターにインターネット制御メッセージ プロトコル (ICMP) エコー メッセージを非同期的に送信し、そのコンピューターから対応する ICMP エコー応答メッセージを受信しようとします。

SendAsyncCancel()

インターネット制御メッセージ プロトコル (ICMP) エコー メッセージを送信するために保留中のすべての非同期要求を取り消し、対応する ICMP エコー応答メッセージを受信します。

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

指定したデータ バッファーを持つインターネット制御メッセージ プロトコル (ICMP) エコー メッセージを、指定した IPAddressを持つコンピューターに送信し、そのコンピューターから対応する ICMP エコー応答メッセージを非同期操作として受信します。 このオーバーロードを使用すると、操作のタイムアウト値、送受信に使用するバッファーを指定し、ICMP エコー メッセージ パケットの断片化と Time-to-Live 値を制御できます。

SendPingAsync(IPAddress, Int32, Byte[])

指定したデータ バッファーを含むインターネット制御メッセージ プロトコル (ICMP) エコー メッセージを、指定した IPAddressを持つコンピューターに送信し、そのコンピューターから対応する ICMP エコー応答メッセージを非同期操作として受信します。 このオーバーロードを使用すると、操作のタイムアウト値と、送受信に使用するバッファーを指定できます。

SendPingAsync(IPAddress, Int32)

指定したデータ バッファーを含むインターネット制御メッセージ プロトコル (ICMP) エコー メッセージを、指定した IPAddressを持つコンピューターに送信し、そのコンピューターから対応する ICMP エコー応答メッセージを非同期操作として受信します。 このオーバーロードを使用すると、操作のタイムアウト値を指定できます。

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

指定したデータ バッファーを持つインターネット制御メッセージ プロトコル (ICMP) エコー メッセージを、指定した IPAddressを持つコンピューターに送信し、そのコンピューターから対応する ICMP エコー応答メッセージを非同期操作として受信します。 このオーバーロードを使用すると、操作のタイムアウト値、送受信に使用するバッファー、断片化と Time-to-Live 値の制御、ICMP エコー メッセージ パケットの CancellationToken を指定できます。

SendPingAsync(IPAddress)

指定したデータ バッファーを含むインターネット制御メッセージ プロトコル (ICMP) エコー メッセージを、指定した IPAddressを持つコンピューターに送信し、そのコンピューターから対応する ICMP エコー応答メッセージを非同期操作として受信します。

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

指定したデータ バッファーを含むインターネット制御メッセージ プロトコル (ICMP) エコー メッセージを指定されたコンピューターに送信し、そのコンピューターから対応する ICMP エコー応答メッセージを非同期操作として受信します。 このオーバーロードを使用すると、操作のタイムアウト値、送受信に使用するバッファーを指定し、ICMP エコー メッセージ パケットの断片化と Time-to-Live 値を制御できます。

SendPingAsync(String, Int32, Byte[])

指定したデータ バッファーを含むインターネット制御メッセージ プロトコル (ICMP) エコー メッセージを指定されたコンピューターに送信し、そのコンピューターから対応する ICMP エコー応答メッセージを非同期操作として受信します。 このオーバーロードを使用すると、操作のタイムアウト値と、送受信に使用するバッファーを指定できます。

SendPingAsync(String, Int32)

指定したデータ バッファーを含むインターネット制御メッセージ プロトコル (ICMP) エコー メッセージを指定されたコンピューターに送信し、そのコンピューターから対応する ICMP エコー応答メッセージを非同期操作として受信します。 このオーバーロードを使用すると、操作のタイムアウト値を指定できます。

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

指定したデータ バッファーを持つインターネット制御メッセージ プロトコル (ICMP) エコー メッセージを指定されたコンピューターに送信し、そのコンピューターから対応する ICMP エコー応答メッセージを非同期操作として受信します。 このオーバーロードを使用すると、操作のタイムアウト値、送受信に使用するバッファー、断片化と Time-to-Live 値の制御、ICMP エコー メッセージ パケットの CancellationToken を指定できます。

SendPingAsync(String)

指定したデータ バッファーを含むインターネット制御メッセージ プロトコル (ICMP) エコー メッセージを指定されたコンピューターに送信し、そのコンピューターから対応する ICMP エコー応答メッセージを非同期操作として受信します。

ToString()

Stringの名前 (存在する場合) を含むComponentを返します。 このメソッドはオーバーライドしないでください。

(継承元 Component)
ToString()

現在のオブジェクトを表す文字列を返します。

(継承元 Object)

イベント

名前 説明
Disposed

コンポーネントが Dispose() メソッドの呼び出しによって破棄されるときに発生します。

(継承元 Component)
PingCompleted

インターネット制御メッセージ プロトコル (ICMP) エコー メッセージを送信し、対応する ICMP エコー応答メッセージを受信する非同期操作が完了または取り消されたときに発生します。

明示的なインターフェイスの実装

名前 説明
IDisposable.Dispose()

Ping クラスのインスタンスによって使用されるすべてのリソースを解放します。

適用対象

こちらもご覧ください