您的位置:首页 > Web前端 > JavaScript

com.jcraft.jsch.JSchException: channel is not opened解决方案

2016-03-24 11:25 796 查看
在一个批量下载文件的程序时,发现下载的文件出错,最多只能下载10个文件,剩下的文件丢失了,查看代码,也没有逻辑上的错误,下载丢失也没报错

考虑到之前出现过前台页面传入后台的值丢失,然后在后台对前台输入的信息进行println,发现数据未丢失,也未传2次而多出null,

Session session = connection.getSession(user, ip, port);
ChannelExec channelExec = (ChannelExec) session.openChannel("exec");
channelExec.setCommand(cmd);
channelExec.setInputStream(null);
channelExec.setErrStream(System.err);
channelExec.connect();


然后使用try,catch进行捕捉,查看日志发现在下载第十一个文件的时候总是失败

错误信息com.jcraft.jsch.JSchException: channel is not opened.,

可能原因默认的session时间有限制,然后对session时间进行获取

println("session timeout" + session.getTimeout())


获取到的session时间是0,发现没什么问题,然后设置了一个长一点的时间试试

session.setTimeout(600000);


问题并没有解决

也可能是环境有问题,查看一下配置文件,可能是session有限制



查看sshd_config



在配置文件中有MaxSessions,原来是10,我把它改成了20,并去掉了“#”符号,保存后重启



然后重新运行工程,发现这次下载的是20个文件,没有丢失,又多试了几次,效果很理想,问题算是解决了吧,原来这里MaxSession默认是的10,所以只能最多连接10次。

//———————————————————————-

上述方法可以解决这个问题,但不是最好的,在原来的代码里存在bug,在这个方法里调用的另一个方法,只有开启,没有关闭,所以导致上述问题

Channel channel = session.openChannel("sftp")
channel.disconnect();//添加关闭
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息