java ftp代码中的问题

时间:2010-07-06 06:00:48

标签: java ftp

我在java ftp代码中遇到错误。

SimpleFTP无法请求被动模式。 我从网上复制了这个代码。但它不起作用

    sendLine("PASV");
    String response = readLine();
    System.out.println(response);
    System.out.println(response);
    if (!response.startsWith("227")) {
        throw new IOException("SimpleFTP could not request passive mode: " + response);
    }

2 个答案:

答案 0 :(得分:1)

看起来你可以连接到ftp服务器 - 否则你早就收到了IOExceptions或NullPointerExceptions。

问题是,您无法建立被动模式连接。如果服务器是标准产品,那么我认为,它将使用227消息正确响应。

如果我必须调试,我将从以下开始:

  1. 使用普通的基于shell的ftp客户端并尝试手动进入被动模式。也许你会得到不同的回应,也许服务器只是在真正的消息之前发送一个空行
  2. 使用像wireshark这样的网络嗅探器来监控流量。
  3. 尝试连接到不同的ftp服务器
  4. 检查防火墙设置 - 这些设置可能会阻止被动模式,因为它使用不同的端口

答案 1 :(得分:1)

启动没有参数的命令行ftp客户端。发出debug命令以启用协议消息显示,并发出passive命令以设置被动模式。 (注意: windows命令行ftp不支持被动模式!)使用open命令连接到主机。如果您需要登录,系统会提示您。发出ls命令以获取目录列表。

通过所有这些,客户端将显示发送和接收的消息。可能存在一些代码未处理的消息变体。例如,SimpleFTP代码here不处理多行响应。请参阅RFC-959§4.2:FTP响应。

我使用的一个嵌入式系统响应成功登录:

220-Setting memory limit to 1024+1024kbytes
220-Local time is now 10:33 and the load is 1.36.
220 You will be disconnected after 1800 seconds of inactivity.

SimpleFTP代码失败,因为它期望以"220 "开头的单行。

此外,尽管FTP协议已经很老了,但您会遇到很多不合规的实现。

如果您需要执行比“放置文件”或“获取文件”更复杂的操作,请查看edtFTPj/Free