0

我使用来自 apache.org 的库并使用来自 java2s.com 的代码:

import org.apache.commons.net.ftp.FTPClient;
import java.io.IOException;
import java.io.FileOutputStream;

public class Main {
  public static void main(String[] args) {
    FTPClient client = new FTPClient();
    FileOutputStream fos = null;

    client.connect("ftp.domain.com");
    client.login("admin", "secret");
    client.enterLocalPassiveMode();

    String filename = "sitemap.xml";
    fos = new FileOutputStream(filename);

    client.retrieveFile("/" + filename, fos);
    fos.close();
    client.disconnect();
  }
}

我下载了库,将其移至 lib 文件夹并将其重命名为 cn.jar。

编译:(在 Windows 7 下)

javac -cp ".;lib\cn.jar" Main.java

运行:(在 Windows 7 下)

java -cp ".;lib\cn.jar" Main

我有: http: //freelifer.narod.ru/some.png

如何解决?怎么了?

4

1 回答 1

1

我的猜测:FTP 协议定义了两个连接——一个数据连接和一个控制连接。您的示例代码成功建立了控制连接:

client.connect("ftp.domain.com");
client.login("admin", "secret");

的默认构造函数FTPClient定义应在活动模式下建立数据连接(这意味着当您请求文件时,服务器将尝试打开与您的客户端的连接)。我认为由于您的防火墙或其他网络问题,无法打开数据连接。数据连接在这里打开:

client.retrieveFile("/" + filename, fos);

您可以尝试被动模式,或者您可以再次检查您的网络设置。enterLocalPassiveMode调用FTPClient的方法进入被动模式。此方法导致向服务器发出 PASV(或 EPSV)命令。例子:

client.connect("ftp.domain.com");
client.login("admin", "secret");
client.enterLocalPassiveMode();

干杯!

于 2011-02-20T12:13:42.927 回答