Я пишу FTP-сервер с Java, и теперь я хочу ответить на команду LIST. Достаточно отправить только имена файлов, и мне не нужно отправлять размер файла, владельца, разрешение и т. д. Кажется, что просто отправить некоторые строки, как имена файлов, не удовлетворяют клиента (я пробовал и ASCII, и бинарные форматы). Как я могу узнать, что FTP-клиент ожидает в качестве ответа?
Как мне обрабатывать команду LIST на моем FTP-сервере?
Ответы (2)
Если вы хотите создать совместимый FTP-сервер, вам необходимо обрабатывать LIST и NLST (стандартные команды), а также команды расширения MLST и MLSD.
Формат для команды LIST нигде не определен, и в мире встречается около 400 форматов. Использование формата Unix ls или формата Windows DIR будет работать с большинством клиентов, поскольку эти форматы довольно широко распространены и хорошо поддерживаются клиентами.
NLST — это только список имен файлов.
MLST и MLSD используют машинно-разборный формат (это то, что означает буква M), который описан в RFC 3659. Клиентам проще работать, и его поддержка очень приветствуются.
Каноническим местом для поиска является соответствующий документ RFC: http://www.ietf.org/rfc/rfc959.txt
К сожалению, в данном конкретном случае RFC довольно расплывчат:
Since the information on a file may vary widely from system
to system, this information may be hard to use automatically
in a program, but may be quite useful to a human user.
Чтобы обеспечить совместимость с существующими FTP-клиентами, лучше всего взглянуть на какое-нибудь широко распространенное программное обеспечение FTP-сервера и эмулировать формат его вывода.
\r\n
, но клиенты ничего не показывают. Он работает с командой ftp в Linux, но не с FireFTP и FileZilla. - person Pedram   schedule 27.05.2011