Показать сообщение отдельно

  #4  
Старый 07.05.2008, 23:08
Dober'man
Banned
Регистрация: 16.07.2007
Сообщений: 79
Провел на форуме:
801879

Репутация: 337
Отправить сообщение для Dober'man с помощью ICQ
По умолчанию

FTP-сервер

"Мини статья" о том как создать простейший FTP-сервер
(для новичков)
by Doberman



Наш FTP-сервер будет работать по TFTP протоколу(TrivialFTP).

Первым делом разместим на форме компонент TIdTrivialFTPServer (со вкладки Indy Servers) хранящий в себе всю базовую функциональность FTP-сервера. Порт используемый протоколом TFTP по умолчанию, - 69. Свойство BufferSize определяет значение буфера.
Перевод FTP-сервера в активное состояние осуществляется в момент создания формы:
Код:
procedure TForm1.FormCreate(Sender: TObject);
begin
  IdTrivialFTPServer1.Active := true;
end;
При обращении к серверу с запросом о передаче или приеме файла генерируется сообщение OnReadFile или OnWriteFile. В обоих случаюх понадобится записать всего по одному оператору, присваивающему параметру этого обработчика AStream (тип TStream) соответствующее значение файлового потока. Такой поток либо открывается для чтения, либо этот файл создается на компе, а его содержимое принимается из сети:
Код:
procedure TForm1.IdTrivialFTPServer1ReadFile(Sender: TObject;
  var FileName: String; const PeerInfo: TPeerInfo;
  var GrantAccess: Boolean; var AStream: TStream;
  var FreeStreamOnComplete: Boolean);
begin
  AStream := TFileStream.Create(FileName, fmOpenRead);
end;

procedure TForm1.IdTrivialFTPServer1WriteFile(Sender: TObject;
  var FileName: String; const PeerInfo: TPeerInfo;
  var GrantAccess: Boolean; var AStream: TStream;
  var FreeStreamOnComplete: Boolean);
begin
  AStream := TFileStream.Create(FileName, fmCreate);
end;
В качестве FTP-клиента возьмем готовый пример из /Demos/Indy/TrivialFTPClient. В нем используем компонент TIdTrivialFTP, представляющий собой клиентскую FTP-программу.
Загрузка файла с сервера и передача его серверу происходит в результате нажатия кнопок btnDownload и btnUpload. Весь процесс приема и передачи файлов выполняется автоматически с помощью двух методов Get и Put компонента TIdTrivialFTP:
Код:
procedure Get(const ASourceFile: string; ADest: TStream);
procedure Put(const ASource: TStream; const ADestFile: string; const AAppend: Boolean);
ASourceFile - название файла, расположенного на удаленном FTP-сервере.
ADest - название локального файла.
AAppend - принимает true, если происходит запись в конец уже существующего файла.


Может кто-то и скажет, что таких в сети немерено (баян)....но я старался пояснить код когда писал его =)

Последний раз редактировалось Dober'man; 07.05.2008 в 23:18..
 
Ответить с цитированием