14

私はこの方法を持っています:

public static void testConnection()
    {
        if (System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable())
        {
            System.Windows.MessageBox.Show("This computer is connected to the internet");
        }
        else
        {
            System.Windows.MessageBox.Show("This computer is not connected to the internet");
        }
    }

接続が利用可能かどうかを教えてくれると思いますが、接続がないと確信している場合でも、常に true を返します (そして最初のメッセージを出力します)。私が間違っていることは何ですか?

PS: 私はまだ C# を学んでいます。

4

6 に答える 6

16

私はこの方法がより適切だと思います:

   public static bool getIsInternetAccessAvailable()
    {
        switch(NetworkInformation.GetInternetConnectionProfile().GetNetworkConnectivityLevel())
        {
            case NetworkConnectivityLevel.InternetAccess:
                return true;
            default:
                return false;
        }
    }
于 2014-10-17T11:30:22.787 に答える
12

私が間違っている場合は訂正してください。ただし、使用している方法はネットワーク接続を確認することであり、必ずしもインターネット接続を確認する必要はありません。あなたが何らかのネットワーク上にいる場合、インターネットが利用可能かどうかに関係なく、これはtrueを返すと思いますか?これを参照してください。

インターネット接続をチェックする1つの方法は次のとおりです。

private bool IsInternetAvailable()
{
    try
    {
        Dns.GetHostEntry("www.google.com"); //using System.Net;
        return true;
    } catch (SocketException ex) {
        return false;
    }
}

上記のコードは、次の投稿で(VB.NetのJoacim Andersson [MVP]からのコメントを読んで)見つけることができます。

注:最新の編集はAceInfinityによって提案されましたが、コミュニティレビューで拒否されました。私の評判はこれを無効にするには低すぎるので、自分で変更を加えました。

于 2012-11-19T16:04:22.037 に答える
3

名前空間Windows.Networking.Connectivity.NetworkInformationではなくを使用していることに注意してください。System.Net.NetworkInformation

public bool checkInternetAccess()
{
    var connectivityLevel = Windows.Networking.Connectivity.NetworkInformation
                           .GetInternetConnectionProfile().GetNetworkConnectivityLevel();

    return connectivityLevel == NetworkConnectivityLevel.InternetAccess;
}

基本的にventura8が言ったこと。名前空間に言及して彼のソリューションにコメントしますが、十分な評判がありません。

于 2015-08-20T12:38:50.980 に答える
3

msdnから:

デバイスまたはコンピューターが有用なネットワークに接続されていなくても、使用可能であると見なされ、GetIsNetworkAvailable が true を返す場合はよくあります。

これらの例の1つがあなたのケースかもしれません:

たとえば、アプリケーションを実行しているデバイスがプロキシを必要とするワイヤレス ネットワークに接続されているが、プロキシが設定されていない場合、GetIsNetworkAvailable は true を返します。GetIsNetworkAvailable が true を返す別の例は、ハブまたはルーターがアップストリーム接続を失ったハブまたはルーターに接続されているコンピューターでアプリケーションが実行されている場合です。

于 2012-11-19T15:59:41.393 に答える
1

接続が利用可能かどうかはわかりますが、接続がないと確信している場合でも、常にtrueを返します(そして最初のメッセージを出力します)。

「接続」の意味については、マニュアルとは異なる意見があります。オペレーティングシステムに関する限り、NICにパッチが適用されたイーサネットケーブルが接続されている場合、ワイヤレスカードがワイヤレスアクセスポイントに接続されている場合、または接続がアクティブな場合に接続があります。

マニュアルもこれを説明しています:

NetworkInterface.GetIsNetworkAvailable

ネットワーク接続が利用可能かどうかを示します

インターネット接続を検出する場合は、 WinINet APIInternetGetConnectedState()の(またはInternetCheckConnection()、特定のホストのアクセス可能性を確認するための)メソッドを確認してください。

于 2012-11-19T16:05:03.710 に答える
1

MSDN から (強調は私のものです):

ネットワーク インターフェイスが「up」とマークされていて、ループバックまたはトンネル インターフェイスでない場合、ネットワーク接続は利用可能であると見なされます。

「接続」がインターネット接続を意味する場合はDllImport、関数InternetCheckConnectionまたはInternetQueryOption.

代わりに、コンピュータが有用なLAN に接続されているかどうかを知るだけでよい場合は、ネットワーク接続を自分で繰り返し、( NetworkInterfaceTypeとを使用しIsReceiveOnlyOperationalStatus) 興味のないものもフィルタリングすることをお勧めします。

于 2012-11-19T16:02:18.743 に答える