我通过sftp(JSCH)连接到FTP服务器.
Evertime我使用端口21连接到FTP服务器,它始终挂在session.connect().
它不会抛出任何异常.但是当我使用其他端口时.它工作,它抛出异常.
有什么方法可以捕捉错误吗?
这是我的代码示例.
public static void main(String[] args) throws SftpException { JSch jsch = new JSch(); try { Session session = jsch.getSession("username", "host", 21); session.setConfig("StrictHostKeyChecking", "no"); session.setPassword("password"); session.connect(); Channel channel = session.openChannel("sftp"); channel.connect(); ChannelSftp channelSftp = (ChannelSftp) channel; session.disconnect(); channelSftp.disconnect(); } catch (JSchException e) { log("Cannot make connection to FTP server "); e.printStackTrace(); } }
小智.. 10
我有一个类似的问题,但有正确的端口.session.connect()只是挂起并且不返回任何内容.而其他程序可以成功连接.
原因是主机提供了更多的身份验证方法,我们必须指出Jsch只使用密码.
java.util.Properties config = new java.util.Properties(); config.put("StrictHostKeyChecking", "no"); config.put("PreferredAuthentications", "password"); session.setConfig(config);
brettw.. 6
可能是端口22是SFTP的默认端口吗?并且在端口21上运行的FTP服务器将不知道如何协商对话以获得安全的FTP.基本上,SFTP是基于SSH的FTP.
编辑:问题是,它正在无限期地等待谈判完成.这是墨西哥的对峙,双方都没有放弃.呼叫session.setTimeout()
之前session.connect()
,或者叫session.connect(timeout)
,用一些适当的值(3-5秒).我相信超时是以毫秒为单位.