local: subnets remote: subnets
3187 bytes received in 0.27 seconds (11 Kbytes/s)
ftp> quit
--> QUIT
221 Goodbye.
plum-feit>
Отметим, что сценарий для соединения данных был таким:
■ Локальный клиент получил новый порт и использовал управляющее соединение, чтобы сообщить серверу FTP номер своего порта.
■ FTP-сервер связался с новым портом данных клиента.
■ Данные были переданы.
■ Соединение было закрыто.
Можно применять альтернативный сценарий. Если клиент посылает команду
При работе с файлами большого размера иногда обнаруживается, что пересылается не тот файл. Хорошая реализация должна позволять отменить пересылку. Для текстового интерфейса это обычно делается через комбинацию клавиш CONTROL-C, а в графическом интерфейсе — специальной кнопкой
14.5 Типы данных, структуры файлов и методы пересылки
На обоих концах соединения необходимо обеспечить единый формат для пересылаемых данных. Этот файл текстовый или двоичный? Он структурирован по записям или по блокам?
Для описания формата пересылки используются три атрибута:
■ Пересылка текста ASCII или двоичных данных.
■ Неструктурированный файл, который рассматривается как последовательность байт.
■ Режим пересылки рассматривает файл как поток байт.
Однако есть и несколько исключений. Некоторые хосты структурируют текстовые файлы как последовательность записей. Хосты IBM используют для текстовых файлов кодирование EBCDIC и проводят обмен файлами как набором структурированных блоков, а не как потоком байт.
В следующих разделах мы рассмотрим различные варианты типов данных, структур файлов и методов их пересылки.
14.5.1 Типы данных
Файл может содержать текст ASCII, EBCDIC или двоичный образ данных (существует еще тип, называемый
■ Символы вертикального форматирования
■ Символы вертикального форматирования ASA (ФОРТРАН)
Типом данных по умолчанию является нераспечатываемый текст ASCII (т.е. текст без управляющих символов форматирования. —
14.5.2 Пересылка текста ASCII
Хотя текст ASCII является стандартным, компьютеры интерпретируют его по-разному из-за различия в кодах конца строки. Системы Unix используют для этого <LF>, компьютеры PC — <CR><LF>, a Macintosh — <CR>.
Для устранения этих различий FTP превращает локальный текстовый файл ASCII в формат NVT, а приемник преобразует NVT ASCII в собственный локальный формат. Например, если текстовый файл копируется с системы Unix на PC, все коды концов строк (в Unix — <LF>) при получении файла на PC нужно преобразовать в <CR><LF>.
14.5.3 Пересылка текста EBCDIC
Поддерживающие кодировку EBCDIC хосты обеспечивают весьма полезную команду пользовательского интерфейса, инициирующую пересылку по управляющему соединению команды
14.5.4 Пересылка двоичных данных
С пересылки текстов ASCII легко переключиться на двоичный образ данных. В текстовом пользовательском интерфейсе для этого служит команда
Что произойдет, если пользователь забудет переключить тип данных с ASCII на двоичный при копировании двоичного файла? Хорошие реализации FTP предупредят, что задана ошибочная операция, и позволят до начала пересылки файла изменить тип данных. К сожалению, многие реализации идут еще дальше и 'помогают' изменять все двоичные байты, которые выглядят как символы конца строк (исправляя их на специальные заполнители или полностью удаляя их из текста). Некоторые действительно плохие реализации все же начинают пересылку файла и аварийно завершаются в середине выполнения такой операции.