Как проверить подключение к сети?

Каков наилучший способ определения наличия сетевого подключения?

    Вы можете проверить сетевое подключение в .NET 2.0 с помощью GetIsNetworkAvailable() :

     System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable() 

    Чтобы отслеживать изменения IP-адреса или изменения в доступности сети, используйте события из classа NetworkChange :

     System.Net.NetworkInformation.NetworkChange.NetworkAvailabilityChanged System.Net.NetworkInformation.NetworkChange.NetworkAddressChanged 

    Отмеченный ответ на 100% прав, однако есть определенные случаи, когда стандартный метод обманывается виртуальными картами (виртуальная коробка, …). Также часто желательно отказаться от некоторых сетевых интерфейсов на основе их скорости (последовательные порты, модемы и т. Д.).

    Вот fragment кода, который проверяет эти случаи:

      ///  /// Indicates whether any network connection is available /// Filter connections below a specified speed, as well as virtual network cards. ///  ///  /// true if a network connection is available; otherwise, false. ///  public static bool IsNetworkAvailable() { return IsNetworkAvailable(0); } ///  /// Indicates whether any network connection is available. /// Filter connections below a specified speed, as well as virtual network cards. ///  /// The minimum speed required. Passing 0 will not filter connection using speed. ///  /// true if a network connection is available; otherwise, false. ///  public static bool IsNetworkAvailable(long minimumSpeed) { if (!NetworkInterface.GetIsNetworkAvailable()) return false; foreach (NetworkInterface ni in NetworkInterface.GetAllNetworkInterfaces()) { // discard because of standard reasons if ((ni.OperationalStatus != OperationalStatus.Up) || (ni.NetworkInterfaceType == NetworkInterfaceType.Loopback) || (ni.NetworkInterfaceType == NetworkInterfaceType.Tunnel)) continue; // this allow to filter modems, serial, etc. // I use 10000000 as a minimum speed for most cases if (ni.Speed < minimumSpeed) continue; // discard virtual cards (virtual box, virtual pc, etc.) if ((ni.Description.IndexOf("virtual", StringComparison.OrdinalIgnoreCase) >= 0) || (ni.Name.IndexOf("virtual", StringComparison.OrdinalIgnoreCase) >= 0)) continue; // discard "Microsoft Loopback Adapter", it will not show as NetworkInterfaceType.Loopback but as Ethernet Card. if (ni.Description.Equals("Microsoft Loopback Adapter", StringComparison.OrdinalIgnoreCase)) continue; return true; } return false; } 

    Microsoft Windows Vista и 7 используют NCSI (индикатор состояния сетевого подключения):

    1. NCSI выполняет поиск DNS на http://www.msftncsi.com, затем запрашивает http://www.msftncsi.com/ncsi.txt . Этот файл является текстовым файлом и содержит только текст « Microsoft NCSI ».
    2. NCSI отправляет запрос поиска DNS для dns.msftncsi.com. Этот DNS-адрес должен быть разрешен до 131.107.255.255. Если адрес не соответствует, то предполагается, что подключение к Интернету работает неправильно.

    Вызовите этот метод, чтобы проверить подключение к сети.

     public static bool IsConnectedToInternet() { bool returnValue = false; try { int Desc; returnValue = Utility.InternetGetConnectedState(out Desc, 0); } catch { returnValue = false; } return returnValue; } 

    Поместите эту строку ниже.

     [DllImport("wininet.dll")] public extern static bool InternetGetConnectedState(out int Description, int ReservedValue); 
    Давайте будем гением компьютера.