关于我用 Java 编写的简单 FTP 客户端和 proFTP 服务器之间的 FTP 会话,我仍然存在一些问题。
我已使用被动模式连接到服务器。当我发送list
命令时,我会收到服务器上哪些文件的 ASCII 响应。如果我list
再次发送命令,我不会得到任何响应。我什至无法从我发送的其他 FTP 命令中得到响应。似乎会话“挂起”。
为什么我的简单 java 应用程序在list
第二次发送命令时停止收到回复?
关于我用 Java 编写的简单 FTP 客户端和 proFTP 服务器之间的 FTP 会话,我仍然存在一些问题。
我已使用被动模式连接到服务器。当我发送list
命令时,我会收到服务器上哪些文件的 ASCII 响应。如果我list
再次发送命令,我不会得到任何响应。我什至无法从我发送的其他 FTP 命令中得到响应。似乎会话“挂起”。
为什么我的简单 java 应用程序在list
第二次发送命令时停止收到回复?
在 FTP 中,主动和被动模式都提供了单独的数据传输通道。每当您想在被动模式下发送涉及数据发送的命令时(例如list
),您必须重新发送PASV
以告诉服务器您即将执行涉及数据连接的操作。然后服务器可以打开一个新的套接字或继续使用同一个套接字。
这是一个示例会话:
230 Login successful.
PASV
227 Entered Passive Mode (123,245,209,137,199,61)
LIST
150 Here comes the directory listing.
226 Directory send OK.
LIST
425 Use PORT or PASV first.
PASV
227 Entered Passive Mode (123,245,209,137,202,198)
LIST
150 Here comes the directory listing.
226 Directory send OK.
请注意,我第二次尝试使用LIST
失败,因为我没有打开数据通道。一旦我发送了另一个PASV
,我就可以LIST
再次使用。