我在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();
收到错误答案 0 :(得分:3)
如果您尝试在已存在的会话上进行连接,则可能发生此异常。解决方法是关闭会话然后开始新会话。这对我有帮助。从这个网站找到了一些帮助:
http://flyingjxswithjava.blogspot.com/2015/03/comjcraftjschjschexception-packet.html
从网站引用要点以了解问题:
会话在故意断开会话或因超时而需要重新连接的循环中重复使用会话时会发生此异常。
抛出此类异常的原因是Session第一次连接到远程站点时,会为会话生成一个名为Packet的随机数。
当线程休眠1小时后,由于在一段时间内没有活动,会话会自动断开。
当会话断开连接时,数据包将丢失。
当Session尝试重新连接时,它找不到Packet,因此会抛出异常。