Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Как в Delphi дозвониться до провайдера

Delphi , Интернет и Сети , Dial-up

Как в Delphi дозвониться до провайдера


Телефонный звонок провайдеру:
- У меня опять проблема.
- Что, не можете войти?
- Войти удалось, но сосать не хочет!
- Хм. Мы не виноваты - у нас канал широкий...
- Причем здесь канал?! С кем я говорю? Это телефон доверия?

  1. Если ты посто полезешь из программы куда-то по IP - то Win сама начнет dial-up, если у нее есть хотя бы одно connection в Remote Access.
  2. Если ты хочешь, чтобы программа сама выбирала connection (если их имеется несколько), контролировала набор номера, посылала login и пароль, то тебе нужно воспользоваться функциями RAS.

{  Try to establish RAS connection with specified name. EntryName -
   an entry in default phonebook to be used for dial-up. Notes:
a) This call is synchronous (i.e. will not return until the connection
   is established or failed) and hence, may take some time
   (sometimes tens of seconds).
b) The function uses no dial extension, and uses default phonebook.  }

function RasMakeDialupConnection(const EntryName: string): Boolean;
var
  dwRet: Dword;
  DialParams: TRasDialParams;
  hRas: HRASCONN;
  bPwd: Boolean; // was the password retrieved
begin
  uLastErr := 0; // Prepare dial parameters
  FillChar(DialParams, SizeOf(DialParams), 0);
  DialParams.dwSize := SizeOf(DialParams);
  StrPLCopy(@(DialParams.szEntryName[0]), EntryName,
    SizeOf(DialParams.szEntryName));
  hRas := 0; // must do that before calling RasDial
  // Try to retrieve user name/passowrd.
  // We continue even if RasGetEntryDialParams returns error, because
  // in next call RasDial will just try with empty user name/password
  bPwd := False;
  RasGetEntryDialParams(nil, @DialParams, bPwd);
  // Call RAS API. In this particular case RasDial will not return until
  // the connections is established or failed to establish.
  dwRet := RasDial(nil, nil, // no dial extensions, default phonebook
    @DialParams,
    0, // ignored here
    nil, // do not use callback - the call is synch
    hRas); // receives connection handle
  Result := dwRet = 0; // Connection failed... if not Result then begin
  // In some cases hRas may be non-zero and the connection port
  // is still opened. It is a Windows semi-bug/semi-feature.
  // So I must try to close
  if hRas <> 0 then
    RasHangupConnection(hRas);
  // RasHangup may reset uLastErr, but we need the value // returned from RasDial
  uLastErr := dwRet;
end;
end;

Привет! Вот перевод текста на русский язык:

Код Delphi - функция RasMakeDialupConnection, которая пытается установить соединение RAS (Remote Access Service) с указанным именем. Функция использует вызов API RasDial для инициализации процесса динамического подключения, который может занять некоторое время (десятки секунд).

Вот разбивка того, что код делает:

  1. Он определяет несколько переменных:
    • EntryName: строковый параметр, представляющий вход в телефонной книге по умолчанию для динамического подключения.
    • dwRet: переменная DWord, используемая для хранения значения возврата из RasDial.
    • DialParams: структура TRasDialParams, используемая для хранения параметров динамического подключения.
    • hRas: handle HRASCONN, возвращаемый вызовом RasDial.
    • bPwd: булевая переменная, указывающая, был ли получен пароль.
  2. Функция инициализирует uLastErr (не показан в коде) и заполняет структуру DialParams значениями по умолчанию.
  3. Она получает имя пользователя и пароль с помощью вызова RasGetEntryDialParams, хранит результат в bPwd.
  4. Функция вызывает RasDial для инициализации процесса динамического подключения, передавая структуру DialParams, nil для расширений динамического подключения и телефонную книгу по умолчанию.
  5. Функция проверяет, было ли установлено соединение успешно (т.е., dwRet = 0). Если нет, она пытается закрыть соединение с помощью вызова RasHangupConnection.
  6. Наконец, функция возвращает булевое значение, указывающее, было ли установлено соединение успешно.

Чтобы использовать этот код в вашем приложении Delphi, вам нужно:

  1. Добавить unit Windows к проекту.
  2. Позвать функцию RasMakeDialupConnection, передавая имя входа в виде строки параметра.

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

Также отметьте, что RasMakeDialupConnection может не работать, если нет доступных соединений в Remote Access или если указанное имя входа не существует в телефонной книге по умолчанию. Вам нужно обрабатывать потенциальные ошибки и исключения соответствующим образом.

В статье описывается, как в программе на языке Delphi дозвониться до провайдера с помощью функций RAS (Remote Access Service), а также приведен пример кода для выполнения этого действия.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Dial-up ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-01-28 06:36:09/0.0035679340362549/0