none
ネットワーク上でクライアントが稼働しているのを確認する方法 RRS feed

  • 質問

  • みなさん、初めまして。

    数日前に、C# Express Editionをインストールし、十何年かぶりにプログラムを

    書き出しています。 Windows ベースのプログラムを書くのは初めてです。

    宜しくお願いします。

     

    早速ですが、ネットワークにあるクライアントの稼働中/停止中を確認する、旨い方法が

    分からなくて困っています。

     

    今、ネットワークパスを指定して、目的のフォルダーの存在を調べる事で目的は達成して

    いますが、応答に20数秒要しています。

    また、エラー処理(try・・・catch,System.IO.Directory.GetFiles)を使ってトライしてみま

    したが、やはり時間が掛かるのは同じようです。

     

    迅速に、目的のクライアントが稼働していない事を確認したいのです。

    何か、良い方法は無いでしょうか。

     

    手荒い方法ですが、ping コマンドを打って、その応答から判断するような方法もどうかな

    と考えましたが、まだまだ私の知識では手に負えません。

     

    手頃で利口な方法をご教授頂けたらと思っています。

    みなさん、どうか宜しくお願いいたします。

    2008年6月26日 5:56

回答

  • trapemiya さん、色々とアドバイス頂き、ありがとうございます。

     

    同期/非同期のイメージが分かりました。

     

    それから、ping 送受信例の記事も有り難いです。

    具体的に記載されており、私にも何とか理解できそうです。

    早速、トライしてみる事にします。

     

    あちこち上手に検索すれば、有用な記事が沢山あるのですね。

    これらを探し当てるノウハウも勉強の課題かと思います。

     

    お教え頂いた事柄を手がかりに、色々と試してみたいと思いますので

    この質問は、一旦クローズさせて頂くのが良いかなと考えています。

     

    また、何かにぶち当たれば質問させて頂きます。

    その節には、どうぞ宜しくお願いいたします。

    2008年6月26日 8:51
  • C.John さん、早速のご回答、ありがとうございました。

     

    今、旨く動作する事を確認させて頂きました。

     

    どうも、ありがとうございました。

     

    この件、これでクローズさせて頂きます。

    2008年6月26日 15:38

すべての返信

  • pingで良いと思いますよ。定期的にpingを打って応答がなければメールで通知するようなことも行われています。

    以下にサンプルがあります。

     

    Ping クラス

    http://msdn.microsoft.com/ja-jp/library/system.net.networkinformation.ping(VS.80).aspx

    2008年6月26日 6:09
    モデレータ
  • trapemiya さん、早速のご回答、ありがとうございました。

     

    今、ご案内頂いた、Pingクラスの説明を見てきました。
    残念ながら、解説部分を読みこなせる知識が無いため、まず、使用例から攻めてみようと思います。
    それには、まず同期的/非同期的に使用する辺りの理解が先決ですね。

     

    数行、引っ張り込めば旨く行く方法があると有り難いのですが、なかなかそうも参らないようで、

    ボチボチ、勉強してみます。

     

    ありがとうございました。

    2008年6月26日 6:32
  • 「C# ping」で検索されると多くの例が見つかると思います。例えば以下です。

     

    pingパケットを送受信するには?[2.0のみ、C#、VB]

    http://www.atmarkit.co.jp/fdotnet/dotnettips/418pingsend/pingsend.html

     

    同期だとpingを実行してからじっと結果を待ち、結果がわかってから次の端末にpingを投げるということの繰り返しになります。つまり、時間がかかります。非同期だとpingをとりあえず全端末に対して投げ、結果が返ってくる毎に処理を行います。非同期が断然おすすめです。

    2008年6月26日 6:43
    モデレータ
  • trapemiya さん、色々とアドバイス頂き、ありがとうございます。

     

    同期/非同期のイメージが分かりました。

     

    それから、ping 送受信例の記事も有り難いです。

    具体的に記載されており、私にも何とか理解できそうです。

    早速、トライしてみる事にします。

     

    あちこち上手に検索すれば、有用な記事が沢山あるのですね。

    これらを探し当てるノウハウも勉強の課題かと思います。

     

    お教え頂いた事柄を手がかりに、色々と試してみたいと思いますので

    この質問は、一旦クローズさせて頂くのが良いかなと考えています。

     

    また、何かにぶち当たれば質問させて頂きます。

    その節には、どうぞ宜しくお願いいたします。

    2008年6月26日 8:51
  • trapemiya さん、ありがとうございました。

     

    ご紹介頂いた資料での例は、ConsoleApplicationでの例で、私には
    少々手強いかなと心配でしたが、難なくWindowsFormsApplicationに
    持ち込み、問題解決の目処が立ちました。

     

    所で、旨く事が進むと欲が出てくるもので、もう一つ質問させてください。

     

    PING を打ってから、相手が不在の場合にタイムアウトする迄の時間を
    設定する事は可能なのでしょうか。

    可能なら、その方法を教えてください。

     

    どうぞ、宜しくお願いします。

    2008年6月26日 14:14
  • Ping.Sendには8つのオーバーロード(引数違いのメソッド)があり、タイムアウトが設定できるものも用意されているのでそれを呼んでください。

    http://msdn.microsoft.com/ja-jp/library/system.net.networkinformation.ping.send(VS.80).aspx

     

    【例】

    タイムアウト設定なし: ping.Send("PC名")

    タイムアウト設定あり: ping.Send("PC名", 10000)

    2008年6月26日 15:14
  • C.John さん、早速のご回答、ありがとうございました。

     

    今、旨く動作する事を確認させて頂きました。

     

    どうも、ありがとうございました。

     

    この件、これでクローズさせて頂きます。

    2008年6月26日 15:38