2009-11-17 1 views

ответ

0

Вы можете попробовать найти соединение по своему усмотрению. Если это не удается отобразить сообщение об ошибке. Альтернативно, если вам действительно нужна общая проверка (например, при запуске приложения), вы можете попробовать сделать HTTP-запросы на один или несколько вездесущих сайтов, таких как google.com. (Или какой протокол вы подразумеваете под «Интернетом»).

Отъезд HttpWebRequest.

+0

мне нужно что-то похожее на InternetGetConnectedState API в окнах –

+0

HttpWebRequest иногда блокируется брандмауэром –

2

Если это настольное приложение, вы можете запросить NetworkManager (который является диспетчером сетевых подключений на большинстве настольных компьютеров Linux) по d-bus, используя библиотеку NDesk.DBus.

См Banshee для примера: http://git.gnome.org/cgit/banshee/tree/src/Core/Banshee.Services/Banshee.Networking/NetworkManager.cs

+0

На самом деле, большинство файлов в этом каталоге, вероятно, представляют интерес для Вас: http://git.gnome.org/cgit/banshee /tree/src/Core/Banshee.Services/Banshee.Networking/, например, Wicd является еще одним достаточно распространенным сетевым менеджером, к которому также можно получить доступ через dbus. –

1

Помимо того, что Майкл уже предложил для настольного приложения, вы также можете сделать что-то вроде:

foreach (NetworkInterface ni in NetworkInformation.GetAllNetworkInterfaces()) { 
     // Check that any or all of: 
     //  -ni.OperationalStatus == OperationalStatus.Up 
     //  -that ni.NetworkInterfaceType is ethernet or wireless80211 
     //  -ni.GetIPProperties() has a gateway and a DNS server 
     // ... 
} 
1

Независимо от того, что вы в конечном итоге с помощью, он выиграл Надежность.

Я вижу это постоянно с Windows Vista и 7 дома. Я использую домашнюю сеть, поэтому мои компьютеры всегда «подключены». Однако они не всегда связаны с Интернетом.

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

Я бы не стал полагаться на присутствие NetworkManager. Я ненавижу эту штуку и выключаю ее, когда могу. Он огромен, неуклюж, имеет уродливое имя, полагается на мусор, как HAL и DBUS. Ранние версии постоянно меня отключали, потому что они не работали, если вы не вошли в графический интерфейс. Он также собрал множество проблем для Wi-Fi, которые были совершенно нелепыми в операционной системе с открытым исходным кодом, которая должна была только исправить исходные ошибки. Это привело к тому, что другие wifi-менеджеры и командная строка не смогли нормально работать, и людям сказали использовать NetworkManager, только потому, что никто не беспокоился о том, что исправить ошибку!