代码之家  ›  专栏  ›  技术社区  ›  Kumar V

java ftp代码中的问题

  •  1
  • Kumar V  · 技术社区  · 14 年前

    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 回复  |  直到 14 年前
        1
  •  1
  •   Andreas Dolk    14 年前

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

    问题是,您无法建立被动模式连接。如果服务器是一个标准产品,那么我假设,它将正确响应 227

    如果必须进行调试,我将从以下内容开始:

    1. 使用普通的基于shell的ftp客户端并尝试手动进入被动模式。也许你得到了不同的响应,也许服务器只是在真正的消息之前发送了一条空行
    2. 尝试连接到其他ftp服务器
    3. 检查防火墙设置-这些设置可能会阻止被动模式,因为它使用不同的端口
        2
  •  1
  •   Devon_C_Miller    14 年前

    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.
    

    "220 "

    另外,尽管FTP协议非常旧,但是您会遇到很多不一致的实现。

    如果您需要做任何比“put file”或“get file”更复杂的事情,请查看 edtFTPj/Free .