В общем, наш ftp-клиент уже полностью работоспособен и выполняет все необходимые функции. Единственное, что осталось сделать, — реализовать извещение пользователя о протекании всех операций и обо всех ошибках. Для этого следует создать несколько обработчиков событий компонента ftp.
Событие в случае возникновения ошибки при проверке имени и пароля — OnAuthеntiсatiоnFailed:
procedure TForm1.ftpAuthenticationFailed(var Handled: Boolean);
begin
status1.Lines.Add('Неверное имя или пароль');
end;
Событие при подключении — OnConnect:
procedure TForm1.ftpConnect(Sender:tobject);
begin
status1.Lines.Add('Подключено');
//локальный ip-адрес
status1Lines.Add('IP клиента: ' + ftp.LocalIP);
//удаленный ip-адрес
status1Lines.Add('IPсервера: ' + ftp.RemoteIP);
end;
Событие в случае возникновения ошибки при подключении — OnConnectionFailed:
procedure TForm1.ftpConnectionFailed(Sender: TObject);
begin
status1.Lines.Add('He удалось подключиться к серверу');
end;
Событие при отключении от сервера — OnDisconnect:
procedure TForm1.ftpDisconnect(Sender: TObject);
begin
status1.Lines.Add('Отключено');
end;
Событие в случае возникновения некоторой ошибки — OnError:
procedure TForml.ftpError(Sender: TComponent; Errno: Word; Errmsg: String);
begin
status1.Lines.Add('Ошибка: ' + errmsg);
end;
Событие в случае возникновения ошибки при подключении к серверу — OnInvaIidHost:
procedure TForm1.ftpInvalidHost(var Handled: Boolean);
begin
status1.Lines.Add('Ошибка при подключении к серверу');
end;
Событие при изменении состояния — OnStatus:
procedure TForm1.ftpStatus(Sender: TComponent; Status: String);
begin
status1.Lines.Add(Status);
end;
Событие при успешном выполнении операции — OnSuccess:
procedure TForm1.ftpSuccess(Trans_Type: TCmdType);
begin
status1.Lines.Add('Успешно');
end;
Событие начала передачи данных — OnTransactionStart:
procedure TForm1.ftpTransactionStart(Sender: TObject);
begin
status1.Lines.Add('Начало передачи данных');
end;
Событие завершения передачи данных — OnTransactionStop :
procedure TForm1.ftpTransactionStop(Sender: TObject);
begin
statusl.Lines.Add('Конец передачи данных');
end;
Теперь программа полностью готова к использованию. Если у вас нет собственного Web-сайта, то для тестирования FTP-клиента можете зарегистрировать сайт на бесплатном хостинге.
Полный исходный код модуля
Полный код программного модуля FTP-клиента представлен в листинге 18.1.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, NMFtp, StdCtrls, Psock;
type
TForm1 = class(TForm)
ftp: TNMFTP;
ftpserver: TEdit;
Label1: TLabel;
Label2: TLabel;
name: TEdit;
Label3: TLabel;
pass: TEdit;
Label4: TLabel;
port: TEdit;
Button1: TButton;
Button2: TButton;
status1: TMemo;
Button3: TButton;
Open1: TOpenDialog;
Button4: TButton;
del: TEdit;
Button5: TButton;
cd: TEdit;
cmd: TEdit;
Button6: TButton;
md: TEdit;
Button7: TButton;
rd: TEdit;
Button8: TButton;
download: TEdit;
Button9: TButton;
Save1: TSaveDialog;
procedure Button1Click(Sender: TObject);
procedure ftpStatus(Sender: TComponent; Status: String);