C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[16]: ネット接続中かを確認する方法


(過去ログ 125 を表示中)

[トピック内 21 記事 (1 - 20 表示)]  << 0 | 1 >>

■74341 / inTopicNo.1)  ネット接続中かを確認する方法
  
□投稿者/ good (1回)-(2014/12/19(Fri) 08:52:08)

分類:[C#] 

ネット接続中かを確認する方法を調べて下記のサンプルを参考にしているのですが、オフラインでも”接続中”となってしまいます。

どこが間違っているのでしょうか?
 

if (System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable())
{
    MessageBox.Show( "接続中" );
}
else
{
    MessageBox.Show( "オフライン" );
}

引用返信 編集キー/
■74343 / inTopicNo.2)  Re[1]: ネット接続中かを確認する方法
□投稿者/ 774RR (200回)-(2014/12/19(Fri) 09:30:45)
あなたの意図する「接続中」の定義と
GetIsNetworkAvailable の返却する接続中の定義が異なる だけだろう。
http://msdn.microsoft.com/ja-jp/library/system.net.networkinformation.networkinterface.getisnetworkavailable.aspx

たとえば VirtualBox をインストールしたホストマシンにおいて
VirtualBox Host-Only Network を有効にしておくと、この関数は接続中になる。

この関数の仕様は
・ネットワーク管理者的にはごく自然で適切 だと思うが
・一般ユーザ的には限りなく無意味で役に立たない (ほぼ常に真になる) だと思う。

あなたの意図するネット接続中の定義に適合するような検査をしないと意味が無いだろう。
まずは「接続中」とは何であるか定義してくれ。
引用返信 編集キー/
■74345 / inTopicNo.3)  Re[1]: ネット接続中かを確認する方法
□投稿者/ kiku (40回)-(2014/12/19(Fri) 09:44:51)

下記ページの下の方にある「実際に接続を試みることにより確かめる」で、
やりたいことを実現できませんか?

http://dobon.net/vb/dotnet/internet/detectinternetconnect.html

引用返信 編集キー/
■74346 / inTopicNo.4)  Re[2]: ネット接続中かを確認する方法
□投稿者/ 優希(ゆき) (32回)-(2014/12/19(Fri) 09:49:30)
 外部or内部ネットワークに
 A部署のデータ鯖に
 支社のネットワークに
 FTPでのWeb鯖に
 プリンターに
etc…

探せば、数えきれないぐらい定義できそうですねww
引用返信 編集キー/
■74347 / inTopicNo.5)  Re[2]: ネット接続中かを確認する方法
□投稿者/ 優希(ゆき) (33回)-(2014/12/19(Fri) 09:53:57)
No74345 (kiku さん) に返信
>
> 下記ページの下の方にある「実際に接続を試みることにより確かめる」で、
> やりたいことを実現できませんか?
>
> http://dobon.net/vb/dotnet/internet/detectinternetconnect.html
>

これって外部ネットワークに鯖か何かないとできないよね?

他社の管理してる鯖に接続しに行ったら、大問題にもなりかねますよね?
引用返信 編集キー/
■74366 / inTopicNo.6)  Re[3]: ネット接続中かを確認する方法
□投稿者/ 774RR (201回)-(2014/12/19(Fri) 20:44:39)
元発言者氏の最初の発言には The Internet に接続されているかとは書かれていないので
外野が想像をたくましくしてもあまり意味が無いというかなんというか。
# 他社サイトに接続可能かどうか、ってのは俺もオーバースペックだと思うけど。

ネットワークデバイス的には非 IP ネットワークに接続されていても問題ないわけで
その意味で GetIsNetworkAvailable の仕様はきわめて順当で適切だと思う。
それは一般人的「ネットワーク接続」とは解釈が異なっているわけだけど。

俺が「ネット接続」有無を判断するとしたら
・link up で、かつ IPV6/V4 が有効で、かつ DNS が解決できる
 ようなネットワーク接続が1個以上存在する
ってことになりそうだが、それが元発言者氏の想定する「ネット接続」なのかどうかは不明なわけで
やっぱ元発言者氏にとっての「ネット接続」の定義をきっちりしてもらうしかなさそう。

# ウチの部内の「試験目的 LAN 」には DNS を置いていないので上記判定では「接続なし」となるが
# まあその辺は要望次第っつか案件次第っつか。
引用返信 編集キー/
■74371 / inTopicNo.7)  Re[4]: ネット接続中かを確認する方法
□投稿者/ good (2回)-(2014/12/19(Fri) 23:40:43)


わわー

たくさんのお返事ありがとうございます。

会話が高度すぎて私にはついていけません。

目指すは純粋に、一般的なインターネットに接続ができている状態か?、です。

私が見つけたサンプルが、そんな選択肢のある方法だったんですかね。

c#の既存の関数で、今オンラインかどうかを調べる的な命令はないのでしょうか?


引用返信 編集キー/
■74372 / inTopicNo.8)  Re[5]: ネット接続中かを確認する方法
□投稿者/ Azulean (386回)-(2014/12/19(Fri) 23:46:05)
No74371 (good さん) に返信
> 目指すは純粋に、一般的なインターネットに接続ができている状態か?、です。
(略)
> c#の既存の関数で、今オンラインかどうかを調べる的な命令はないのでしょうか?

お望みのことをそのまま実現する関数、メソッドはありません。
実のところ、「インターネットに接続できているか?」の定義自体、一般的なものはありません。
従って、このように発散するような状況になっているのです。

WiFi や有線 LAN につながっているからといって、外部ネットワークまで通じている保障はないし、一度通じたとしても次のタイミングでは切断されているかもしれない。
たとえば、スマホで圏外になるような地下鉄に乗っているなら、刻々と状況は変わるでしょう。


さて、どういう理由から「オンラインかどうか調べる」必要があったのでしょうか?
その背景を書いていただいた方が、より建設的な話ができるかと思います。
引用返信 編集キー/
■74375 / inTopicNo.9)  Re[6]: ネット接続中かを確認する方法
□投稿者/ 774RR (202回)-(2014/12/20(Sat) 07:36:24)
セキュリティ的に厳しい社内 LAN から社外に接続するような場合 proxy が制約かけていて
www.example.com には接続できても www.example.co.jp には接続できないなど普通にある。

おいらのお出かけ用 note PC には WiMAX カードが入っていて、でも契約してないから
WiMAX の page 「契約しないとよそにはつながらないよ」だけ接続できるわけだが、これは
接続ありなのかなしなのか、どっちだろう。

「接続あり」の定義が無いから判定関数など作れないんだ。

ネットワークの話においては [事前に状況をチェックする] のは限りなく無駄・無意味で
最初から [目的の相手に接続する] のが最短最適。その意味で
> その背景を書いていただいた方が、より建設的な話ができるかと思います。
ってこと。
引用返信 編集キー/
■74376 / inTopicNo.10)  Re[7]: ネット接続中かを確認する方法
□投稿者/ good (3回)-(2014/12/20(Sat) 10:24:01)
Azuleanさん
774RR さん

大変勉強になります。
なんとなく背景が観えてきた気がします。

オンラインかを知りたい理由は、実行すると同時に特定のサイトへ接続するんですけど、オフラインで実行するとエラー表示となってしまうのが不恰好なので、特定サイトへ接続する前にオンラインかどうかを判定してオフラインだった場合はメッセージを表示して処理を止めるような流れを作りたかったんです。

割と有りがちなものかと思っていたんですけど、いざ探すとなかなかサンプルがみつかりませんでした。
案外難しい部類の処理なのでしょうか?
引用返信 編集キー/
■74377 / inTopicNo.11)  Re[8]: ネット接続中かを確認する方法
□投稿者/ WebSurfer (439回)-(2014/12/20(Sat) 10:44:43)
No74376 (good さん) に返信

> オフラインで実行するとエラー表示となってしまうのが不恰好なので、
> オフラインで実行するとエラー表示となってしまうのがなので、特定サイトへ接続
> する前にオンラインかどうかを判定してオフラインだった場合はメッセージを表示して
> 処理を止めるような流れを作りたかったんです。

「特定サイトへ接続」できるか否かで「ネット接続中」を判定すればいいのではないですか?

「オフラインで実行するとエラー表示となってしまうのが不恰好」というのが問題であれば、
そのエラーメッセージをかっこよく(?)すれば済む話のような気がしますが、それではダメ
なんですか?
引用返信 編集キー/
■74378 / inTopicNo.12)  Re[9]: ネット接続中かを確認する方法
□投稿者/ good (5回)-(2014/12/20(Sat) 10:52:21)
WebSurfer さん

お返事ありがとうございます。

おっしゃる通り、そのサイトに接続できるかを調べればいいので始めはその線で検索しようとしてたんですけど、検索ワードが悪いのかなかなか見つからず、そこから「オンラインかどうかを調べる」系の検索ワードで最初のサンプルに行き着きました。

特定サイトに接続できているかで参考になるサイト等をご紹介頂ければ助かります。
よろしくお願い致します。
引用返信 編集キー/
■74379 / inTopicNo.13)  Re[10]: ネット接続中かを確認する方法
□投稿者/ WebSurfer (440回)-(2014/12/20(Sat) 11:16:18)
No74378 (good さん) に返信

> 特定サイトに接続できているかで参考になるサイト等をご紹介頂ければ助かります。

その「特定サイト」が何だか分からないのにそういうことを聞かれても・・・

多分要求を出して接続できれば何らかの応答が帰ってくるのでしょうから、応答
が帰ってきたら「接続できている」と判定してはいかがですか?

質問者さんの作ったアプリで「特定サイト」に接続はできるのですよね? であ
れば、やり方は質問者さんがわかるはずなのですが。
引用返信 編集キー/
■74380 / inTopicNo.14)  Re[10]: ネット接続中かを確認する方法
□投稿者/ Azulean (387回)-(2014/12/20(Sat) 11:35:35)
No74378 (good さん) に返信
> 特定サイトに接続できているかで参考になるサイト等をご紹介頂ければ助かります。

774R さんがこう書かれていました。
> ネットワークの話においては [事前に状況をチェックする] のは限りなく無駄・無意味で
> 最初から [目的の相手に接続する] のが最短最適。


目的のサイトへの事前の接続判定が成功したところで、次の瞬間にネットワークが不通になってエラーページが表示されることはあり得ます。
(可能性は下がりますが)

当てずっぽうなことを書いてしまいますが、WebBrowser を使ってページを表示しているのなら、その WebBrowser のイベントを監視した方がよいのでは?
引用返信 編集キー/
■74383 / inTopicNo.15)  Re[11]: ネット接続中かを確認する方法
□投稿者/ good (6回)-(2014/12/20(Sat) 18:16:03)
Azuleanさん

WebBrowserは使わないプログラムなので、なるべくなら確認だけの為にWebBrowserは使わずに確認したいのですが、確認する為に必要ならと思ってWebBrowserを使ったものを作ってみましたが、オフラインで読み込もうとすると結局ブラウザがフリーズして中断してしまいます。

c#ってこんなニーズのありそうな処理も簡単には出来ないんですね・・・・
引用返信 編集キー/
■74384 / inTopicNo.16)  Re[12]: ネット接続中かを確認する方法
□投稿者/ Azulean (388回)-(2014/12/20(Sat) 19:02:02)
2014/12/20(Sat) 19:02:49 編集(投稿者)

No74383 (good さん) に返信
> WebBrowserは使わないプログラムなので、なるべくなら確認だけの為にWebBrowserは使わずに確認したいのですが、
> 確認する為に必要ならと思ってWebBrowserを使ったものを作ってみましたが、オフラインで読み込もうとすると結局ブラウザがフリーズして中断してしまいます。

WebBrowser を使っていないのなら無理に使う必要はありません。
部分的に捉えず、あなたが何をしているのか、具体的なクラス名、あるいはコードの断片でも結構ですので提示してください。


> c#ってこんなニーズのありそうな処理も簡単には出来ないんですね・・・・

C# に限らず、どの言語にもありません。
その理由はすでにこのスレッドに書かれています。
引用返信 編集キー/
■74385 / inTopicNo.17)  Re[13]: ネット接続中かを確認する方法
□投稿者/ good (7回)-(2014/12/20(Sat) 19:25:16)

>Azuleanさん
>C# に限らず、どの言語にもありません。
>その理由はすでにこのスレッドに書かれています。

私はほかの言語全部知ってるわけではないですが、少なくともひとつはこのような掲示板で質問されてすぐ短いコードを答えているところを知っています。
残念ながらc#ではないですが、どの言語にもないわけではなさそうですね。



あの・・・私そんな難しい質問してるのでしょうか?

例えばyahoo.co.jpに接続するとして、いきなりつなごうとするとインターネットに接続していない時にエラー表示となってしまうので、接続する前にyahoo.co.jpに接続できる状態かを調べる方法、もしくは参考になるサイトを教えてください、という事なんですが・・・

引用返信 編集キー/
■74386 / inTopicNo.18)  Re[14]: ネット接続中かを確認する方法
□投稿者/ Azulean (389回)-(2014/12/20(Sat) 19:41:36)
2014/12/20(Sat) 19:47:27 編集(投稿者)

No74385 (good さん) に返信
> あの・・・私そんな難しい質問してるのでしょうか?

インターネットやネットワークに対する知識を身につけていただいた方がよいのかもしれませんね。
(知ることで、質問していることを達成しても、役立たないことが多い(役に立つケースもあります)ということが理解できると思います)


> 例えばyahoo.co.jpに接続するとして、いきなりつなごうとするとインターネットに接続していない時にエラー表示となってしまうので、
> 接続する前にyahoo.co.jpに接続できる状態かを調べる方法、もしくは参考になるサイトを教えてください、という事なんですが・・・

ですから、「事前判定において安定的な確立した方法は存在しません」。
これは常識と言っていいレベルの話です。
その常識がなぜなのかを真に理解するためには、前述したように、インターネットはどのようにできているのか、それを介して通信するためにはどのような手段が必要なのかを学んでいただかないといけません。


・何を以て接続されていると判定するかの一般的な合意はない。
 方法案としては、すでに上げられているように DNS で特定のドメインの IP アドレスを得る は有力候補ですが、それだけで保障されるのは名前解決ができることであり、外部接続が可能かどうかは保障できません。
・事前に判定したとして、次にブラウザでアクセスできるとは限らない。
 プロキシ設定が必要といった環境では、特定サイトにアクセスを制限しているかもしれません。
 また、次の瞬間には切断されているかもしれないので、エラーページ表示を避けることはできません。


さて、「判定が安定しなくてもいいから、少しでもマシにしたい」ということであれば、すでに提示されている「実際に接続を試みることにより確かめる」でよいのでは?と思います。(読みました?)
もちろん、接続先アドレスはあなたが望むサイトに合わせて変えてください。
http://dobon.net/vb/dotnet/internet/detectinternetconnect.html
引用返信 編集キー/
■74387 / inTopicNo.19)  Re[14]: ネット接続中かを確認する方法
□投稿者/ 774RR (203回)-(2014/12/20(Sat) 19:47:09)
接続しようとしたらプログラム的にはエラーになる(当然)
エラーを表示しない・エラーで停止しないようにすれば良いだけのことで、何が難しいのかが良くわからない。

・接続しようとしたら Yahoo が落ちてた・・・なんてときにどうすんの?
・ファイアウオールソフトが Yahoo を拒絶する設定になってたらどうすんの?
・Yahoo 自体は生きてても NSP の DNS が落ちてたらどうすんの?
ってことで実は事前チェックなんてのは「仕様レベルで」簡単ではない。
簡単に答えが返ってくるサイトって問題を深く考えてない証拠だと思う。

どうしてもチェックしたかったら No74366
>・link up で、かつ IPV6/V4 が有効で、かつ DNS が解決できる
> ようなネットワーク接続が1個以上存在する
でいいぢゃん。上記のような理由により限りなくチェックするだけ無駄だけど。
System.Net.NetworkInformation.IPInterfaceProperties とかでなんとかなるよ。
引用返信 編集キー/
■74390 / inTopicNo.20)  Re[15]: ネット接続中かを確認する方法
 
□投稿者/ good (8回)-(2014/12/20(Sat) 21:21:19)
Azuleanさん
774RR さん

こんな初心者に対してたくさんの書き込みありがとうございます。
どうも話が噛みあわないなと思ったら、どうやら「エラーが表示される=サイト上のエラー」と誤解されていたのですね。

エラーが表示されるとは、アプリでのエラーです。
趣旨がうまく伝わられなくて申し訳なかったです。


サイトがつながらないのに読み込みたくない処理まで進んでしまって、すんなり終了してくれずエラーが発生していました。
なのでサイトを読み込む前に読み込める状態がどうか、最初に1度だけ、オンラインかオフラインかを知りたかっただけで、引き続きずっと監視したわけでもないです。

自分なりに検索を繰り返して、Environment.Exit(0)という命令にたどりつき、アッサリ解決しました。
ありがとうございました。
解決済み
引用返信 編集キー/

次の20件>
トピック内ページ移動 / << 0 | 1 >>

管理者用

- Child Tree -