我正在用Java编写一个FTP服务器,现在我想回答LIST命令。只发送文件名就足够了,我不需要发送文件大小、所有者、权限等。似乎只发送一些字符串,作为文件名,不满足客户端(我尝试了 ASCII 和二进制格式)。如何找出 FTP 客户端期望的回复?
我正在使用FireFTP和FileZilla测试我的服务器
我正在用Java编写一个FTP服务器,现在我想回答LIST命令。只发送文件名就足够了,我不需要发送文件大小、所有者、权限等。似乎只发送一些字符串,作为文件名,不满足客户端(我尝试了 ASCII 和二进制格式)。如何找出 FTP 客户端期望的回复?
我正在使用FireFTP和FileZilla测试我的服务器
规范的地方是相关的 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 服务器软件并模拟其输出格式。
如果要创建兼容的 FTP 服务器,则需要处理 LIST 和 NLST(标准命令)以及 MLST 和 MLSD 扩展命令。
LIST命令的格式在任何地方都没有定义,世界上大约有 400 种格式。使用 Unix ls 格式或 Windows DIR 格式将适用于大多数客户端,因为这些格式非常普遍并且受到客户端的良好支持。
NLST只是文件名列表。
MLST和MLSD使用 RFC 3659 中描述的机器可解析格式(这是 M 字母代表的)。它更易于客户端处理,并且非常受欢迎。