【发布时间】:2011-04-24 06:03:12
【问题描述】:
对于一个班级项目,我正在用 Java 编写一个 FTP 客户端(不允许外部 FTP 库),它可以连接并从学校 FTP 服务器获取文件。由于某种原因,一旦传输完成,服务器将不会发送 226,也不会从自己的端关闭连接。
让服务器发送 226 的唯一方法是从客户端手动关闭 InputStream,这似乎不安全,因为客户端无法 100% 确定文件何时完成传输。 (现在,InputStream 的 available() 方法用于检查传输的距离。)
在项目规范中,它说我们必须遵循适用于我们正在实施的命令子集的 RFC 要求。 RFC 声明如下:
一般来说,维护数据是服务器的责任 连接——启动它并关闭它。这个例外 是当用户 DTP 以传输模式发送数据时, 需要关闭连接以指示 EOF。服务器 必须在以下情况下关闭数据连接: 1.服务器已完成以传输方式发送数据 这需要关闭以指示 EOF。 2. 服务器收到用户的 ABORT 命令。 3.端口规格由来自的命令更改 用户。 4.控制连接是否合法关闭。 5. 出现不可恢复的错误情况。 否则关闭是一个服务器选项,其行使 服务器必须通过 250 或 226 向用户进程指示 只回复。
这里有什么我遗漏的吗?
编辑:运行的服务器是 ProFTPD 1.3.0a 服务器。
【问题讨论】: