Клиентская библиотека Java FTPs успешно подключается к серверу, но список каталогов пуст из-за ошибки на серверах FileZiJAVA

Программисты JAVA общаются здесь
Anonymous
Клиентская библиотека Java FTPs успешно подключается к серверу, но список каталогов пуст из-за ошибки на серверах FileZi

Сообщение Anonymous »

Я использую клиентскую библиотеку Java commons-net для подключения к FTP-серверам, я могу успешно подключаться к серверам. Тем не менее, при вызове «ftps.listDirectories()» я получаю «0» при подключении к серверам FileZilla с ошибками:
  • Ошибка при передаче данных: PROT C is не допускается, если управляющее соединение защищено. Используйте PROT P. -> Если не использовался ftps.execPROT(“P”);
  • Ошибка при передаче данных: сеанс TLS подключения к данным не возобновлен. ->  Если использовался ftps.execPROT(“P”);
Эта проблема возникает не со всеми FTP-серверами.
Я пытался создать FTP-сервер локально, но при попытке подключения заметил следующее:
  • Старая версия сервера FileZilla (v0.9.60) .0) может подключаться и может «ftps.listDirectories()», если флажок «заставить PROT шифровать передачу файлов при использовании FTP через TLS» не установлен.
  • Новая версия сервера FileZilla (v1.8.2) .0) только подключается, но не может «getListDirectories()», всегда пуст с ошибками, о которых я упоминал выше.
Обратите внимание, что я пробовал FileZilla версию клиента (v3.67.1), чтобы убедиться, что я могу без проблем подключаться к FTP-серверам и просматривать файлы/каталоги.
// Для подключения к FTP-серверам (но без проблем с связь вообще)
public FTPConnection(String host, String username, String password, boolean passive) throws IOException {
if (ftps) {
this.log = Logger.getLogger(host);
this.host = host;
this.clientFtps = new FTPSClient(false);
try {
this.clientFtps.connect(host);
} catch (Exception e) {
log.debug(e.getStackTrace());
}
if (username != null)
try {
if (pasv) {
this.clientFtps.enterLocalPassiveMode();
} else {
this.clientFtps.enterLocalActiveMode();
}
this.clientFtps.login(username, password);
//log.debug(this.clientFtps.getReplyString());
} catch (IOException ex) {
ex.printStackTrace();
}
this.clientFtps.setFileType(FTP.BINARY_FILE_TYPE);
this.clientFtps.setFileTransferMode(FTP.BINARY_FILE_TYPE);
log.debug("the type of ftp file is : " + FTP.BINARY_FILE_TYPE);
} else {
this.host = host;
this.log = Logger.getLogger("ftp://" + host);
log.debug("ftp://" + host);
this.client = new FTPClient();
this.client.connect(host);
if (username != null)
try {
this.client.login(username, password);
log.debug(this.client.getReplyString());
} catch (IOException ex) {
ex.printStackTrace();
}
this.client.setFileType(FTP.BINARY_FILE_TYPE);
this.client.setFileTransferMode(FTP.BINARY_FILE_TYPE);
log.debug("the type of ftp file is : " + FTP.BINARY_FILE_TYPE);
if (pasv)
this.client.enterLocalPassiveMode();
else
this.client.enterLocalActiveMode();
}
}

// Для просмотра файлов/каталогов (вот в чем проблема)
public String[] dirs() throws IOException {
if (ftps) {
FTPFile[] files = clientFtps.listDirectories();
if (files == null)
return new String[0];
String[] result = new String[files.length];
for (int i = 0; i < result.length; i++)
result = files.getName();
return result;
} else {
FTPFile[] files = client.listDirectories();
if (files == null)
return new String[0];
String[] result = new String[files.length];
for (int i = 0; i < result.length; i++)
result = files.getName();
return result;
}
}


Подробнее здесь: https://stackoverflow.com/questions/788 ... of-directo

Вернуться в «JAVA»