FTP-клиент (из apache.org) и сокет кроме - PullRequest
0 голосов
/ 20 февраля 2011

Я использую библиотеку из 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

Как это исправить?Что не так?

1 Ответ

1 голос
/ 20 февраля 2011

Мое предположение: протокол 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();

ура!

...