2010-03-16 2 views
0

Я сделал быстрый поиск того, как проверить, доступен ли Интернет или нет. Большинство из них говорили о том, чтобы звонить в 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 
} 

ответ

1

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

[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

И как это решение сравнивается с тем, что я дал? – Trainee4Life

+0

использует стандартный метод win32. Проблема в том, что вам не нужно отвечать на вопрос «что означает« доступный интернет »? Что делать, если у вас есть интернет, но так временно? вы должны реализовать более сложную логику здесь (проверьте несколько сайтов для ex) или полагайтесь на встроенный в Windows инструмент. Что касается меня, я бы предпочел проверить наличие конкретного сайта/сервера, в котором я нуждаюсь, но не весь интернет. Эта информация, как правило, более полезна. (Конечно, не в случае, если вы строите поисковую систему :))) –

+0

«Я действительно хотел проверить подключение к одному из сайтов клиента. Если он присутствует, загрузите его, а затем загрузите автономную страницу в управление веб-браузером ". Как вам было предложено, проверка того, что конкретный сайт/сервер всегда является лучшим выбором. Как мне это сделать? – Trainee4Life

1

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

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

+0

Я действительно хотел проверить подключение к одному из сайтов клиента. Если он присутствует, загрузите его, иначе загрузите автономную страницу в элемент управления веб-браузера. – Trainee4Life

+0

такой же предмет. Просто попробуйте загрузить его. Если это не удастся, покажите офлайн-страницу, если это не так, настоящая. – jwenting

0

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

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

Это интернет, который вниз или является сайтом SO?

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

+0

В перечислении IPStatus имеется довольно много полей состояния. Может быть, это вернет что-то другое, кроме успеха, для случаев, о которых вы упомянули. Также во время pinging можно также указать тайм-аут. – Trainee4Life

Смежные вопросы