vanesxl
@vanesxl

Как запустить программу java на centOS?

Здравствуйте, помогите решить проблему,
Есть компьютер 1 на нем установлена os windows. На этом компьютере я написал и собрал простенькую программу на java в нетбинсе. Суть программы подключаться к удаленному серверу по ftp и выводить на экран список файлов. Вот код программы:
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.apache.commons.net.ftp.FTPClient;
public class Main {
    public static void main(String[] args){
        try {
            FTPClient ftp = new FTPClient();
            ftp.connect("host");
            ftp.setDefaultPort(21);
            ftp.enterLocalPassiveMode();
          ftp.login("user","pass");
           String[] list = ftp.listNames();
            for(int i=0; i<list.length; i++){
                System.out.println(list[i]);
            }
           ftp.logout();
        } catch (IOException ex) {
           Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}


Есть компьютер 2 на нем стоит centOS. На него я скопировал jar файл, подключился к нему по SSH и набираю там java -jar file.jar
Программа через некоторое время выводит вот такое сообщение:
Apr 02, 2015 11:19:40 AM Main main
SEVERE: null
java.net.ConnectException: Connection timed out
        at java.net.PlainSocketImpl.socketConnect(Native Method)
        at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:345)
        at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
        at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
        at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
        at java.net.Socket.connect(Socket.java:589)
        at org.apache.commons.net.ftp.FTPClient._openDataConnection_(FTPClient.java:894)
        at org.apache.commons.net.ftp.FTPClient._openDataConnection_(FTPClient.java:759)
        at org.apache.commons.net.ftp.FTPClient.listNames(FTPClient.java:2825)
        at org.apache.commons.net.ftp.FTPClient.listNames(FTPClient.java:2876)
        at Main.main(Main.java:21)

Далее на компьютере 2 я проверил есть ли доступ вообще к удаленному фтп серверу, набираю telnet host 21
Самое интересное что удаленный сервер ответил. А с моей программы не подключается.
В чем может быть проблема?
  • Вопрос задан
  • 1557 просмотров
Решения вопроса 1
ehabarov
@ehabarov
IT Specialist
FTP-протокол использует более одного порта.
21 - это "управляющее соединение" (Control Connection).
Для передачи данных (вывод списка тоже относится к этому) используется отдельное соединение, которое называется "Data Connection".
В активном режиме инициатором этого соединения является FTP-сервер. На какой адрес и порт соединяться - сообщает клиент при открытии соединения. В настоящее время использовать такой режим передачи не рекомендуется.
В пассивном режиме инициатором соединения является клиент, а адрес и порт (динамический, меняется) сообщает FTP-сервер.

Нужно включать более подробное логгирование в FTP-клиенте, чтобы выводились команды, посылаемые на FTP-сервер и получаемые ответы.
Ну и проверить, не запрещено ли где-то соединение на порты, отличные от 21-го.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Applez
@Applez
Разраб
В linux порты 0-1000 можно открывать только от root. Скорее всего проблема в этом, вам просто не дают открыть порт. Попробуйте запустить код от root, если заработает, то настраивайтесь.
Ответ написан
Комментировать
@qassarb
Так же можно проверить настроики сети для JVM
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы