• ベストアンサー

pingを行うプログラム

Windows2000,VB6.0(sp5)の環境下でpingを行うプログラムの開発をしています。 API関数のIcmpSendEchoを使っているのですが、エラー時の処理がうまく制御できません。 この関数の返り値が"0"なら、エラー。"0"以外なら正常終了というようなことが HELPに書いてあったのですが、結果を"正常終了","タイムアウト","異常終了" の3つで判別するにはどのようにしたらいいのでしょうか? ご存知の方がいましたら教えてください。 よろしくお願いします。

noname#5252
noname#5252

質問者が選んだベストアンサー

  • ベストアンサー
回答No.4

こんにちは >引数PING_TIMEOUTには、タイムアウトとみなすまでの任意の時間を指定する。 >結果は、STATUSでみる。STATUSの値が =IP_REQ_TIMED_OUTの場合、結果はタイム >アウトだった。 はい。そういう理解で良いです >Case PING_TIMEOUT: >というところがありますよね。 これは正しくはIP_REQ_TIMED_OUTの間違いだと思いますよ 一度、このサンプルをコピーして、有得ないIPアドレスで テストしてみてはどうでしょうか? Public Function GetStatusCode(status As Long) As String の中のSelect Case statusでブレイクさせて statusの値がどうなっているか。確認。 次は正しいIPアドレスでテスト。 その次は、LANケーブル抜いてテスト。 "タイムアウト","正常終了","異常終了" の3パターンで返ってくるstatusが限定できると思います。 では

noname#5252
質問者

お礼

サンプルを使って実際にテストした所、きちんと理解して、処理することが出来ました。 本当にどうもありがとうございました。

その他の回答 (4)

  • todo36
  • ベストアンサー率58% (728/1234)
回答No.5

では、 > 引数PING_TIMEOUTには、タイムアウトとみなすまでの任意の時間を指定する。 > 結果は、STATUSでみる。STATUSの値が =IP_REQ_TIMED_OUTの場合、結果はタイムアウトだっ > た。 > という理解で良いのでしょうか? いいと思います。 Ping成功の判定は、Status=0であり、送信文字列と受信文字列の一致した場合 とするべきかなと。 > サンプルの中で、STATUSを確認しているモジュールがありますが、その中に > Case PING_TIMEOUT: > というところがありますよね。 > STATUSの値が =PING_TIMEOUT の時も、タイムアウトしたと見なすと言うことなのでしょ これは#1のサンプルがおかしいと思います。

参考URL:
http://support.microsoft.com/default.aspx?scid=KB;en-us;300197&
noname#5252
質問者

お礼

Ping成功の判定は、~・・・ どうもありがとうございました。 本当に助かりました。

回答No.3

こんにちは ごめんなさい、私、ちょっと間違ってましたね IP_REQ_TIMED_OUTの方はIcmpSendEchoを実行した後のステータス の値と照合するための変数でタイムアウトしたときの(11000 + 10) という数値が設定されています サンプルでは実際、PINGを実行した後にどうだったか確認しています success = Ping((Text1.Text), (Text2.Text), ECHO) 成功した場合はsuccessにIP_SUCCESSの値がはいっているはずです タイムアウトしたときにはsuccessにIP_REQ_TIMED_OUTの値がはいる。 PING_TIMEOUTの方はIcmpSendEchoの引数で応答がない場合タイムアウト するまでの待ち時間を指定します。サンプルサイトでは500なので 0.5秒です。 では

noname#5252
質問者

補足

では、 引数PING_TIMEOUTには、タイムアウトとみなすまでの任意の時間を指定する。 結果は、STATUSでみる。STATUSの値が =IP_REQ_TIMED_OUTの場合、結果はタイムアウトだった。 という理解で良いのでしょうか? サンプルの中で、STATUSを確認しているモジュールがありますが、その中に Case PING_TIMEOUT: というところがありますよね。 STATUSの値が =PING_TIMEOUT の時も、タイムアウトしたと見なすと言うことなのでしょうか?

回答No.2

こんにちは >IP_REQ_TIMED_OUT >と >PING_TIMEOUT サンプルが英語ですが良く読みましょう!(^O^) IcmpSendEchoの引数 Timeout に指定する値ですね MSDNに "The time in milliseconds to wait for replies" とあります。1000が1秒ですね サンプルの方には Private Const IP_REQ_TIMED_OUT As Long = (11000 + 10) で11010ミリ秒なので11秒ちょい Private Const PING_TIMEOUT As Long = 500 は0.5秒 という設定値というわけです。 では

noname#5252
質問者

お礼

すみません。 ひょっとして、引数のTimeoutのところには、こちら側から○msec返事が来なかったらタイムアウト!と指定できるのではないと言う事なんでしょうか? 500msecと決まっているのでしょうか? それで返事が来た時に、その時間(Statusに入ってくる値?)とCONSTで定義した値を比較して一致したら、どういう状況だったかがわかるという流れなんでしょうか? うーん、分からない点をうまく説明できないんですが、自分はずっと、引数のTimeoutの所には、任意の値を指定できると思っていました。 この考えが間違いだったのでしょうか?

noname#5252
質問者

補足

なんかよく読んでも分からないんですが・・・ それらの定数は、IcmpSendEchoを実行したときに引数のStatusとして返される値の一覧ではないのでしょうか? それらの定数を引数のTimeoutのところに指定しなさいって事なんですか?で、失敗したらTimeoutに指定した値がそのまま返って来るということなんでしょうか? 本当に馬鹿ですみません。 教えてください。 お願いします。

  • todo36
  • ベストアンサー率58% (728/1234)
回答No.1

サンプルをどうぞ

参考URL:
http://www.mvps.org/vbnet/code/internet/ping.htm
noname#5252
質問者

お礼

ありがとうございました。 もう一つ聞いてもよろしいでしょうか? きっとすごく基礎的な事だろうと思うのですが、Statusに IP_REQ_TIMED_OUT と PING_TIMEOUT とありますが、どう違うのでしょうか?

noname#5252
質問者

補足

もう一つ質問なんですが、 IcmpSendEchoの最後の引数にタイムアウト値を設定しますが、この時間待っても返答が得られなかった場合は、この関数は、引数に指定したタイムアウト値と同じ結果を返すのでしょうか?

関連するQ&A

  • CreateProcessWithLogonWの使い方を教えてください

    現在VBで開発しているのですがAPI関数であるCreateProcessWithLogonWの使い方がわからずつまずいています。 この関数はAPIビューアーにも掲載されていなくて使い方がわからずとても困っています。 ご教授ください。 開発環境 開発環境:VB6.0+SP5 OS:Windows2000+SP2

  • ルータへのPING反応

    はじめまして、ルーターで悩んで居ます。是非知恵をお貸し下さいませ。 ルーター:MICRO RESEARCH社 SUPEROPT100E 【質問内容】 上記のルータにアドレス192.168.1.1のアドレスでPCは192.168.1.10です。 WEBのアドレスから192.168.1.1と入力するとルーターの設定画面が開くので 繋がっている筈ですが。PCからPINGを送信すると=255で通ったり。タイムアウトしたりします。このルータはPINGコマンドを受信したりしなかったりですので、正常に機能出来るのでしょうか? 【PING状況】 =255 タイムアウトしました タイムアウトしました =255 ↑とこのようにLOST=50してしまいます。 どうかご解答お待ちしております。

  • テキストサービスについて

    お世話になります。 VB.NETで開発しています。APIの関数でテキストサービスの制御はできるのでしょうか?テキストサービスの制御自体がコード上で可能なのかどうかを知りたいです。どなたかご存知の方がおりましたらご教授お願いいたします。 開発環境は、VB.NET2003、IME2002になります。

  • PINGについての質問です。

    ルータを経由している状態で、クライアントのPCから大手のウェブサーバへPINGのパケットを送信しますと、正常にリクエストが帰ってくるのに、そのルータから同じウェブサーバへPINGのパケットを送信した際に、リクエストがタイムアウトになる、という場合が私の環境で見受けられます。 何故そうなっているのでしょうか?

  • コマンドプロンプト(Pingコマンド)

    ポップ数を確認するコマンドプロンプト(Pingコマンド)を教えてください。 また、タイムアウトエラーと他のエラーが交互にでるときの解決法のPingコマンドも教えてください。 よろしくおねがいします。

  • pingが通らない

    Win-XP(SP2)のAマシーン(192.168.1.101)が同じLAN内のルーター(192.168.1.1)にpingが通りません。time outになる。 ping 127.0.0.1 はOKです。 ほかの例では,「ファイヤーウォール」・「ウィルスソフト」・「TCP/IPの設定」に原因があることが多いので,それぞれ「無効」・「ウイルスソフト終了」・「再設定」とし直しましたが改善しません。 因みにWin-XP(SP2)のBマシーン(192.168.1.103)は ping 192.168.1.1 はOKです。両機ともインターネット閲覧,メール等は正常に使用できます。ただひとつ,BマシーンからAマシーンへのリモートデスクトップでログイン画面が出なくてNGです。逆はOKです。 その他,どこを見ればよいか教えていただければと思います。 なお,AマシーンはWin-2000proから順次アップデートをしてきたので,どこかで設定が狂ったのかもしれません。Win-2000のときはpingも正常にできました。(関係ないと思いますが,XP(SP2)へアップデートしたときに「回復コンソール」が壊れました。) よろしくお願いいたします。

  • VBからDTSのステップエラーの検出

    VBで作ったアプリから、SQLServer2000のDTSを実行し、 「sp_help_job」でDTSが終了したかどうかを判別しています。 この方法では、DTSが異常終了した場合、異常終了したことは 判別できるのですが、どのステップで異常が発生したかまでは わかりません。 DTSのどのステップで異常が発生したか、または各ステップごとに 正常/異常の判別を行う方法をご存知の方がいらっしゃいましたら、 教えていただけないでしょうか。 よろしくお願いいたします。

  • 拡張したRS485通信ボードである条件下にて通信タイムアウトエラーが発

    拡張したRS485通信ボードである条件下にて通信タイムアウトエラーが発生する。 開発環境:VisualBasic6.0(SP6) PC:WinXP PCにRS485通信用のPCIボード(Win32API対応)を増設しました。ポートの割り当てはCOM3、4、7、8となっています。VB6で計測器との通信プログラムを作成しました。 開発環境がインストールされてあるPC上で、開発ユーザーがログインして作成したソフトの実行ファイルを起動して使用する際には、正常に通信しております。 しかし、PC起動後に他ユーザーがログインして使用すると、通信タイムアウトエラーが発生してしまいます。ポートのオープンとボーレートの設定まではうまく出来ているようです。ただ、PC起動後に開発ユーザーがログインしてログオフし、他ユーザーがログインして使用すれば問題なく通信します。 原因がまったく分からず、困っております。どなたかご教授下さい。

  • LAN外にpingが通らない

    バッファローのルータBBR-4HGに、 1.クライアント機(クラシックMac) 192.168.11.31固定 2.自宅サーバ機(Win XP Pro SP3) 192.168.11.100固定 3.WiFiルータ 192.168.11.xx DHCP割り当て を接続しています。 回線はJCOMの160Mです。 1から2、2から1、2から3等、LAN内ではお互いにpingは通ります。 また、ゲートウェイ(192.168.11.1)に対してもpingは通ります。 しかし、1からでも、2からでも、LAN外(インターネット)にpingを打つと、 どこに対しても、すべてRequest timed outになってしまいます。 DNSサーバに対しても通りません。 念のため1や2のセキュリティソフトをOFFにして試しても、やはりダメです。 pingだけでなく、traceもすべてRequest timed outになってしまいます。 外部サイトの閲覧やメールの送受信は正常に出来ていますし、 外部から2にもちゃんと繋がります。 LAN外に対してpingが通らない原因として、どんなことが考えられるでしょうか?

  • ファイル共有はできるがPingが通らない

    Windows XP Home (SP2) × 2台 ブロードバンドルータ ADSLモデム という機器構成です。 IPAddressはDHCPで割り当てています。 1) 各PCでルータへのPingとWANへのアクセスは問題ない 2) お互いに相手PCのIPAddressへのPingはタイムアウトになる 3) 各PCにはウィルスバスター2004がインストールされているが、ウィルスバスターを終了し、且つXPのパーソナルファイアウォールを無効にしても、2)の状況は変わらない 4) お互いに「ファイル名を指定して実行」で相手PCのIPAddressを入力すると、相手PCの共有フォルダにアクセスできる。 とりあえずファイル共有はできているので困らないのですが、Pingを通すためにはどうしたらよいでしょうか。 チェックすべき点などのご教授をお願いいたします。

専門家に質問してみよう