2

プラットフォーム: WPF (.NET 4.5)

できるだけ早くインターネット接続を確認するために、次の関数を使用します。

    [DllImport("wininet.dll")]
    public extern static bool InternetCheckConnection(string lpszUrl, int dwFlags, int dwReserved);

問題は、インターネットに接続していてプログラムが実行されている場合、 (予想どおり) trueInternetCheckConnectionが返されることですが、プログラムをしばらくスリープさせ、この瞬間にコンピューターをインターネットから切断し、その後、もう一度接続を確認してください。まだtrueが返されています。

どうして?!

問題を示すコードを用意しました。

using System;
using System.Runtime.InteropServices;
using System.Threading;

namespace InternetCheckConnectionTest
{
    class Program
    {
        [DllImport("wininet.dll")]
        public extern static bool InternetCheckConnection(string lpszUrl, int dwFlags, int dwReserved);

        static void Main(string[] args)
        {
            string www = "http://www.google.com/";

            Console.WriteLine("Checking connection...");
            bool connected = InternetCheckConnection(www, 1, 0);

            Console.WriteLine("Connection check returned " + connected.ToString());

            TimeSpan ts = new TimeSpan(0, 0, 20);
            Console.WriteLine("\nYou have " + ts.TotalSeconds.ToString() + " seconds to (dis)connect from/to the Internet.\n");
            Thread.Sleep(ts);

            Console.WriteLine("Checking connection once again...");
            connected = InternetCheckConnection(www, 1, 0);
            Console.WriteLine("Connection (2nd) check returned " + connected.ToString());
        }
    }
}

このプログラムを開始する前に、インターネットに接続していることを確認してください。
このメッセージの後:

インターネットとの接続 (切断) には 20 秒かかります。

インターネットから切断します。インターネットから切断されていてもTrueInternetCheckConnection(www, 1, 0)を返すことがわかります。問題はなぜですか?

4

0 に答える 0