- Ошибка при передаче данных: PROT C is не допускается, если управляющее соединение защищено. Используйте PROT P. -> Если не использовался ftps.execPROT(“P”);
- Ошибка при передаче данных: сеанс TLS подключения к данным не возобновлен. -> Если использовался ftps.execPROT(“P”);
Я пытался создать FTP-сервер локально, но при попытке подключения заметил следующее:
- Старая версия сервера FileZilla (v0.9.60) .0) может подключаться и может «ftps.listDirectories()», если флажок «заставить PROT шифровать передачу файлов при использовании FTP через TLS» не установлен.
- Новая версия сервера FileZilla (v1.8.2) .0) только подключается, но не может «getListDirectories()», всегда пуст с ошибками, о которых я упоминал выше.
// Для подключения к 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