Delphi 3. Библиотека программиста

       

FTP-сервер


Джон Пенман

Как известно, в FTP участвуют две стороны. Создание нестандартного компонента, выполняющего функции FTP-сервера, позволит вам полностью контролировать операции пересылки файлов между Internet-приложениями.

В главе6 я описал компонент CsShopper, в котором инкапсулируются функции клиентской стороны при пересылке файлов с использованием протокола FTP. Более того, компонент, выполняющий функции FTP-клиента, даже входит в число примеров Delphi 3. И все же для осуществления полноценного обмена файлами недостаточно иметь только клиентское приложение. Сейчас в Сети появляется все больше пользователей с круглосуточным доступом (за которым закрепился термин 24?7), и все больше людей желает создавать на Delphi свои собственные программы-серверы. Итак, знакомьтесь — CsKeeper!

CsKeeper — потомок компонента CsSocket из главы 5. В этом VCL-компоненте инкапсулируется серверная сторона FTP-протокола. CsKeeper чем-то похож на продавца маленького магазинчика — он «берет с полки» те файлы, которые затребованы, и передает их клиенту «через прилавок». Впрочем, в отличие от продавца сервер является конечным автоматом, строго соблюдающим правила протокола FTP (и к тому же не пытается болтать на посторонние темы).

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

Если вы считаете, что достаточно хорошо разобрались с клиентской стороной, мы можем продолжать. Сервер FTP обычно ожидает установки клиентского соединения на TCP-порте с номером 21. При соединении сервер инициирует процесс регистрации, посылая клиенту команду USER. Поскольку процесс регистрации был достаточно подробно рассмотрен в главе 6 при описании CsShopper, я не стану задерживаться на его подробностях. После успешной регистрации сервер готов к выполнению любого FTP-запроса, поступившего от клиента. Магазин открылся! К тому что происходит дальше, стоит присмотреться повнимательнее.

В компоненте CsKeeper воплощен простой и полезный FTP-сервер, который соответствует минимальным требованиям, формально изложенным в документе RFC959. Следовательно, некоторые команды FTP (такие как ACCT, NLIST и PASV) в настоящее время отсутствуют в словаре CsKeeper. В таблице 7.1 приведен список всех FTP-команд. Команды, не реализованные в текущей версии CsKeeper, помечены звездочкой. При получении неподдерживаемой команды CsKeeper возвращает клиенту код ошибки с содержательным сообщением.

Обратите внимание: CsKeeper не является FTP-сервером с параллельной обработкой. Это означает, что в каждый момент времени он может обслужи вать лишь одного пользователя.

Таблица 7.1. Набор команд FTP

ABOR

ACCT*

ALLO*

APPE*

CDUP



CWD

DELE

HELP

LIST

MKD

MODE

NLIST*

NOOP

PASS

PASV*

PORT

PWD

QUIT

REIN*

RMD

RNFR*

RNTO*

REST*

RETR

SITE

SMNT*

STAT*

STOR

STOU*

STRU*

SYST

TYPE

USER*

Прерывание текущей пересылки файла

Передача информации о ресурсах пользователя

Выделение места под новый файл

Добавление данных в существующий файл

Переход в родительский каталог

Переход в другой каталог

Удаление файла, выбранного пользователем

Запрос справочной информации о FTP-команде

Запрос списка файлов текущего каталога

Создание нового каталога

Использование режима пересылки, выбранного клиентом

Запрос потока с именами файлов

Передача сервером ответа «OK»

Передача пароля во время регистрации

Прослушивание сервером конкретного порта данных

Использование сервером порта данных, выбранного клиентом

Запрос имени текущего каталога

Завершение FTP-сеанса

Повторная инициализация сеанса

Удаление каталога

Передача имени файла, который следует переименовать

Передача нового имени файла. Команда должна передаваться после RNFR

Возобновление прерванной пересылки файла

Получение файла с сервера

Получение информации о специфических услугах сервера

Монтирование другой файловой системы на сервере

Запрос информации о статусе

Запрос на сохранение файла

Сохранение файла с уникальным именем на сервере

Запрос на использование файловой структуры, выбранной клиентом

Запрос типа операционной системы

Выбор типа пересылаемого файла

Передача имени пользователя во время регистрации команда не реализована в текущей версии CsKeeper



Содержание раздела