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 |