Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.66/161: Рейтинг темы: голосов - 161, средняя оценка - 4.66
Маэстро
Вирусоборец
 Аватар для Maestro
1244 / 365 / 40
Регистрация: 06.09.2009
Сообщений: 798

Как проверить наличие соединения с Интернетом\Сетью

30.08.2010, 13:11. Показов 36038. Ответов 58
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет всем. Вопрос простой и в гугле много ссылок и решений, но то что пробовал, не работает. Я знаю эту функцию InternetGetConnectedState, пробовал так, всегда сообщает что Интернет есть, даже при выключеной сети

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <wininet.h>
#pragma comment(lib, "wininet.lib")
...
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
   DWORD flags;
   flags = INTERNET_CONNECTION_MODEM +
           INTERNET_CONNECTION_LAN +
           INTERNET_CONNECTION_PROXY;
 
   if(!InternetGetConnectedState(&flags, 0)) 
      MessageBox(0, "Нет соединения с сетью", "Внимание", MB_OK + MB_ICONWARNING);
   else
      MessageBox(0, "Соединение с сетью установлено", "Внимание", MB_OK + MB_ICONWARNING);
}
//---------------------------------------------------------------------------
А так наоборот, даже при наличии Инета, говорит что соединения нет
C++
1
2
3
4
5
6
7
8
9
10
11
12
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
   DWORD state = FLAG_ICC_FORCE_CONNECTION;
   bool OnLine = InternetCheckConnection (NULL, state, 0);
 
   if(!OnLine)
      MessageBox(0, "Нет соединения с сетью", "Внимание", MB_OK + MB_ICONWARNING);
   else
      MessageBox(0, "Соединение с сетью установлено", "Внимание", MB_OK + MB_ICONWARNING);
}
//---------------------------------------------------------------------------
Так не работает тоже
C++
1
2
3
4
5
   bool OnLine = InternetGetConnectedState(NULL,NULL); 
   if(!OnLine)
      MessageBox(0, "Нет соединения с сетью", "Внимание", MB_OK + MB_ICONWARNING);
   else
      MessageBox(0, "Соединение с сетью установлено", "Внимание", MB_OK + MB_ICONWARNING);
Как можно решить этот вопрос? Что вы мне посоветуете?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
30.08.2010, 13:11
Ответы с готовыми решениями:

Каким способом вы определяете наличие соединения с интернетом
Знаю весь интернет кишит примерами... Но вот каким &quot;хорошим&quot;, оптимальным решением пользуетесь вы товарищи? Есть ли заложенный...

Как проверить наличие Интернет соединения
Коллеги, хочу написать батник отправки эл. писем но с условием если есть Интернет. Как отправлять письма знаю. А как по условию проверить...

Как проверить наличие интернет соединения?
Доброго времени суток! Как проверить наличие интернет соединения? Нашел функцию : function NetConect: Boolean; var ...

58
1569 / 505 / 48
Регистрация: 04.04.2009
Сообщений: 1,891
07.06.2012, 14:22
Студворк — интернет-сервис помощи студентам
Avazart,

Цитата Сообщение от Avazart Посмотреть сообщение
Вот я раньше пробовал писать на IdIcmpClient
А что там в основе зацикливания? Тот же таймер? (я просто сейчас не могу проект посмотреть)
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
07.06.2012, 14:26
Поток+ Sleep()
1
1569 / 505 / 48
Регистрация: 04.04.2009
Сообщений: 1,891
07.06.2012, 14:28
Avazart, хм... А это будет применимо к TSocket'ам, как думаете?
Просто по идее это тот же таймер, только сеть не грузит.
А такие проблемы:

Цитата Сообщение от The_Immortal Посмотреть сообщение
2) На 11:56:43 (сразу после последнего лога о неудачном соединении) я подаю инет. Как видно, он схватывается. И вот ошибка после этого схватывания все равно проскакивает... Такое ощущение что события ClientSocket1Connect и ClientSocket1Error не смотрят друг на друга
Все равно, наверное, будут иметь место...
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
07.06.2012, 14:34
Сеть не грузит InternetGetConnectedState(), но тут не понятно какие недочеты могут быть...
0
1569 / 505 / 48
Регистрация: 04.04.2009
Сообщений: 1,891
07.06.2012, 14:50
Avazart,
Судя по описалову эта штука просто наличие сети проверяет... Скажем, если будет коннект к роутеру (на котором нет инета), то все равно вернет true...
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
07.06.2012, 14:55
Изменение в сетевых соединениях - а затем можно проверить с помощью Ras что изменилось -идея была такая, но не проверял.
1
1569 / 505 / 48
Регистрация: 04.04.2009
Сообщений: 1,891
07.06.2012, 14:59
Avazart, дык... А в моем случае придется это зацикливать или оно сразу будет реагировать на изменение в сетевых соединениях?
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
07.06.2012, 15:34
Ждать в потоке как приведено в примере.
1
Я Фоюмчанин ? дааааа)
 Аватар для ivan.-94
213 / 204 / 23
Регистрация: 02.06.2012
Сообщений: 1,424
Записей в блоге: 12
12.08.2012, 10:24
Цитата Сообщение от Avazart Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
String Host;
//---------------------------------------------------------------------------
void __fastcall TForm1::BPingClick(TObject *Sender)
{
Host=Edit1->Text;
Memo1->Clear();
try
 {
 IdIcmpClient1->ReceiveTimeout=1000;
 IdIcmpClient1->Host= Host;
 IdIcmpClient1->Ping();
 }
catch(EIdSocketError &se) { Memo1->Text= String(se.LastError)+" " +se.Message;}
catch(...){ Memo1->Text="Неизвестная ошибка"; }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::IdIcmpClient1Reply(TComponent *ASender, const TReplyStatus *AReplyStatus)
 
{
Memo1->Lines->Add("Ping  "+ Host);
Memo1->Lines->Add("FromIpAddress: "+ AReplyStatus->FromIpAddress);
Memo1->Lines->Add("HostName: "+ AReplyStatus->HostName);
Memo1->Lines->Add("BytesReceived: "+String(AReplyStatus->BytesReceived));
Memo1->Lines->Add("MsgCode: "+String(AReplyStatus->MsgCode));
Memo1->Lines->Add("MsRoundTripTime: "+String(AReplyStatus->MsRoundTripTime));
Memo1->Lines->Add("Msg: "+AReplyStatus->Msg);
Memo1->Lines->Add("MsgType: "+AReplyStatus->MsgType);
Memo1->Lines->Add("PacketNumber: "+String(AReplyStatus->PacketNumber));
Memo1->Lines->Add("RedirectTo: "+AReplyStatus->RedirectTo);
}
//---------------------------------------------------------------------------
Если вырубаю всю сеть то срабатывает исключение, а если только интернет, то пингуется
(по идее должен быть таймаут) хотя видно что IP неопределен
А у меня вот такой бред
"10013 Socket Error # 10013
Access denied."
в мемо пишет
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
12.08.2012, 15:15
Постоянно? Может что-то блокирует доступ в интернет?
0
Я Фоюмчанин ? дааааа)
 Аватар для ivan.-94
213 / 204 / 23
Регистрация: 02.06.2012
Сообщений: 1,424
Записей в блоге: 12
12.08.2012, 15:27
Avazart, С интернетом у меня всё отлично. Может потому что я сежу по вайфай?
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
12.08.2012, 16:13
Антивирус может не давать вашей программе доступ...
0
Я Фоюмчанин ? дааааа)
 Аватар для ivan.-94
213 / 204 / 23
Регистрация: 02.06.2012
Сообщений: 1,424
Записей в блоге: 12
12.08.2012, 16:38
Avazart, у меня его нет
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
12.08.2012, 16:48
Значит брандмаузер

Добавлено через 4 минуты

Permission denied.

An attempt was made to access a socket in a way forbidden by its access permissions. An example is using a broadcast address for sendto without broadcast permission being set using setsockopt(SO_BROADCAST).

Another possible reason for the WSAEACCES error is that when the bind function is called (on Windows NT 4.0 with SP4 and later), another application, service, or kernel mode driver is bound to the same address with exclusive access. Such exclusive access is a new feature of Windows NT 4.0 with SP4 and later, and is implemented by using the SO_EXCLUSIVEADDRUSE option.
http://msdn.microsoft.com/en-u... s.85).aspx
http://msdn.microsoft.com/en-u... 24071.aspx

Добавлено через 4 минуты
От администратора пробывали запускать?
0
Я Фоюмчанин ? дааааа)
 Аватар для ivan.-94
213 / 204 / 23
Регистрация: 02.06.2012
Сообщений: 1,424
Записей в блоге: 12
12.08.2012, 16:55
Avazart, я запустил от администратора, патом прочёл ваше сообщение и потом только нажал кнопку Всё работает
0
Маэстро
Вирусоборец
 Аватар для Maestro
1244 / 365 / 40
Регистрация: 06.09.2009
Сообщений: 798
04.09.2014, 15:11  [ТС]
Вот ещё способ есть. Функция была булевая, я немного её переделал.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
typedef BOOL(WINAPI * INETCHECKPROC)(LPDWORD lpdwFlags, DWORD dwReserved);
bool bStatusConnect;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
// Проверка соединения с интернет------------------------------------
void __fastcall GetStatusConnect()
{
   HINSTANCE hLib = NULL;
   INETCHECKPROC pfnInternetGetConnectedState;
   // грузим (в смысле загружаем) библиотеку wininet.dll
   hLib = LoadLibraryA("wininet.dll");
//   if(!hLib) return false; // если не получилось загрузить библиотеку, то возвращаем 0
 
   // получаем адрес функции InternetGetConnectedState
   pfnInternetGetConnectedState = (INETCHECKPROC)GetProcAddress(hLib, "InternetGetConnectedState");
 
   // Если не удалось получить адрес функции
//   if (!pfnInternetGetConnectedState) return false; // возвращаем 0
 
   DWORD lpdwFlags;
   // проверяем соединение
   bStatusConnect = pfnInternetGetConnectedState(&lpdwFlags, 0) != 0;
   FreeLibrary(hLib); // выгружаем библиотеку
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
   GetStatusConnect();
 
   if(bStatusConnect) Label1->Caption = "Инет есть";
   else Label1->Caption = "Инета нет";
}
//---------------------------------------------------------------------------
2
Маэстро
Вирусоборец
 Аватар для Maestro
1244 / 365 / 40
Регистрация: 06.09.2009
Сообщений: 798
27.10.2015, 19:48  [ТС]
Привет друзья.

Помогите советом. Среда разработки C++ Builder 2010 на WinXP SP3 x32. Есть исходник, проверяет наличие инета. Всё компилится, всё работает на Windows XP x32, скидываю программу другу, Windows 7 x64, при отрубленом инете\сети, роутере пишет что инет есть всегда, т.е. я так понимаю, проблема в битности системы. Как заставить программу адекватно реагировать на семёрке х64? Чего ей не хватает? Подскажите, буду благодарен за помощь.

Исходник
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "AutoShutdown1.h"
#include <winsock2.h>
//#include <windows.h>
#define ADDR "209.85.229.104" // Запрашиваемый IP (гугл, можно любой другой)
#define PORT 80
#pragma comment(lib, "ws2_32.lib")
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
 TForm1 *Form1;
 bool bStatusConnect = false;
//---------------------------------------------------------------------------
 __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { }
// Проверка соединения с интернет WinSock-----------------------------------
void GetStatusConnectWINSOCK()
{
    WSADATA wsaDATA;
    SOCKET my_socket;
    sockaddr_in server_addr;
    int len_client_sock;
 
    if(WSAStartup(MAKEWORD(2,2), &wsaDATA) != NO_ERROR){ WSACleanup(); }
 
    my_socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
 
    server_addr.sin_family = AF_INET;
    server_addr.sin_addr.s_addr = inet_addr(ADDR);
    server_addr.sin_port = htons(PORT);
    len_client_sock = sizeof(server_addr);
 
    if(connect(my_socket, (sockaddr*)&server_addr, len_client_sock) != SOCKET_ERROR) bStatusConnect = true;
    else bStatusConnect = false;
 
    shutdown(my_socket, SD_BOTH);
   closesocket(my_socket);
    WSACleanup();
}
// Нажимаем на кнопку-------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    GetStatusConnectWINSOCK();
    if(bStatusConnect) Label1->Caption = "Инет есть";
    else Label1->Caption = "Инета нет";
}
//---------------------------------------------------------------------------
0
UeArtemis
18 / 18 / 3
Регистрация: 23.09.2011
Сообщений: 205
20.08.2018, 09:47
А Виндовс не уведомляет, что провода нет, его выдернули?
Хотелось бы оформить это подобно OnWMDeviceChange для USB.
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
20.08.2018, 11:08
Пропадение интернета обнаруживается только после неудачного запроса.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.08.2018, 11:08

Как объединить сеть без интернета с сетью с интернетом через Wi-Fi
Имеется сеть 38.38.38.хх подключенная через роутер к интернету. DNS отключен. Адреса всем клиентам присвоены вручную. В сети 4 десятка...

Как выводить сообщение об отсутствии соединения с интернетом?
Здравствуйте! У меня в ViewPager загружаются 2 фрагмента. Каждый фрагмент делает асинхронный запрос, ответ парсится с помощю JSON. ...

Как можно узнать текущую скорость соединения с интернетом
Привет. Как можно узнать текущую скорость соединения с интернетом? (Ну и вывести ее, например, в лэйбл.) Имеется ввиду не пропускную...

Проблема с сетью и интернетом
Добрый день Мучаюсь уже который месяц, у меня две проблемы на двух машинах. 1. При работе в интернете появляется ошибка windows...

Неполадки с локальной сетью и интернетом!
Суть такова, имеется стационарник и ноут, как настроить правильно локалку и раздать интернет подключения VPN (L2TP) на два компа?! Что...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
59
Ответ Создать тему
Новые блоги и статьи
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru