我在 RHEl 6 上使用 Jsch 0.1.51 和 Jdk 1.7_51。在与远程计算机进行会话时,我收到以下异常:
com.jcraft.jsch.JSchException: Packet corrupt
at com.jcraft.jsch.Session.start_discard(Session.java:1049)
at com.jcraft.jsch.Session.read(Session.java:919)
at com.jcraft.jsch.UserAuthNone.start(UserAuthNone.java:56)
at com.jcraft.jsch.Session.connect(Session.java:389)
at com.jcraft.jsch.Session.connect(Session.java:183)
at TestSFTP.checkException(TestSFTP.java:130)
at TestSFTP.moveFileToDir(TestSFTP.java:78)
at TestSFTP.main(TestSFTP.java:73)
相同的代码在 RHEL 5 上运行良好。任何人都可以提供一些建议..谢谢
使用的代码是:
Session session = null;
ChannelSftp channelSftp = null;
JSch jsch = new JSch();
session = jsch.getSession(this.sftpUser,this.sftpHost,this.sftpPort);
Properties config = new Properties();
config.put("StrictHostKeyChecking", "no");
session.setConfig(config);
session.setPassword(this.sftpPassword);
session.connect();
channelSftp = (ChannelSftp)session.openChannel("sftp");
channelSftp.connect();
我在 session.connect(); 处收到错误
如果您尝试连接已存在的会话,则可能会发生此异常。解决方法是关闭会话,然后开始新会话。这对我有帮助。从这个网站找到了一些帮助:
http://flyingjxswithjava.blogspot.com/2015/03/comjcraftjschjscheException-packet.html http://flyingjxswithjava.blogspot.com/2015/03/comjcraftjschjschexception-packet.html
引用网站上的要点来理解问题:
当Session在循环中重复使用,故意断开会话或者由于超时而需要重新连接时,就会出现此异常。
抛出这样的异常的原因是Session第一次连接到远程站点时,会为Session生成一个称为Packet的随机数。
当线程处于 1 小时睡眠状态时,会话会由于在一段时间内没有活动而自动断开连接。
当Session断开时,Packet就会丢失。
当Session尝试重新连接时,它找不到Packet,因此抛出异常。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)