Открытие нескольких FTP-соединений - PullRequest
0 голосов
/ 27 июня 2019

Я открываю несколько соединений FTP в моем коде в разных потоках.Может быть два подключения к одному и тому же FTP-серверу с использованием одинаковых учетных данных.

Может ли это вызвать проблему с активным / пассивным обратным каналом, передающим данные?Фактическая проблема, с которой я сталкиваюсь, заключается в том, что не удается войти в систему, даже если она работала несколько секунд назад в другом потоке.Трудно воспроизвести.

Другой вопрос, активна или пассивна стандартная настройка?Какой из них лучше?

FTPClient ftp = new FTPClient();

ftp.setDefaultTimeout(timeoutMilliseconds);
ftp.setDataTimeout(timeoutMilliseconds);
ftp.setConnectTimeout(timeoutMilliseconds);
//ftp.setSoTimeout(1000);
//ftp.setControlKeepAliveTimeout(1000);
//ftp.setControlKeepAliveReplyTimeout(1000);

ftp.connect(serverAddress, serverPort);
logger.info("Connected successfully to " + serverAddress + ":" + serverPort);
boolean login = ftp.login(username, password);
logger.info("Logged in successfully to " + serverAddress + ":" + serverPort);


ftp.disconnect();

1 Ответ

0 голосов
/ 27 июня 2019

Рекомендуется пассивный режим. Пожалуйста, найдите ниже настройки, которые я использовал в своем проекте. Вы можете обратиться к https://www.jscape.com/blog/bid/80512/active-v-s-passive-ftp-simplified для получения дополнительной информации.

FTPClient ftp = new FTPClient();
        ftp.addProtocolCommandListener(new PrintCommandListener(new PrintWriter(System.out)));
        ftp.connect(host, port);
        int reply = ftp.getReplyCode();
        if (!FTPReply.isPositiveCompletion(reply)) {
            ftp.disconnect();
            throw new IllegalArgumentException("Not able to connect to the ftp Server ");
        }
        ftp.login(userName, password);
        ftp.setFileType(FTP.BINARY_FILE_TYPE);
        ftp.enterLocalPassiveMode();
        ftp.setBufferSize(100000);
        ftp.setConnectTimeout(1200000);
        ftp.setDataTimeout(1200000);
        ftp.setDefaultTimeout(1200000);
...