Java NoRouteToHostException试图在SFTP模式下通过org.apache.commons.net.ftp.FTPClient连接到远程主机

Java NoRouteToHostException试图在SFTP模式下通过org.apache.commons.net.ftp.FTPClient连接到远程主机,java,ftp,sftp,apache-commons-net,Java,Ftp,Sftp,Apache Commons Net,我试图通过org.apache.commons.net.FTP.FTPClient通过安全FTP上传文件,但我收到java.net.NoRouteToHostException:连接时没有到主机的路由。主机是可ping的,我甚至可以通过Filezilla SFTP连接与FTP用户读/写文件。我的路由器中没有活动的防火墙。 有什么问题吗 我的规格:Mint 17 x64、Java 7、路由器Netgear DGND4000可能有帮助 代码如下: package it.eproject.pdf;

我试图通过org.apache.commons.net.FTP.FTPClient通过安全FTP上传文件,但我收到java.net.NoRouteToHostException:连接时没有到主机的路由。主机是可ping的,我甚至可以通过Filezilla SFTP连接与FTP用户读/写文件。我的路由器中没有活动的防火墙。 有什么问题吗

我的规格:Mint 17 x64、Java 7、路由器Netgear DGND4000可能有帮助

代码如下:

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"); 
    }
}
这是个例外:

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安全FTP与SSL上的FTPS FTP不同。请确保不要混用苹果和橙子。

我想Apache Commons libs不提供SFTP API,因此我切换到JCraft Jsch,它工作起来很有魅力。

感谢您的快速回答,我更新了问题。我必须使用SFTP,而不是FTPS。在我看来,apachecommons的FTP非常无聊。在我以前的工作中,我使用JSCH编写了一个SFTP类。这里有一篇关于我认为您需要做什么的帖子:我认为您完全正确。Jsch也为我做这项工作。我对Apache Commons中缺少SFTP感到有点惊讶,但这超出了范围。。。