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プロトコルは、データ接続制御接続の2つの接続を定義しています。サンプルコードは、制御接続を正常に確立しました。

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

のデフォルトコンストラクタはFTPClient、データ接続をアクティブモードで確立する必要があることを定義します(つまり、ファイルを要求すると、サーバーはクライアントへの接続を開こうとします)。ファイアウォールなどのネットワーク上の問題により、データ接続を開くことができないと思います。データ接続はここで開かれます:

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

パッシブモードを試すか、ネットワーク設定をもう一度確認してください。enterLocalPassiveModeFTPClientのメソッドを呼び出すことにより、パッシブモードに入ります。このメソッドにより、PASV(またはEPSV)コマンドがサーバーに発行されます。例:

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

乾杯!

于 2011-02-20T12:13:42.927 に答える