Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
prakt-Storozhok.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
7.98 Mб
Скачать

1.2. Компонент- idTrivialFtp

Компонент IdTrivialFTP реализует функции TFTP-клиента. Создававаемое в работе приложение-клиент должно выполнять следующие функции:

  • запись файла на сервер;

  • чтение файла с сервера.

Для выполнения данных функций следует указать имя TFТР-сервера с помощью свойства Host компонента IdTrivialFТР. Например:

IdTrivialFTPl.Host := Edit1.Text.

По умолчанию свойство Port компонента IdTrivialFTP имеет значение - 69.

Передача файла на сервер выполняется с помощью метода:

IdTrivialFTP1.Put( const LocalFile:String; const ServerFile:String;), где LocalFile - имя локального файла, содержимое которого записывается на сервер, a ServerFile - имя, под которым локальный файл записывается на сервер.

Чтение файла с сервера выполняется с помощью метода:

IdTrivialFTP1.Get IdTrivialFTP1.Get (const ServerFile:String; DestinationStream: TStream;),

где ServerFile - имя удаленного файла, содержимое которого считывается с сервера, a DestinationStream - объект «поток», создаваемый клиентом.

    1. Компонент IdTrivialFtpServer

Компонент IdTrivialFTPServer реализует функции TFTP-сервера. Создаваемое в работе приложение-сервер должно выполнять следующие функции:

  • выбор рабочего каталога;

  • запись клиентского файла на сервер;

  • передачу файла от сервера к клиенту.

По умолчанию свойство DefaultPort компонента IdTrivialFTPServer имеет значение -69.

Для перевода TFTP-сервера в состояние ожидания запросов от клиента необходимо установить свойство сервера Active в состояние True. Например: IdTrivialFTPServer1.Active :=True.

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

При получении запросов пользователей на сервере происходят сле­дующие события.

• OnReadFile - событие происходит при появлении запроса пользова­теля на чтение файла с сервера. Программное обеспечение сервера может выполнить дополнительную проверку на допустимость чтения указанного в запросе файла;

• OnWriteFile - событие происходит при появлении запроса пользова­теля на запись файла на сервер. Программное обеспечение сервера может выполнить дополнительную проверку, например, имеет ли данный пользователь права на запись файла на сервер;

• OnTransferComplete - событие происходит при завершении операции чтения/записи файлов с сервера. Программное обеспечение сервера может использовать данное событие, например, для сбора статистической информации.

2. Задание по практическому занятию

2.1. Создание серверного приложения

Создайте приложение, изображенное на рис. 1.

Рис. 1

Для создания серверного приложения выполните следующие действия.

1) Создайте новое приложение и перенесите на форму компоненты, пе­речисленные в табл. 1.

Таблица 1

Компонент

Класс

Описание

Edit1

TEdit

Окно ввода, в котором отображается выбранный рабочий каталог

Label1

TLabel

Метка «Рабочий каталог»

Memo1

TMemo1

Многострочное окно ввода, в котором отображается информация о работе TFTP-сервера

DirectoryListBox1

TDirectoryList-Box1

Окно выбора рабочего каталога (закладка Win 3.1 Палитры компонентов)

DriveComboBox1

TDriveComboBox1

Окно выбора логического диска, на котором будет располагаться рабочий каталог (закладка Win 3.1 Палитры компонентов)

IdTrivialFTPServer1

TIdTrivialFTPServer

ТFTР-сервер (закладка Indy Servers Палитры компонентов)

2) Для события формы OnCreate напишите следующий программный код:

procedure TForm1.FormCreate(Sender: TObject);

begin

// Определение корневого каталога

Edit1.Text := GetCurrentDir;

//Активизация TFTР-сервера

IdTrivialFTPServerl.Active:=True;

end;.

3) Для события OnChange компонента DriveСomboBox1 напишите следующий программный код:

procedure TForm1.DriveComboBox1Change(Sender: TObject);

begin

DirectorylistBox1.Drive := DriveComboBoxl.Drive;

end;.

С помощью представленного программного кода для компонента DirectoryListBoxl выбирается текущий логический диск.

4) Для события OnChange компонента DriveComboBox1 напишите следующий программный код:

procedure TForm1.DirectoryListBoxlClick(Sender: TObject);

begin

Edit1.Text:=DirectoryListBoxl.GetItemPath(DirectoryListBox1.ItemIndex);

end;.

Этот программный код заносит в окно Edit1 выбранный рабочий каталог.

5) Для события OnReadFile компонента IdTrivialFTPServer1 напишите следующий программный код:

procedure TForm1.IdTrivilFTPServerlReadFile(Sender: TObject;

var FileName: String; const Peerinfo: TPeerlnfo;

var GrantAccess: Boolean; var A Stream: TStream;

var FreeStreamOnComplete: Boolean);

VAR

s: String;

begin

FreeStreamOnComplete := false;

s:=’ ~отказано';

try

If GrantAccess then

Begin

s :='- предоставлен';

end;

finally

memo1.Lines.Add(Format('%s: %d - Доступ по чтению к %s %s',

[PeerInfo.PeerIP, PeerInfo.PeerPort, Filename, s]));

end;

end;.

Событие возникает, когда клиент обращается к серверу с запросом на чтение файла. Если доступ к рабочему каталогу разрешен, сервер начинает процесс передачи файла клиенту. Приведенный программный код проверяет, разрешен ли доступ и выводит в окно Memo1 справочную информацию.

6) Для события OnWriteFile компонента IdTrivialFTPServer1 напишите следующий программный код:

procedure TForm1.IdTrivialFTPServer1WriteFile(Sender: TObject;

var FileName: Siring; const PeerInfo: TPeerInfo;

var GrantAccess: Boolean; var AStream: TStream;

var FreeStreamOnComplete: Boolean);

VAR

s: String;

begin

FreeStreamOnComplete:=false;

s :='- отказано';

try

If Grant Access then

begin

s :='- предоставлен';

end;

finally

memo1.Lines.Add(Format('%s: %d - Доступ по записи к %s %s',

[PeerInfo.PeerIP, PeerInfo.PeerPort.Filename,s]));

end;

end;.

Событие возникает, когда клиент обращается к серверу с запросом на запись файла в рабочий каталог сервера. Если доступ к рабочему каталогу разрешен, сервер начинает процесс записи получаемого клиентского файла. Приведенный программный код проверяет, разрешен ли доступ и выводит в окно Memo1 справочную информацию.

7) Для события OnTransferComplete компонента IdTrivialFTPServer1 напишите следующий программный код:

procedure TForm1.IdTrivialFTPServer1TransferComplete(Sender: TObject; const Success: Boolean; const PeerInfo: TPeerInfo; AStream: TStream;

const WriteOperation: Boolean);

Var s: String;

begin

try

If Success then s := ' выполнена'

else s :=' прервана';

memo1.Lines.Add(Format('%s: %d -Передача %s',

[PeerInfo.PeerIP, PeerInfo.PeerPort, s]));

finally

AStream.Free;

end;

end;.

Событие возникает, когда на сервере закончен процесс чтения или за­писи файла, получаемого or клиента или передаваемого клиенту. Приве­денный программный код проверяет, успешно или нет выполнена опера­ция и выводит в окно Memo1 справочную информацию.

8) Откомпилируйте созданное приложение.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]