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

"Настройка подавления эха при подключении через TIdTelnet в Delphi XE с Indy10: переопределение процедуры Negotiate"

Delphi , Интернет и Сети , Telnet

Настройка подавления эха при подключении через TIdTelnet в Delphi XE с Indy10: переопределение процедуры Negotiate

При работе с протоколом Telnet с использованием компонента TIdTelnet в Delphi XE с Indy10 может возникнуть необходимость отключить эхо-отклик сервера на отправляемые клиентом команды. В этом случае можно переопределить процедуру Negotiate компонента TIdTelnet, чтобы отправить команду IAC DONT ECHO серверу, информируя его о том, что клиент не хочет, чтобы сервер эхо-откликался на отправляемые команды.

Вот как это можно сделать:

  1. Создайте класс, унаследовав его от TIdTelnet:
type
  TMyIdTelnet = class(TIdTelnet)
  private
    procedure Negotiate; override;
  public
    constructor Create(AOwner: TComponent); override;
  end;

constructor TMyIdTelnet.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  // Дополнительная инициализация, если необходимо
end;

procedure TMyIdTelnet.Negotiate;
begin
  // Отправляем команду IAC DONT ECHO серверу
  IOHandler.WriteByte(TNC_IAC);
  IOHandler.WriteByte(TNC_DONT);
  IOHandler.WriteByte(TNO_ECHO);

  // Вызываем родительский метод для дальнейшей настройки
  inherited Negotiate;
end;
  1. Используйте созданный класс TMyIdTelnet вместо TIdTelnet в своем проекте.

При таком подходе компонент TIdTelnet будет отправлять команду IAC DONT ECHO серверу в начале процесса настройки, информируя его о том, что клиент не хочет, чтобы сервер эхо-откликался на отправляемые команды. Это должно помочь избежать эхо-отклика сервера на команды, отправляемые клиентом.

Альтернативный ответ:

Если вы не хотите переопределять процедуру Negotiate, вы можете использовать компонент TIdConnectionIntercept для перехвата и изменения команды, отправляемой серверу во время настройки. Для этого:

  1. Добавьте компонент TIdConnectionIntercept на форму и свяжите его с компонентом TIdTelnet через свойство Intercept.
  2. Создайте обработчик события OnSend для компонента TIdConnectionIntercept.
  3. В обработчике события проверьте, содержит ли буфер ответа сервера команду IAC WILL ECHO. Если да, измените средний байт на TNC_DONT для отправки команды IAC DONT ECHO серверу.

Пример кода для обработчика события OnSend:

procedure TForm1.IdConnectionIntercept1Send(AContext: TIdContext; ABuffer: TIdBytes; var ABufLen: Integer);
begin
  if Length(ABuffer) = 3 then
  begin
    // Проверяем, содержит ли буфер команду IAC WILL ECHO
    if (ABuffer[0] = TNC_IAC) and (ABuffer[1] = TNC_WILL) and (ABuffer[2] = TNO_ECHO) then
    begin
      // Изменяем средний байт на TNC_DONT для отправки команды IAC DONT ECHO
      ABuffer[1] := TNC_DONT;
    end;
  end;
end;

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

В любом случае, как переопределяя процедуру Negotiate, так и используя компонент TIdConnectionIntercept, убедитесь, что сервер поддерживает настройку эха в соответствии со стандартом RFC857, иначе эти изменения могут не дать желаемого результата.

Создано по материалам из источника по ссылке.

Контекст: Настройка подавления эха при подключении через TIdTelnet в Delphi XE с Indy10: переопределение процедуры Negotiate.


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

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




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


:: Главная :: Telnet ::


реклама


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

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 11:36:11/0.0037281513214111/0