Каков наилучший способ проверить подключение к Интернету с помощью .NET? - PullRequest
203 голосов
/ 09 января 2010

Какой самый быстрый и эффективный способ проверить подключение к Интернету в .NET?

Ответы [ 24 ]

0 голосов
/ 29 апреля 2017

Для моего приложения мы также тестируем, загружая крошечный файл.

string remoteUri = "https://www.microsoft.com/favicon.ico"

WebClient myWebClient = new WebClient();

try
{
    byte[] myDataBuffer = myWebClient.DownloadData (remoteUri);
    if(myDataBuffer.length > 0) // Or add more validate. eg. checksum
    {
        return true;
    }
}
catch
{
    return false;
}

Также. Некоторые интернет-провайдеры могут использовать промежуточный сервер для кэширования файла. Добавить случайный неиспользуемый параметр, например. https://www.microsoft.com/favicon.ico?req=random_number Может предотвратить кеширование.

0 голосов
/ 07 марта 2017
public static bool Isconnected = false;

public static bool CheckForInternetConnection()
{
    try
    {
        Ping myPing = new Ping();
        String host = "google.com";
        byte[] buffer = new byte[32];
        int timeout = 1000;
        PingOptions pingOptions = new PingOptions();
        PingReply reply = myPing.Send(host, timeout, buffer, pingOptions);
        if (reply.Status == IPStatus.Success)
        {
            return true;
        }
        else if (reply.Status == IPStatus.TimedOut)
        {
            return Isconnected;
        }
        else
        {
            return false;
        }
    }
    catch (Exception)
    {
        return false;
    }
}

public static void CheckConnection()
{
    if (CheckForInternetConnection())
    {
        Isconnected = true;
    }
    else
    {
        Isconnected = false;
    }
}
0 голосов
/ 23 апреля 2013
bool bb = System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable();

if (bb == true)
    MessageBox.Show("Internet connections are available");
else
    MessageBox.Show("Internet connections are not available");
0 голосов
/ 05 октября 2015

Я бы не подумал, что это невозможно, просто не так просто.

Я построил что-то вроде этого, и да, это не идеально, но первый шаг важен: проверить, есть ли сетевое соединение. Windows Api не делает большую работу, так почему бы не сделать лучшую работу?

bool NetworkIsAvailable()
{
    var all = System.Net.NetworkInformation.NetworkInterface.GetAllNetworkInterfaces();
    foreach (var item in all)
    {
        if (item.NetworkInterfaceType == NetworkInterfaceType.Loopback)
            continue;
        if (item.Name.ToLower().Contains("virtual") || item.Description.ToLower().Contains("virtual"))
            continue; //Exclude virtual networks set up by VMWare and others
        if (item.OperationalStatus == OperationalStatus.Up)
        {
            return true;
        }
    }

    return false;
}

Это довольно просто, но действительно помогает улучшить качество проверки, особенно если вы хотите проверить различные конфигурации прокси.

Итак:

  • Проверьте, есть ли сетевое подключение (сделайте это действительно хорошим, возможно, даже отправьте журналы разработчикам, если есть ложные срабатывания для улучшения функции NetworkIsAvailable)
  • HTTP Ping
  • (циклическая прокси-конфигурация с HTTP-пингами на каждом)
...