VB.NETでpingをとばす際に気を付けなければならないこと
お久しぶりです。
まぁ、定期的にみるブログでもないでしょうからささっと内容に
最近VB.NETで開発をしています。
その中で面白い動きをするメソッドを見つけました。
こいつ
結論から言うと、コマンドプロンプトでpingが返ってくるのに
こいつを使うと返ってこないことがある
というものです。
以前から存在は確認していましたが、
そもそもVB.NETを使う機会がなかったですし、
C#でVBのやつを使うの面倒&そんなの使わなくても実装できるので
まぁ、今回もいろいろな理由があって使っている個所がありました。
(自分が書いてないけどね)
そしてこいつが曲者でした。
先ほども上げたように、コマンドプロンプトからのpingと結果が違う
さて、ここからどういった場合に返ってこないのかと考察とかです。
このメソッド、便利に見えます。
だって、pingを返してくれなかったらFalseを返してくれて、
返してくれたらTrueを返してくれる。
何ともシンプル
しかし、そこに罠があるとは・・・・
ある環境でこのメソッドでlocalhostでpingを投げると返ってきます。
当たり前ですね。
しかし、またある環境でこのメソッドでlocalhostにpingを投げると返ってきません。
なぜでしょう?
なんとネットワークアダプタが有効でなかったり、ネットワークアダプタがネットワークに参加していない時、このメソッドではpingがあたかも帰ってきていないようなFalseになるのです。
これ作ったやつ出てこい!
って感じですね。
そもそもこのメソッドはうんこです!
すみませんん!つい本音が
解説に何やら書いてますね。
ですが、そんなことまで読み取れません。
困ったものです。
そして、この親オブジェクトの配下にはほかにIsAcailableというプロパティがあります。
My.Computer.Network.IsAvailable プロパティ
こいつもおなじような感じでしょうかね?
ちなみにネットワークに接続されていない時でもlocalhostにpingを投げた際にTrue・・・ではないですが、返ってきたよ!と知らせてくれるメソッドはあります。
Ping.Send メソッド (System.Net.NetworkInformation)
こいつでちゃんとどういったpingの応答が返ってきているか分岐して詳細を見て、判断して法がいいでしょう。
True&Falseで返してほしいならPing.Sendメソッドを自分のクラス、メソッド内で使用してTrueFalseを返すメソッドを作ってしまいましょう!
サンプルないのかって人はググって下さい
こういうのとか出てきますので
Pingを送信する: .NET Tips: C#, VB.NET