Элегантный / простой способ проверить доступность интернета или нет - PullRequest
0 голосов
/ 16 марта 2010

Я сделал быстрый поиск того, как проверить, доступен ли Интернет или нет. Большинство из них говорили о вызовах InterOp на wininet.dll.

Один из ответов указывает на пространство имен System.Net.NetworkInformation. Исследуя пространство имен, я нашел класс Ping, который можно использовать для проверки связи с нашими серверами из кода и проверки доступности сервера.

Что я хочу спросить, так это сравнение с другими решениями?

Ping soPing = new Ping();
var soPingReply = soPing.Send("www.stackoverflow.com");
if (soPingReply.Status != IPStatus.Success)
{
    // SO not available
}

Ответы [ 3 ]

1 голос
/ 16 марта 2010

Сетевое подключение не имеет ничего общего с возможностью пинговать некоторые (случайные?) Сайты. Если вы находитесь за брандмауэром, или пункт назначения таков, что пинг (или ответ) вполне может быть заблокирован, если фактический трафик не.

И даже если этот пинг работает, нет никакой гарантии, что к тому времени, когда вы захотите сделать фактический запрос, соединение все равно будет установлено. Поэтому лучше всего выполнить фактический запрос и убедиться, что вы обрабатываете любые сетевые ошибки, которые могут произойти правильно.

1 голос
/ 16 марта 2010

Попробуйте это:

[DllImport("wininet.dll")]
private extern static bool InternetGetConnectedState(out int Description, int ReservedValue);

//Creating a function that uses the API function...
public static bool IsConnectedToInternet()
{
    int Desc;
    return InternetGetConnectedState(out Desc, 0);
}
0 голосов
/ 16 марта 2010

Как долго он пытается пинговать? Имеет ли значение, если ваше приложение блокируется на 30 сек, пока оно так делает?

У вас есть интернет-соединение, но оно временно отключено?

Это интернет, который не работает, или сайт SO?

Что если локальный брандмауэр блокирует пинг?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...