- - PR -
C#でのPing実装
1
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-01-12 13:59
開発環境 C# 2005
http://ukamen.hp.infoseek.co.jp/Programming1/WinPing/ を参考にPingのプログラムを作っています。 変更点として、上記URLの場合ですと戻り値として情報(string)を返すように なっていますが、うまく行かなかった場合、Exceptionをthrowするように しました。
実行自体はうまく行くのですが、result=trueの場合でもping自体は通ってない 場合(相手のIPアドレスがネットワーク上にない場合)があります。 VS2005で1度目にresult=true(ただし、IPは存在しない)でブレークして ステップオーバーをし、もう一度メソッドを投げるとresult=falseで 例外がthrowされます。 このような状況からresult=trueの場合に何らかの判断が必要なのだと思うのですが 何が必要なのでしょうか? 何か手がかりをいただければと思います。よろしくお願いいたします。 以上 | ||||||||||||
|
投稿日時: 2006-01-12 14:15
VS2005を使ってるならSystem.Net.NetworkInformation.Pingを使ってみては?
| ||||||||||||
|
投稿日時: 2006-01-12 14:16
ICMPの仕様は理解されていますか?あなたの参考にしたサンプルコードは、応答データの受信処理を端折っているようです。
受信したデータのTYPEやCODE、シーケンス番号、IDをチェックして送信したECHO REQUESTに対するECHO REPLAYなのか判断する必要があります。今回の場合はルーターが返したエラー応答を受信しているのでしょう。おそらくTYPEがdestination unreachableになっていると思います。 #ってVS2005だったのか、Ping自作する必要ないじゃん orz [ メッセージ編集済み 編集者: 甕星 編集日時 2006-01-12 14:32 ] | ||||||||||||
|
投稿日時: 2006-01-12 17:28
どっとねっとふぁんさん、甕星さんありがとうございます。
Pingクラスを使用して希望の処理ができるようになりました。
C#、Pingでぐぐったら参考にしたページが出てきまして、あぁ、こうやるんだな と漠然とやってしまいました。お手を煩わせまして、すみませんでした。
http://www.atmarkit.co.jp/fwin2k/network/baswinlan012/baswinlan012_02.html を参考にReceiveBufferのByte配列を評価すればいいとは思うのですが、 自信がなかったもので。 以上 | ||||||||||||
|
投稿日時: 2006-01-13 18:21
そんなクラスが追加されたんですね…。 #自作ライブラリの Framework 2.0 対応作業中ですが、また一つ、Obsolete 属性付ける必要が…。 |
1