Доброго времени суток. Была подобная тема о Delphi. Отличается, конечно, мало, но проблемы она не решила. Итак, собственно, задача - проверить, есть ли соединение с интернетом. До недавнего времени для этой цели пользовал собственную функцию: Code: bool isConnected () { DWORD flags; InternetGetConnectedState( &flags, 0 ); if ( (flags & INTERNET_CONNECTION_CONFIGURED) != INTERNET_CONNECTION_CONFIGURED ) return 0; return 1; } Для неё (а именно для InternetGetConnectedState) подключается Wininet.lib. Ах да, сама по себе функция InternetGetConnectedState желаемого результата не давала, а именно постоянно, независимо от внешних условий, выдавала то ли наличие подключения, то ли его отсутствие (запамятовал уже), что и заставило писать свою проверку. Но, как оказалось на днях, такая проверка работает не для любого типа подключения (у меня всё работает прекрасно [прямое через модем], у знакомого тоже [через локалку], а вот у некой знакомой девушки оно интернет категорически не находило, и объяснить, как у неё осуществляется подключение, она не в состоянии ). Как я эту функцию не крутил, лучше не становится. Вопрос: может кто-нибудь подскажет, что неправильно в моей реализации либо укажет на рабочую альтернативу? Заранее благодарю.
Разве эта функция отличит интернет от например, локалки? можно попробовать проверить интернет с помощью gethostbyname() ну или гет на google.com
читаем внимательнее msdn: InternetGetConnectedState (особенно замечания) и, может проще тогда воспользоваться альтернативной функцией InternetCheckConnection ? отличит и не только от локалки =) INTERNET_CONNECTION_LAN INTERNET_CONNECTION_MODEM INTERNET_CONNECTION_PROXY INTERNET_RAS_INSTALLED
Проверил ради интереса, вроде нормально работает Code: if (!InternetCheckConnection("http://forum.antichat.ru", FLAG_ICC_FORCE_CONNECTION, 0) ) MessageBox(0,"Нет связи с сайтом","",MB_OK|MB_ICONERROR); else MessageBox(0,"есть связь","",MB_OK);
думаю проще всего BOOL IsOnline() { return (gethostbyname("microsoft.com") != NULL); } но есть подводные камни. например к сети прова есть подключение и днс запросы он пропускает, а для реального серфа нужен впн коннект. можно заюзаьт IcmpSendEcho, в мздн все есть
В прошлый раз эта же ф-ция (InternetCheckConnection) всегда выдавала false. Походу, где-то налажал в параметрах, ибо щас всё работает. Премного благодарю. Окончательный вариант функции: Code: bool isConnected () { if ( !InternetCheckConnection( "http://google.com", FLAG_ICC_FORCE_CONNECTION, 0) ) return 0; return 1; }