Сброс соединения при вызове разъединения () с использованием java-фреймворка ftp enterprisedt

У меня возникли проблемы с отключением от ftp-сервера с использованием enterprisedt java ftp framework.< /а>

Я просто не могу вызвать разъединение() для объекта FileTransferClient без получения ошибки.

Ничего не делаю, кроме подключения к серверу, а потом отключения:

        // create client
        log.info("Creating FTP client");
        ftp = new FileTransferClient();

        // set remote host
        log.info("Setting remote host");
        ftp.setRemoteHost(host);
        ftp.setUserName(username);
        ftp.setPassword(password);

        // connect to the server
        log.info("Connecting to server " + host);
        ftp.connect();
        log.info("Connected and logged in to server " + host);

        // Shut down client
        log.info("Quitting client");
        ftp.disconnect();

        log.info("Example complete");

При запуске в журнале написано:

INFO [test] 28 maj 2010 16:57:20.216 : Creating FTP client
INFO [test] 28 maj 2010 16:57:20.263 : Setting remote host
INFO [test] 28 maj 2010 16:57:20.263 : Connecting to server x
INFO [test] 28 maj 2010 16:57:20.979 : Connected and logged in to server x
INFO [test] 28 maj 2010 16:57:20.979 : Quitting client
ERROR [FTPControlSocket] 28 maj 2010 16:57:21.026 : Read failed ('' read so far)

И трассировка стека:

com.enterprisedt.net.ftp.ControlChannelIOException: Connection reset
at com.enterprisedt.net.ftp.FTPControlSocket.readLine(FTPControlSocket.java:1029)
at com.enterprisedt.net.ftp.FTPControlSocket.readReply(FTPControlSocket.java:1089)
at com.enterprisedt.net.ftp.FTPControlSocket.sendCommand(FTPControlSocket.java:988)
at com.enterprisedt.net.ftp.FTPClient.quit(FTPClient.java:4044)
at com.enterprisedt.net.ftp.FileTransferClient.disconnect(FileTransferClient.java:1034)
at test.main(test.java:46)

Надо отметить, что я без проблем могу подключиться и делать с сервером всякие штуки, вроде получения списка файлов в текущей рабочей директории. Но я почему-то не могу отключиться! Я пробовал использовать как активный, так и пассивный режим.

Приведенный выше пример, кстати, скопирован/вставлен из их собственного примера. Я не могу найти НИЧЕГО, связанного с этим, выполнив поиск в Google, поэтому я надеялся, что у вас есть какие-либо предложения или опыт решения этой проблемы.


person Frederik Wordenskjold    schedule 28.05.2010    source источник
comment
Вы пробовали разные ftp-сервера? Возможно, реализация сервера отключает вас, когда вы отправляете команду quit (до того, как вы сделаете изящное закрытие на своей стороне).   -  person aioobe    schedule 28.05.2010
comment
у меня да. Я забыл упомянуть об этом в своем вопросе, но я пытался подключиться к 2 ftp-серверам с тем же результатом.   -  person Frederik Wordenskjold    schedule 28.05.2010


Ответы (1)


Попробуйте включить трассировку с помощью

com.enterprisedt.util.debug.Logger.setLevel(com.enterprisedt.util.debug.Level.DEBUG);

Это позволит вам наблюдать за связью между библиотекой и ftp-сервером.

Попробуйте открыть соединение с ftp-сервером с помощью клиента командной строки. Подключиться, авторизоваться, убедиться, что все работает. Затем введите quot quit. Это отправляет явную команду quit на ftp-сервер. Вы должны получить ответ 221 или 226. Если вы получили какой-либо другой код или соединение просто закрыто, значит, вы столкнулись с несовместимым FTP-сервером.

Если это так, вы также можете попробовать использовать disconnect(true), так как это просто закрывает соединения, а не пытается корректно завершить работу.

person Devon_C_Miller    schedule 28.05.2010
comment
Несоответствие, например, непонимание этой команды выхода? Я попробую, спасибо! - person Frederik Wordenskjold; 29.05.2010
comment
Я получаю ответ 221, поэтому я думаю, что с сервером все в порядке. разъединение (истина) работает, но меня раздражает, что он просто закрывает все. Я думаю, что могу просто реализовать функциональность разъединения () самостоятельно, но, тем не менее, раздражает знать, что есть какая-то ошибка, которую вы не знаете, как исправить: S - person Frederik Wordenskjold; 29.05.2010