Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Контроль подключения к Интернет [D5, Win95/98]


Страницы:   1 2

igorx ©   (2002-11-05 10:54:00) 

Моя программа связывается с сервером через Интернет. На случай отсутствия связи в ней предусмотрен таймаут. Но вот проблема: при первом подключении, когда автоматически начинает отрабатывать набор номера телефона провайдера, проверка пароля и т.п. таймаут, понятно, успевает произойти.
Подскажите, как обойти указанную проблему не убирая контроля корректности подключения при первом входе в Интернет?


igorx   (2002-11-05 13:02:00) [1]

Я уже понял, что Indy намного лучше :))) Ладно, действительно, может в следующей версии программы я на них и перейду. Ну а со стандартными сокетами Borland никак нельзя определить, находятся ли они в состоянии соединения с сетью или срабатывание тайм-аута есть результат ошибки?


Reindeer Moss Eater   (2002-11-05 12:56:00) [2]

Клиент Indy начав коннект без установленной связи сгенерит исключение. А если связь есть и если соединение не будет установлено в заданное время возникнет другое исключение.

Ну как бы там ни было, кнопку улучшения качества связи ты не изобретешь.


igorx   (2002-11-05 12:53:00) [3]

Правильно, но на другой стороне должен стоять блокировочный сокет, что нежелательно (см.выше). И потом, чем тайм-аут Indy отличается от моего? Indy также дадут ошибку в моей ситуации, что не нужно :)


Reindeer Moss Eater   (2002-11-05 12:49:00) [4]

В Indy реализована поддержка таймаута при чтении/записи/соединении.
Что находится "на другой стороне" клиентской программе все равно.


igorx   (2002-11-05 12:42:00) [5]

У меня и сервер и клиент работают асинхронно. Я так понимаю, Indy ведь должны быть и на той, и на другой стороне? И тут еще вопрос: как бы Indy не были хороши, разве периодического "умирания" связи в общем случае можно избежать? Плохая связь, провайдеры и проч. Все равно, я бы не решился бросать программу в сеть без таймаута, на одних try"ях и OnError"ах. Ламеры есть ламеры, связь есть связь. Так что проблема все равно останется.


Reindeer Moss Eater   (2002-11-05 12:34:00) [6]

Так это ты описал серверный компонет. В TidTCPServer потоки работающие с клиентами реализованы внутри класса.


igorx   (2002-11-05 12:27:00) [7]

У меня программа асинхронная, т.е. по сокету приходят команды и данные инициирующие определенную реакцию независимо друг от друга. Я не могу, например, ждать после SendBuf реакцию другой стороны, я сразу должен быть готов к приему следующей команды.
По поводу адреса, который ты любезно скинул - там все по-французски, что ли? А хотя бы по-английски ничего нет?


Reindeer Moss Eater   (2002-11-05 12:22:00) [8]

Блокировочный режим вовсе не требует работы с потоками


igorx   (2002-11-05 12:14:00) [9]

Блокировочный режим - значит работа с потоками. Это достаточно большое усложнение логики работы программы, которая и так достаточно непроста. Кроме того, я эту программу получил "по наследству" и такой кардинальный переход заставит меня, скорее всего, переписать ее заново, что сложно и ненужно. Кроме указанной проблемы с ней, вроде бы, все в порядке. Мне бы узнать, как определить режим подключения :)))


igorx   (2002-11-05 12:09:00) [10]

А если он повиснет чисто на Open? И потом, такая ситуация может быть не только на Open. Например, моя программа периодически (несинхронно) должна получать от сервера некие порции данных. Если их долго нет, она шлет серверу маяк и ждет ответа. Если ламер-пользователь за это время каким-то образом успел выгрузить поддержку телефонного соединения, процесс подключения начнется сначала с печальным сообщением об ошибке тайм-аута (нет ответа на маяк в приемлимое время) которой на самом деле нет.


Reindeer Moss Eater   (2002-11-05 12:05:00) [11]

Два года говоришь?
http://www.rtfm.be/fpiette/icsuk.htm
А вообще я не находил веских причин не использовать blocking режим ни в GUI приложениях, ни в сервисах.


Digitman   (2002-11-05 12:03:00) [12]

Ставь Timer.Enabled =True в событие OnConnecting()


igorx   (2002-11-05 12:02:00) [13]

А че такое ICS?


Reindeer Moss Eater   (2002-11-05 12:00:00) [14]

ICS


igorx   (2002-11-05 11:58:00) [15]

В Indy сокеты только блокировочные, а мне нужне неблокировочные :)


Reindeer Moss Eater   (2002-11-05 11:57:00) [16]

Забыть про свой печальный двухгодичный опыт и перейти к использованию других библиотек. Например Indy 9.x


igorx   (2002-11-05 11:54:00) [17]

Ну, если на то пошло, то не только OnError, а прежде всего try except, т.к. сокетный Open чаще вываливается с исключением (как-то прочитал в FAQ). Впрочем, у меня есть и то, и другое. Но мой двухгодичный опыт работы с сокетами показывает, что на практике бывают ситуации, когда они просто "умирают". Тут без тайм-аута не обойтись. Вопрос в том, как определить, что сокет не ждет ответа, а подключается.


Reindeer Moss Eater   (2002-11-05 11:50:00) [18]

Если твоя программа не заморачивается с установлением соединения (считает, что оно есть), то обрабатывай событие OnError.


igorx   (2002-11-05 11:45:00) [19]

Клиент у себя на компьютере


Reindeer Moss Eater   (2002-11-05 11:43:00) [20]

Кто инициирует дозвон к провайдеру, если доступ по DialUP?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо