Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 | 3 |

 

  Вопрос: Коннект к Интернет: избитая тема в новом ракурсе Добавлено: 06.02.05 18:28  

Автор вопроса:  Comanche
Я насчитал аж 11 разных способов определения наличия коннекта к Инету. Но ни одного надёжного (по большому счёту). Или нужно как-то хитро "комбинировать" разные способы (что я и попытался предложить в упоминаемом ниже демо-проекте), или проверять "в лоб", пытаясь открыть внешний URL и определяя успешность такой попытки. Тоже не стопроцентная гарантия. Кроме того, способ хотелось бы найти не только надёжный, но и быстрый, чтобы регулярная проверка наличия коннекта не "подвешивала" приложение.

Ещё немного угнетает то, что даже на форумах самого Майкрософта какие-то "крутые" ребята подтверждают наличие данной проблемы и открыто говорят, что надёжнее способа "в лоб" - нет. Так себе утешение от Майкрософта, а?!

В общем, кому интересна проблема - предлагаю проверить разные способы коннекта под разными условиями: модемное соединение, модемное соединение с прокси, LAN-соединение, LAN-соединение с прокси, LAN-соединение с файрволлом. Имея в виду непрозрачные прокси, конечно. Под разными ОС, к тому же. Может быть, совместными усилиями мы, наконец, родим какую-нибудь оптимальную (и - что немаловажно - универсальную) логику проверки.

Для этих целей я сделал маленький демо-проектик. На единственной форме - возможность выполнить проверку 5-ю основными API-способами, и убедиться в достоверности полученного от API-функций результата. Кроме того, есть кнопка "Дополнительная информация...", которая покажет вам (просто покажет, в мессаджбоксе) ещё 6 вариантов проверки коннекта. И, наконец, есть кнопка "Так что же всё-таки выбрать?", которая покажет вам единственную логику, которая пришла мне в голову; там комбинация нескольких способов, и я ещё не проверял эту логику, если честно.

Ссылка для загрузки проекта:
http://formtoini.narod.ru/Downloads/CheckInternet.zip

Тема, с одной стороны, избитая. Но... лишь по частоте упоминания во всевозможных форумах. Максимум, до чего обычно все договариваются, - это всем известные "3 способа", выкладываемые в форумы в виде, опять-таки, "типового" проекта, уже набившего оскомину. Дальше этого ситуация обычно не сдвигается. Я уверен, что серьёзное и универсальное решение можно сделать, только учитывая массу факторов: прокси, файрволлы, версию ОС, и, возможно, применяя "статистический" подход (в пределах разумного, конечно). Но таких решений видеть не приходилось. М.б. это вообще невыполнимая задача?!

Ответить

  Ответы Всего ответов: 36  

Номер ответа: 1
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #1
Добавлено: 06.02.05 20:10
Это невыполнимая задача, поскольку любое действие, предпринимаемое тобой для проверки возможности осуществления чего-либо, кроме осуществления этого самого, может иметь разные правила с осуществлением это чего-либо. Так что способ "в лоб" действительно единственный и это не проблема, а очевидное ограничение.

Ответить

Номер ответа: 2
Автор ответа:
 Comanche



Вопросов: 87
Ответов: 459
 Профиль | | #2 Добавлено: 06.02.05 22:05
Я не прошу общих рассуждений об осуществимости/неосуществимости ИДЕАЛЬНОГО способа, - я прошу помочь в нахождении ОПТИМАЛЬНОГО варианта, который - естественно - не будет совпадать с идеальным. Но - максимально приблизит к решению проблемы.

Ответить

Номер ответа: 3
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #3
Добавлено: 06.02.05 22:16
В лоб :)

Ответить

Номер ответа: 4
Автор ответа:
 Comanche



Вопросов: 87
Ответов: 459
 Профиль | | #4 Добавлено: 06.02.05 22:32
Ты утверждаешь это со знанием данной проблемы - или "понаслышке"?

Кто-нибудь вообще серьёзно озадачивался этим вопросом?!

Ответить

Номер ответа: 5
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #5
Добавлено: 06.02.05 22:59
Лично я собрал способы в отдельные dll библиотеки и предложил пользователю самому выбирать что лучше работает...

Ответить

Номер ответа: 6
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #6
Добавлено: 07.02.05 00:37
Я всегда выбирал вариант "в лоб" и считаю это не только самым правильным, но и самым простым и верным решением.

Ответить

Номер ответа: 7
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #7
Добавлено: 07.02.05 00:41
Угу, забыл еще сказать про быстрое ;)

Ответить

Номер ответа: 8
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #8
Добавлено: 07.02.05 00:48
Для быстроты можно выполнять только часть проверки "в лоб", например, если надо получить какой-то файл по HTTP, то проверить можно, послав запрос с Range и запросить только пару байт

Ответить

Номер ответа: 9
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #9
Добавлено: 07.02.05 01:26
гы... это все равно не способ :( с плохой связью - реакция секунды три!

Ответить

Номер ответа: 10
Автор ответа:
 Comanche



Вопросов: 87
Ответов: 459
 Профиль | | #10 Добавлено: 07.02.05 01:54
Лично я собрал способы в отдельные dll библиотеки и предложил пользователю самому выбирать что лучше работает...

Так, одно интересное предложение уже имеем!

Я пошёл по похожему пути, определяя, как именно пользователь коннектится - через модем или же через LAN: сделал в настройках чекбокс "Я подключаюсь к Сети Интернет при помощи модема" (который, разумеется, нельзя взвести, если нет RAS-соединений). Ведь не факт, что юзер коннектится через модем, даже если RAS установлен и имеются RAS-соединения... пусть уж лучше галочку сам ставит :))

Хотя это, конечно, от безысходности.

Ответить

Номер ответа: 11
Автор ответа:
 Comanche



Вопросов: 87
Ответов: 459
 Профиль | | #11 Добавлено: 07.02.05 02:00
Кстати, насчёт торможения и "трёх секунд":
Не столько плохи эти 3 секунды, сколько то, что приложение тормозит во время них. Это сразу видно по торможению всяких GUI-шных вещей - отрисовке сложных контролов, "рваной" реакции на мышиные события и т.п.

Я даже выносил "проверяльщика" в отдельный EXE, который общался с основным проектом посредством DDE. Но временно отказался от этого варианта: вдруг что покрасивше получится придумать.

Ответить

Номер ответа: 12
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #12
Добавлено: 07.02.05 02:11
Попробуй воспользоваться асинхронным режимом получения данных... если интересует могу выслать я тут класс когда-то делал...
Но все равно, имхо, оно криво...

Ответить

Номер ответа: 13
Автор ответа:
 Comanche



Вопросов: 87
Ответов: 459
 Профиль | | #13 Добавлено: 07.02.05 13:40
Was ist Das - "асинхронный режим получения данных"? просто callback? вывод в отдельный поток?

Ответить

Номер ответа: 14
Автор ответа:
 Андрей



ICQ: 201110705 

Вопросов: 1
Ответов: 14
 Профиль | | #14 Добавлено: 07.02.05 19:56
Молодца - посторался.
А я раньше делал прогу используя Function InternetGetConnectedStateEx Lib "wininet.dll", накладок не случалось!

Ответить

Номер ответа: 15
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #15
Добавлено: 07.02.05 21:16
Андрей, я те уже второй раз грю что не дураки мы, и прежде чем раздавать советы убедись что советуешь именно дело!!!

2Comanche, да, это CallBack, причем саму функцию получения данных, выполнение происходит мгновенно, а уже все события случаются в функции...

Ответить

Страница: 1 | 2 | 3 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам