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