| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Для новичков > Отслеживание подключения в сети |
| Автор: razumsap 8.1.2008, 17:18 |
| У нас часто пропадает инет на работе, хотелось бы написать программу, которая показывала наличие подключения (графически). Подскажите пожалуйста функцию или ещё что-нибуд, желательно чтоб можно было реализовать на Делфи 6. Или может кто уже сделал такую программу - поделитесь |
| Автор: tommy256 8.1.2008, 18:18 |
| А что будет показываться на графике, On or Off? Можно просто без графика, например если инет пашет, то кнопочка зелёная, если нет то красная Посмотри в drkb, там есть похожее |
| Автор: Yanis 8.1.2008, 18:23 |
| razumsap Пингуй Яндекс. |
| Автор: remax 8.1.2008, 20:01 | ||
примерно так
|
| Автор: Alexeis 8.1.2008, 20:10 |
лучше гугл, так надежнее. |
| Автор: remax 8.1.2008, 21:08 |
| Да, возможно использования только InternetGetConnectedState будет мало. В MSDN написано следующее: "You cannot rely solely on the fact that InternetGetConnectedState returning TRUE means that you have a valid active Internet connection. It is impossible for InternetGetConnectedState to determine if the entire connection to the Internet is functioning without sending a request to a server. This is why you need to send a request to determine if you are really connected or not. You can be assured however that if InternetGetConnectedState returns TRUE, that attempting your connection will NOT cause you to be prompted to connect to the default Internet Service Provider." т.е. Вы не можете полагаться только на тот факт, что если функция InternetGetConnectedState возвращает TRUE, это означает наличие активного соединения с Интернет. InternetGetConnectedState не может определить, функционирует ли соединение с Интернет без обращения к серверу... Для полной проверки надо будет еще пингануть. Т.е. первым пунктом используем InternetGetConnectedState, а затем если TRUE, пробуем пинговать. Для этого необходимо использовать протокол ICMP: утилиты ping, traceroute; (так мы узнаем о доступности какого-либо узла). Ключевые фунции - IcmpSendEcho() (реализована в ICMP.DLL), InternetCheckConnection() (реализована в WININET.DLL) |
| Автор: remax 8.1.2008, 23:22 |
Да, для полноценной проверки и этого может быть недостаточно. Автор темы четко не определил понятие "пропал Интернет". Поэтому, как положено - от простого к сложного. Начать с InternetGetConnectedState. Если этого будет недостаточно - IcmpSendEcho(), InternetCheckConnection(). Если этого будет мало, тогда будем думать дальше. Надо решать проблемы по мере поступления! Добавлено через 3 минуты и 1 секунду В своих прогах, работающих с интернетом, мне обычно хватает InternetGetConnectedState. И, как не странно, пока сбоев не было... Хотя сама Микрософт ничего не гарантирует. |
| Автор: razumsap 9.1.2008, 09:51 | ||||||
| Спасибо всем за помощь. Да хотелось бы всего ничего, чтоб показывался индикатор On or Off. Вот с утра попробовал InternetGetConnectedState всё время возвращяет true.
Попробую воспользоваться выше приведенными советами. Программу написал, но что-то она ругается Использовал материал http://www.realcoding.net/article/view/251 Реализация ping с помощью ICMP API, после выполнения кода
выдает сообщение в мемо Error in call togethostbyname(). Error code: 11001 Написал просто
|
| Автор: remax 10.1.2008, 00:48 | ||
Попробуй такой вариант:
Необходимые пояснения - программа проверяет существование определенного адреса в сети. По рекомендациям участников дискуссии - это http://google.com Проверка инициируется таймером. Визуализация - изменение цвета панели. Если все ок Только в таймере поставь не меньше минуты. |
| Автор: razumsap 10.1.2008, 16:33 |
| Написал программу, а она ругается, выдает ошибку --------------------------- Socket Error # 11001 --------------------------- что соответсвует IP_BUF_TOO_SMALL где мальнький буфер и как его увеличить? вобщем, админ наш сказал, что пинг не проходит, по причине того, что мы(наша ОАО) работаем через 2 прокси и сказал такое Киска не выпустит за пределы интранета |
| Автор: Rennigth 10.1.2008, 17:03 | ||
| razumsap, нет, это озночает что сервер не найден. Вот немного поправленны вариант:
Добавлено через 46 секунд razumsap, можно было бы и самому заметить что хухл неправильно написан Добавлено через 1 минуту и 55 секунд если есть прокся, работать не будет, нужно будет дописывать аутентификацию. |
| Автор: remax 10.1.2008, 21:54 |
Интересно, с каких пор http://google.com это неправильно? У меня, например, все нормально сработало. Причем, вернуло именно 200, а не какой либо другой код. |
| Автор: remax 10.1.2008, 22:12 | ||||
Пример автоматического определения параметров прокси (кусок моей рабочей проги)
Добавлено через 5 минут и 1 секунду Rennigth, твои изменения изменили логику работы проги. Весь смысл - периодический опрос. А в твоей модификации - только FormCreate? Добавлено через 7 минут и 17 секунд razumsap, а в самом деле, чего мы мучаемся - посмотри в настройках своего броузера - есть явное указание прокси или нет? Добавлено через 13 минут и 12 секунд
А админ не сказал причину регулярного отсутствия интернета? Может дело в выключении каких то рутеров или проксей? И пинговать достаточно их, или те же ваши прокси? |
| Автор: Rennigth 10.1.2008, 23:23 | ||
Наверное от настроек зависит, разбираться лень но у меня так не работает
дык я только тестировал, а в таймере функция будет вызываться или нет это я думаю уже автору топика решать. А изменение это зануление dc, т.к. если HttpQueryInfo выполниться неудачно, то вdc останеться тотже мусор что и при инициялизации, и есть шанс(хоть и мизерный) что там будет значение 200 и функция вернет в итоге True |
| Автор: remax 10.1.2008, 23:32 | ||
Хуже не будет |
| Автор: razumsap 11.1.2008, 10:11 | ||||||
Я конечно извиняюсь, но подскажите переменная cbPROXY_SERV - это компонента, если да то какая или что за тип? И ещё если я знаю настройки прокси сервера, то куда мне их подставлять? |
| Автор: razumsap 15.1.2008, 09:13 |
| To remax Повторюсь одскажите переменная cbPROXY_SERV - это компонента, если да то какая или что за тип? И ещё если я знаю настройки прокси сервера, то куда мне их подставлять? |
| Автор: remax 15.1.2008, 21:06 |
компонента, комбобокс. Только этот фрагмент проги тебе не нужен, так как параметры прокси ты и так знаешь. Проблема в том, что обычно я использую инди-компоненты для работы с инетом. Поэтому, как правильно адаптировать примерчик - к работе с прокси я с ходу не скажу. Надо глубже разбираться с WinInet, а сейчас нет времени. Если никто не подбросит Вам вариант, позже набрасаю примерчик с использованием инди.... Но, возможно, все гораздо проще. Когда не работает интернет, проверьте, используя стандартную команду PING, доступность прокси-сервера. Если дело в этом, то возможно и писать прогу будем по другому. |
| Автор: MetalFan 15.1.2008, 22:27 |
| посмотри http://forum.vingrad.ru/forum/topic-186678/kw-wininet-tmfwihttp-http-client.html над WinInet. а в WinInet есть возможность использования настроенного в системе прокси |
| Автор: remax 16.1.2008, 03:06 |
| MetalFan, MFWIHTTP c D7 не дружит? Только с BDS? |
| Автор: MetalFan 16.1.2008, 09:08 |
| remax, дружит. чуть его допилить, там кто-то отписывался по этому поводу... |
| Автор: razumsap 23.1.2008, 11:52 |
| подскажите кто сталкивался, как при подключениии к интернету обойти запрос ввода Логина и Пароля, т.е. ввести их програмно, чтоб не выскакивало окно, причём с уже заполненными (правильно) данными? |