トップ回答者
ネットワーク上でクライアントが稼働しているのを確認する方法

質問
-
みなさん、初めまして。
数日前に、C# Express Editionをインストールし、十何年かぶりにプログラムを
書き出しています。 Windows ベースのプログラムを書くのは初めてです。
宜しくお願いします。
早速ですが、ネットワークにあるクライアントの稼働中/停止中を確認する、旨い方法が
分からなくて困っています。
今、ネットワークパスを指定して、目的のフォルダーの存在を調べる事で目的は達成して
いますが、応答に20数秒要しています。
また、エラー処理(try・・・catch,System.IO.Directory.GetFiles)を使ってトライしてみま
したが、やはり時間が掛かるのは同じようです。
迅速に、目的のクライアントが稼働していない事を確認したいのです。
何か、良い方法は無いでしょうか。
手荒い方法ですが、ping コマンドを打って、その応答から判断するような方法もどうかな
と考えましたが、まだまだ私の知識では手に負えません。
手頃で利口な方法をご教授頂けたらと思っています。
みなさん、どうか宜しくお願いいたします。
回答
-
trapemiya さん、色々とアドバイス頂き、ありがとうございます。
同期/非同期のイメージが分かりました。
それから、ping 送受信例の記事も有り難いです。
具体的に記載されており、私にも何とか理解できそうです。
早速、トライしてみる事にします。
あちこち上手に検索すれば、有用な記事が沢山あるのですね。
これらを探し当てるノウハウも勉強の課題かと思います。
お教え頂いた事柄を手がかりに、色々と試してみたいと思いますので
この質問は、一旦クローズさせて頂くのが良いかなと考えています。
また、何かにぶち当たれば質問させて頂きます。
その節には、どうぞ宜しくお願いいたします。
すべての返信
-
pingで良いと思いますよ。定期的にpingを打って応答がなければメールで通知するようなことも行われています。
以下にサンプルがあります。
Ping クラス
http://msdn.microsoft.com/ja-jp/library/system.net.networkinformation.ping(VS.80).aspx
-
「C# ping」で検索されると多くの例が見つかると思います。例えば以下です。
pingパケットを送受信するには?[2.0のみ、C#、VB]
http://www.atmarkit.co.jp/fdotnet/dotnettips/418pingsend/pingsend.html
同期だとpingを実行してからじっと結果を待ち、結果がわかってから次の端末にpingを投げるということの繰り返しになります。つまり、時間がかかります。非同期だとpingをとりあえず全端末に対して投げ、結果が返ってくる毎に処理を行います。非同期が断然おすすめです。
-
trapemiya さん、色々とアドバイス頂き、ありがとうございます。
同期/非同期のイメージが分かりました。
それから、ping 送受信例の記事も有り難いです。
具体的に記載されており、私にも何とか理解できそうです。
早速、トライしてみる事にします。
あちこち上手に検索すれば、有用な記事が沢山あるのですね。
これらを探し当てるノウハウも勉強の課題かと思います。
お教え頂いた事柄を手がかりに、色々と試してみたいと思いますので
この質問は、一旦クローズさせて頂くのが良いかなと考えています。
また、何かにぶち当たれば質問させて頂きます。
その節には、どうぞ宜しくお願いいたします。
-
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)