我通过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();
}
}
Run Code Online (Sandbox Code Playgroud)
小智 10
我有一个类似的问题,但有正确的端口.session.connect()只是挂起并且不返回任何内容.而其他程序可以成功连接.
原因是主机提供了更多的身份验证方法,我们必须指出Jsch只使用密码.
java.util.Properties config = new java.util.Properties();
config.put("StrictHostKeyChecking", "no");
config.put("PreferredAuthentications", "password");
session.setConfig(config);
Run Code Online (Sandbox Code Playgroud)
可能是端口22是SFTP的默认端口吗?并且在端口21上运行的FTP服务器将不知道如何协商对话以获得安全的FTP.基本上,SFTP是基于SSH的FTP.
编辑:问题是,它正在无限期地等待谈判完成.这是墨西哥的对峙,双方都没有放弃.呼叫session.setTimeout()之前session.connect(),或者叫session.connect(timeout),用一些适当的值(3-5秒).我相信超时是以毫秒为单位.