Как проверить, есть ли у вас интернет-соединение в реальном времени программно с использованием C ++ - PullRequest
6 голосов
/ 31 августа 2010

Как я могу проверить, есть ли у меня подключение к Интернету или подключение к Интернету через C ++?

Ответы [ 3 ]

4 голосов
/ 31 августа 2010

C ++ не имеет встроенных функций для этого, вам придется прибегнуть к системным API. Самый простой и очевидный способ - создать сокет и попытаться подключить его к известному IP-адресу или проверить, работает ли DNS.

Несколько полезных ссылок:
http://msdn.microsoft.com/en-us/library/ms740673(VS.85).aspx (Windows Sockets)
http://www.tenouk.com/cnlinuxsockettutorials.html (сокеты для Linux / Unix)

2 голосов
/ 31 августа 2010

Самый простой способ - попытаться подключиться к известному внешнему IP-адресу.Если в Windows произойдет сбой, функция соединения вернет SOCKET_ERROR, а WSAGetLastError обычно вернет WSAEHOSTUNREACH (то есть пакет не может быть отправлен на хост).В Linux вы получите -1, а errno будет ENETUNREACH.

0 голосов
/ 03 января 2012

Для начала вы можете подписаться на ISensIntf, чтобы проверить, есть ли у вас действующее сетевое соединение.(Дайте мне знать, если вам нужна помощь в этом. Больно регистрироваться на события и т. Д.).После этого вы можете использовать Api как IsNetworkAlive, InternetGetConnectedStateEx или InternetCheckConnection для проверки подключения к Интернету и т. Д.

Если вы используете C # или VB, то сначала добавьте ссылку на

Microsoft.VisualBasic.Code.
Microsoft.VisualBasic.Devices.Network network = new Microsoft.VisualBasic.Devices.Network();
                network.NetworkAvailabilityChanged += new Microsoft.VisualBasic.Devices.NetworkAvailableEventHandler(network_NetworkAvailabilityChanged);

...

private static void network_NetworkAvailabilityChanged(object sender, Microsoft.VisualBasic.Devices.NetworkAvailableEventArgs e)
        {
            if (e.IsNetworkAvailable)
            {
                 //network is connected.. do something..
            }
            else
            {
                //network isnt connected.. do something else.
            }

Надеюсь, это поможет

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