Delphi. Учимся на примерах - [37]

Шрифт
Интервал

>

> begin

>  if Open1.FileName[i] = '\' then break;

>  temp:= temp+ Open1.FileName[i];

> end;

> for i:=length(temp) downto 1 do

>  fname:= fname + temp[i];

>  ftp.Upload(Open1.FileName, FName); //загружаем файл

> end;

>end;

Здесь мы сначала просим пользователя выбрать файл, который он хочет передать на сервер. Затем узнаем имя выбранного файла и загружаем его на сервер с таким же именем.

В общем, наш 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.

Листинг 18.1. Программный модуль FTP-клиента

>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);

> procedure ftpError(Sender: TComponent; Errno: Word; Errmsg : String);

> procedure ftpDisconnect(Sender: TObject);

> procedure ftpConnect(Sender: TObject);

> procedure ftpConnectionFailed(Sender: TObject);

> procedure ftpInvalidHost(var Handled: Boolean);

> procedure ftpSuccess(Trans_Type: TCmdType);

> procedure ftpTransactionStart(Sender: TObject);

> procedure ftpTransactionStop(Sender: TObject);

> procedure ftpAuthenticationFailed(var Handled: Boolean);

> procedure Button2Click(Sender: TObject);

> procedure Button3Click(Sender: TObject);

> procedure FormDestroy(Sender: TObject);

> procedure Button5Click(Sender: TObject);

> procedure Button4Click(Sender: TObject);

> procedure Button6Click(Sender: TObject);

> procedure Button7Click(Sender: TObject);

> procedure Button8Click(Sender: TObject);

> procedure Button9Click(Sender: TObject);

>private

> { Private declarations }

>public

> { Public declarations }

>end;


>var

> Form1: TForm1;


>implementation

>{$R *.dfm}


>procedure TForm1.Button1Click(sender: TObject);

>begin

> ftp.Host:= ftpserver.Text; //ftp-сервер

> ftp.UserID:= name.Text;//логин

> ftp.Password:= pass.Text;// пароль

> ftp.Port:= StrToInt(port.Text); //порт для подключения

> //соединяемся с сервером

> if not ftp.Connected then ftp.Connect;

>end;


>procedure TForm1.ftpStatus(Sender: TComponent; Status: String);

>begin

> status1.Lines.Add(Status);

>end;


>procedure TForml.ftpError(Sender: TComponent; Errno: Word; Errmsg: String);

>begin

> status1.Lines.Add('Ошибка: ' + errmsg);

>end;


>procedure TForm1.ftpDisconnect(Sender: TObject);

>begin

> status1.Lines.Add('Отключено');

>end;


>procedure TForm1.ftpConnect(Sender:tobject);


Рекомендуем почитать
Графика DirectX в Delphi

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


Вторая жизнь старых компьютеров

Сейчас во многих школах, институтах и других учебных заведениях можно встретить компьютеры старого парка, уже отслужившие свое как морально, так и физически. На таких компьютерах можно изучать разве что Dos, что далеко от реалий сегодняшнего дня. К тому же у большинства, как правило, жесткий диск уже в нерабочем состоянии. Но и выбросить жалко, а новых никто не дает. Различные спонсоры, меценаты, бывает, подарят компьютер (один) и радуются, как дети. Спасибо, конечно, большое, но проблемы, как вы понимаете, этот компьютер в общем не решает, даже наоборот, усугубляет, работать на старых уже как-то не хочется, теперь просто есть с чем сравнивать.


DirectX 8. Начинаем работу с DirectX Graphics

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


Симуляция частичной специализации

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


Обработка событий в С++

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


Питон — модули, пакеты, классы, экземпляры

Python - объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.