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

4 篇文章 0 订阅
2 篇文章 0 订阅

在一个批量下载文件的程序时,发现下载的文件出错,最多只能下载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();//添加关闭
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值