Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2005.03.27;
Скачать: [xml.tar.bz2];

Вниз

RasDial   Найти похожие ветки 

 
aus   (2004-12-10 14:42) [0]

Использую для подключения удаленного доступа ф-цию RasDial из Rasapi32.dll.
Подключается нормально, если телефонная линия работает без перебоев, но бывает, что модем не определяет, что линия занята, тогда через некоторое время модем отключается, но подключение остается активным, ф-ция HangUp не отключает его, при повторном вызове RasDial выдается ошибка, что подключение уже используется.
Кто сталкивался с такой проблемой, прошу посоветовать, как отследить состояние подключения и отключить его в таком случае.


 
Piter ©   (2004-12-10 18:20) [1]

DWORD RasDial(

   LPRASDIALEXTENSIONS lpRasDialExtensions, // pointer to function extensions data
   LPTSTR lpszPhonebook, // pointer to full path and filename of phone-book file
   LPRASDIALPARAMS lpRasDialParams, // pointer to calling parameters data
   DWORD dwNotifierType, // specifies type of RasDial event handler
   LPVOID lpvNotifier, // specifies a handler for RasDial events
   LPHRASCONN lphRasConn  // pointer to variable to receive connection handle
  );

...

lpvNotifier
Specifies a window handle or a RasDialFunc, RasDialFunc1, or RasDialFunc2 callback function to receive RasDial event notifications


Тебе при слете по таймауту разве не приходит соответствующее уведомление?


 
aus   (2004-12-10 19:21) [2]

Если приходит уведомление, то что делать дальше, HangUp не помогает, т.к. соединение вроде не установлено.


 
Piter ©   (2004-12-11 02:29) [3]

А что показывает RasEnumConnections - есть соединения?


 
aus   (2004-12-11 12:52) [4]

Покаывает, что есть.


 
aus   (2004-12-11 12:55) [5]

Кроме HangUp какая еще функция может разорвать соединение на стадии подключения. Номеронабиратель (и IE) при нажатии на "отменить" прерывает даже набор номера, как это реализовать?


 
Piter ©   (2004-12-11 15:46) [6]

aus   (11.12.04 12:55) [5]

Выложи сюда свое описание функции HangUp


 
aus   (2004-12-11 16:24) [7]

У меня, к сожалению, нет сейчас исходника, он на работе.
Описание ф-ции соответствует helpу по TAPI.
Но принцип такой:

в переменную получаю ненулевой handl активного соединения, используя RasEnumConnections, потом в вызываю HangUp с параметром этой переменной. Если подключение проходит нормально, то и отключается нормально, при занятой (и не понятой модемом) линии - я описал выше.
Пробовал сохранять handl в глобальной переменной при подключении RasDial, результат тот же.

И не отключить это соединение вплоть до закрытия приложения, да и при закрытии не всегда отключается, другое подключеение ( RasEntry с другим именем) выполняется, а это так и висит.
А что по поводу [5]?


 
Piter ©   (2004-12-11 17:04) [8]

aus   (11.12.04 16:24) [7]
У меня, к сожалению, нет сейчас исходника, он на работе.


придешь на работу - покажи исходник

RasHangUp:

If the function fails, the return value is a nonzero error value listed in the RAS header file, or ERROR_INVALID_HANDLE

так что возвращает RasHangUp?

И ты примечание читал:

An application should not call RasHangUp and then immediately exit. The connection state machine needs time to properly terminate. If the system prematurely terminates the state machine, the state machine may fail to properly close a port, leaving the port in an inconsistent state. A simple way to avoid this problem is to call Sleep(3000) after returning from RasHangUp; after that pause, the application can exit. A more responsive way to avoid the problem is, after returning from RasHangUp, to call RasGetConnectStatus(hrasconn) and Sleep(0) in a loop until RasGetConnectStatus returns ERROR_INVALID_HANDL

?


 
aus   (2004-12-11 17:13) [9]

Ну вот и разобрались )))
Благодарю, и чего это я сам не прочитал раньше?

Скорее бы на работу!


 
Piter ©   (2004-12-11 18:46) [10]

aus   (11.12.04 17:13) [9]
Ну вот и разобрались )))


ва чем? Ты примечание прочитал? А с чего ты так уверен, что оно тебе поможет?
Если ты нормально экспериментировал - не в этом дело? Или в этом?


 
ECM ©   (2004-12-13 17:12) [11]

2 Piter & aus
У меня такая проблема осталась (на W2K) - пробовал и Sleep(>=3000) и RasGetConnectStatus(hrasconn) and Sleep(0) in a loop until RasGetConnectStatus returns ERROR_INVALID_HANDL
... правда давно это было... так и осталась ...кажется
2 aus - совет: после исправления протестируй тщательнее...


 
aus   (2004-12-13 18:21) [12]

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

Другой вариант: использовать RasDialDlg, только нужно чтобы он автоматически начинал набирать, попробую.


 
aus   (2004-12-13 18:23) [13]

Вот что интересно: если RasDial завершается описанной мной ситуацией, то RasDialDlg сразу начинает набор, без начального диалога. Странно...


 
aus   (2004-12-15 14:16) [14]

Если кому интересно, то дело обстоит так:
вызывая RasDial с параметром, который определяет тип Callback-функции, равным 0, handle подключения можно получить только после выполнения подключения. Т.к. подключение не выполнено (ошибка вызвана плохой телефонной линией), то и handl его не получен. Следовательно RasHangUp(handle) ничего не отключает.
Если тип Callback-функции равен 1, то в функцию обработки событий (RasDialFunct1) передается handl подключения при первом же событии. Его можно спокойно передать в RasHangUp и отключить в любое (или почти в любое) время, в том числе и на стадии набора номера.


 
radja   (2005-01-28 14:19) [15]

Вообще говоря, прервать связь во время набора номера или при ожидании подключения из callback функции довольно сложно. Она вызывается всего три раза до этапа набора номера и один после подключения. Лучше из нее сохранять handl подключения в глобальную переменную и в кнопке "Отмена" в своей программе использовать для разрыва связи именно эту переменную.



Страницы: 1 вся ветка

Форум: "Сети";
Текущий архив: 2005.03.27;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.034 c
1-1109839622
Гость
2005-03-03 11:47
2005.03.27
Какие параметры цвета (RGB) для стандартного фона формы?


1-1110614327
New_user
2005-03-12 10:58
2005.03.27
как можно загрузить web страницу из интернета в tmemo,


3-1109589918
Dysan
2005-02-28 14:25
2005.03.27
TClientDateSet сохранить в DBF


1-1110904405
tazik
2005-03-15 19:33
2005.03.27
Как заглушить солиста в мр3


14-1109939062
syte_ser78
2005-03-04 15:24
2005.03.27
Раз уж нельзя о взломе..





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский