目指せ非プログラマー

もう何でもごじゃれ言語

VB.NETでpingをとばす際に気を付けなければならないこと

お久しぶりです。

まぁ、定期的にみるブログでもないでしょうからささっと内容に

 

 

最近VB.NETで開発をしています。

その中で面白い動きをするメソッドを見つけました。

 

My.Computer.Network.Ping メソッド

 

こいつ

 

結論から言うと、コマンドプロンプトpingが返ってくるのに

こいつを使うと返ってこないことがある

というものです。

 

以前から存在は確認していましたが、

そもそもVB.NETを使う機会がなかったですし、

C#VBのやつを使うの面倒&そんなの使わなくても実装できるので

 

まぁ、今回もいろいろな理由があって使っている個所がありました。

(自分が書いてないけどね)

 

そしてこいつが曲者でした。

 

先ほども上げたように、コマンドプロンプトからのpingと結果が違う

 

さて、ここからどういった場合に返ってこないのかと考察とかです。

 

 

このメソッド、便利に見えます。

だって、pingを返してくれなかったらFalseを返してくれて、

返してくれたらTrueを返してくれる。

 

何ともシンプル

 

しかし、そこに罠があるとは・・・・

 

ある環境でこのメソッドlocalhostpingを投げると返ってきます。

 

当たり前ですね。

 

しかし、またある環境でこのメソッドlocalhostpingを投げると返ってきません。

 

なぜでしょう?

 

なんとネットワークアダプタが有効でなかったり、ネットワークアダプタがネットワークに参加していない時、このメソッドではpingがあたかも帰ってきていないようなFalseになるのです。

 

これ作ったやつ出てこい!

って感じですね。

 

そもそもこのメソッドはうんこです!

すみませんん!つい本音が

 

解説に何やら書いてますね。

ですが、そんなことまで読み取れません。

困ったものです。

 

そして、この親オブジェクトの配下にはほかにIsAcailableというプロパティがあります。

My.Computer.Network.IsAvailable プロパティ

 

こいつもおなじような感じでしょうかね?

 

 

 

ちなみにネットワークに接続されていない時でもlocalhostpingを投げた際にTrue・・・ではないですが、返ってきたよ!と知らせてくれるメソッドはあります。

 

Ping.Send メソッド (System.Net.NetworkInformation)

 

こいつでちゃんとどういったpingの応答が返ってきているか分岐して詳細を見て、判断して法がいいでしょう。

 

True&Falseで返してほしいならPing.Sendメソッドを自分のクラス、メソッド内で使用してTrueFalseを返すメソッドを作ってしまいましょう!

 

サンプルないのかって人はググって下さい

 

こういうのとか出てきますので

 

Pingを送信する: .NET Tips: C#, VB.NET

 

 

 

つーか、大学時代の後輩がping関連メソッド役に立たねーって言ってた気がする・・・