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

Соединение SFTP с Delphi: бесплатные компоненты и ручной способ

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

SFTP (Secure File Transfer Protocol) — это протокол, используемый для безопасной передачи файлов между компьютерами. Если вам необходимо передавать чувствительные файлы в рамках вашего программного обеспечения, SFTP может быть идеальным решением. В этой статье мы рассмотрим, как установить соединение SFTP с Delphi, как бесплатным компонентом, так и вручную.

Бесплатный компонент SFTP для Delphi

Одним из самых популярных бесплатных компонентов SFTP для Delphi является Indy. Indy — это набор компонентов, разработанных Marco Cantu, которые включают в себя широкий спектр сетевых возможностей, в том числе поддержку SFTP. Чтобы использовать Indy в своем проекте Delphi, вам нужно будет добавить компоненты Indy в свой проект. Вы можете сделать это, добавив IdGlobal и IdSSH2 в раздел uses своего единичного модуля.

Вот пример кода, демонстрирующий, как установить соединение SFTP с помощью Indy в Delphi:

unit Unit1;

interface

uses
  IdGlobal, IdSSH2, IdSFTP;

type
  TForm1 = class(TForm)
    btnConnect, btnDisconnect, btnUpload, btnDownload: TButton;
    edHost, edUsername, edPassword, edLocalFile, edRemoteFile: TEdit;
    lbOutput: TListBox;
  private
    { Private declarations }
    FSFTP: TIdSFTP;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.btnConnectClick(Sender: TObject);
begin
  FSFTP := TIdSFTP.Create(nil);
  try
    FSFTP.Host := edHost.Text;
    FSFTP.Username := edUsername.Text;
    FSFTP.Password := edPassword.Text;
    FSFTP.Connect;
    lbOutput.Items.Add('Connected to ' + FSFTP.Host);
  except
    on E: Exception do
      lbOutput.Items.Add('Error connecting: ' + E.Message);
  end;
end;

procedure TForm1.btnDisconnectClick(Sender: TObject);
begin
  if FSFTP.Connected then
    FSFTP.Disconnect;
  lbOutput.Items.Add('Disconnected from ' + FSFTP.Host);
end;

procedure TForm1.btnUploadClick(Sender: TObject);
begin
  if not FSFTP.Connected then
    Exit;

  FSFTP.PutFile(edLocalFile.Text, edRemoteFile.Text);
  lbOutput.Items.Add('File uploaded: ' + edLocalFile.Text);
end;

procedure TForm1.btnDownloadClick(Sender: TObject);
begin
  if not FSFTP.Connected then
    Exit;

  FSFTP.GetFile(edRemoteFile.Text, edLocalFile.Text);
  lbOutput.Items.Add('File downloaded: ' + edRemoteFile.Text);
end;

end.

В этом примере мы создаем форму с кнопками для подключения, отключения, загрузки и скачивания файлов, а также полями для ввода хоста, имени пользователя, пароля и имен файлов. При нажатии кнопки "Подключиться" мы создаем экземпляр TIdSFTP и устанавливаем его свойства, а затем вызываем метод Connect. При нажатии кнопки "Отключиться" мы вызываем метод Disconnect, чтобы закрыть соединение. Кнопки "Загрузить" и "Скачать" используют методы PutFile и GetFile соответственно, чтобы передавать файлы между локальной машиной и удаленным сервером SFTP.

Ручное подключение SFTP в Delphi

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

Вот пример кода, демонстрирующий, как установить соединение SFTP вручную в Delphi:

unit Unit1;

interface

uses
  IdGlobal, IdSSH2, IdSFTP, IdStackSSH, IdStackSFTP;

type
  TForm1 = class(TForm)
    btnConnect, btnDisconnect, btnUpload, btnDownload: TButton;
    edHost, edUsername, edPassword, edLocalFile, edRemoteFile: TEdit;
    lbOutput: TListBox;
  private
    { Private declarations }
    FSocket: TIdTCPClient;
    FSSH: TIdSSH2;
    FSFTP: TIdStackSFTP;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.btnConnectClick(Sender: TObject);
begin
  FSocket := TIdTCPClient.Create(nil);
  try
    FSocket.Host := edHost.Text;
    FSocket.Port := 22; // стандартный порт SFTP
    FSocket.Connect;
    lbOutput.Items.Add('Connected to ' + FSocket.Host);

    FSSH := TIdSSH2.Create(nil);
    try
      FSSH.Socket := FSocket;
      FSSH.Username := edUsername.Text;
      FSSH.Password := edPassword.Text;
      FSSH.Connect;

      FSFTP := TIdStackSFTP.Create(nil);
      try
        FSFTP.SSH := FSSH;
        FSFTP.Connect;
        lbOutput.Items.Add('SFTP connected');
      except
        on E: Exception do
          lbOutput.Items.Add('Error connecting SFTP: ' + E.Message);
      end;
    except
      on E: Exception do
        lbOutput.Items.Add('Error connecting SSH: ' + E.Message);
    end;
  except
    on E: Exception do
      lbOutput.Items.Add('Error connecting: ' + E.Message);
  end;
end;

procedure TForm1.btnDisconnectClick(Sender: TObject);
begin
  if FSFTP.Connected then
    FSFTP.Disconnect;
  if FSSH.Connected then
    FSSH.Disconnect;
  if FSocket.Connected then
    FSocket.Disconnect;
  lbOutput.Items.Add('Disconnected from ' + FSocket.Host);
end;

procedure TForm1.btnUploadClick(Sender: TObject);
begin
  if not FSFTP.Connected then
    Exit;

  FSFTP.PutFile(edLocalFile.Text, edRemoteFile.Text);
  lbOutput.Items.Add('File uploaded: ' + edLocalFile.Text);
end;

procedure TForm1.btnDownloadClick(Sender: TObject);
begin
  if not FSFTP.Connected then
    Exit;

  FSFTP.GetFile(edRemoteFile.Text, edLocalFile.Text);
  lbOutput.Items.Add('File downloaded: ' + edRemoteFile.Text);
end;

end.

В этом примере мы снова создаем форму с кнопками для подключения, отключения, загрузки и скачивания файлов, а также полями для ввода хоста, имени пользователя, пароля и имен файлов. При нажатии кнопки "Подключиться" мы создаем экземпляр TIdTCPClient и устанавливаем его свойства, а затем вызываем метод Connect. Затем мы создаем экземпляр TIdSSH2 и устанавливаем его свойства, а затем вызываем метод Connect. Наконец, мы создаем экземпляр TIdStackSFTP и вызываем метод Connect, чтобы установить соединение SFTP. При нажатии кнопки "Отключиться" мы вызываем методы Disconnect для FSFTP, FSSH и FSocket, чтобы закрыть все соединения. Кнопки "Загрузить" и "Скачать" работают так же, как и в предыдущем примере.

Заключение

В этой статье мы рассмотрели, как установить соединение SFTP с Delphi, как бесплатным компонентом, так и вручную. Indy — отличный бесплатный компонент SFTP для Delphi, который упрощает процесс передачи файлов по SFTP. Если вам нужен более низкий уровень контроля, вы можете установить соединение SFTP вручную с помощью сокетов. В любом случае, надеюсь, эта статья поможет вам в ваших efforts по передаче файлов по SFTP в Delphi.

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

В этой статье описывается, как установить соединение SFTP с Delphi, как с помощью бесплатного компонента Indy, так и вручную с использованием сокетов.


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

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




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


:: Главная :: FTP ::


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-01-29 03:41:01/0.0034351348876953/0