简体   繁体   中英

NoRouteToHostException trying to connect to remote host via org.apache.commons.net.ftp.FTPClient in SFTP mode

I'm trying to upload a file via Secure FTP with org.apache.commons.net.ftp.FTPClient but I receive "java.net.NoRouteToHostException: No route to host" when connecting. The host is pingable and I can even read/write files with my FTP user via Filezilla SFTP connection to it. No firewall active in my router. What could be the problem?

My specs: Mint 17 x64, Java 7, router Netgear DGND4000 (maybe this help)

This is the code:

package it.eproject.pdf;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

import org.apache.commons.net.ftp.FTPClient;


public class Test {
    public static void main(String[] args) {
        System.out.println("Start upload file");
        String sourceFile = "pdf/d00001.pdf";
        String pdfName = "d00001.pdf";
        String pdfDestFolder = "/pdf";

        String ftpHost = "itsa.pingable.host";
        String ftpUsername = "username";
        String ftpPassword = "password";

        FTPClient ftp = new FTPClient();

        try {
            ftp.setConnectTimeout(5000);
            ftp.connect(ftpHost);
            ftp.login(ftpUsername, ftpPassword);
            ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
            ftp.enterLocalPassiveMode();

            InputStream input = new FileInputStream(new File(pdfName));
            ftp.storeFile(pdfDestFolder + pdfName, input);

            ftp.logout();
            ftp.disconnect();
        } catch (IOException e) {
            e.printStackTrace();
        }
        System.out.println("Done"); 
    }
}

and this the exception:

java.net.NoRouteToHostException: No route to host
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:579)
at org.apache.commons.net.SocketClient.connect(SocketClient.java:182)
at org.apache.commons.net.SocketClient.connect(SocketClient.java:203)
at org.apache.commons.net.SocketClient.connect(SocketClient.java:296)
at it.eproject.pdf.Test.main(Test.java:26)

SFTP (Secure FTP) is not the same as FTPS (FTP over SSL). Make sure you're not mixing apples and oranges.

我想Apache Commons库不提供SFTP API,所以我改用了JCraft Jsch( http://www.jcraft.com/jsch/ ),它的工作原理很吸引人。

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM