【问题标题】:Jsch sftp channel state impact by previous channel state of the same session?Jsch sftp通道状态受同一会话先前通道状态的影响?
【发布时间】:2014-07-04 18:01:27
【问题描述】:

在我的代码中,我试图保持 Jsch 会话处于活动状态,因为我预计会发生与服务器的许多交互。逻辑是:

  1. 一个线程将在会话中打开通道以检查文件是否存在
  2. 另一个线程尝试在同一会话中打开通道以将文件发送到服务器

但是我发现如果 #1 给我一个“找不到文件”,那么 #2 将在此处失败并出现相同的异常:

      Header header=new Header();
      header=header(buf, header);
      int length=header.length;
      int type=header.type;

      fill(buf, length);

      if(type!=SSH_FXP_STATUS && type!=SSH_FXP_HANDLE){
    throw new SftpException(SSH_FX_FAILURE, "invalid type="+type);
      }
      if(type==SSH_FXP_STATUS){
        int i=buf.getInt();
>>>>    throwStatusError(buf, i); 
      }
      byte[] handle=buf.getString();         // handle
      byte[] data=null;

所以问题是,为什么在我将单个字节放入频道之前,新频道会出现与先前频道相同的错误?

【问题讨论】:

    标签: java ssh jsch sshd


    【解决方案1】:

    好的。所以问题是我之前使用会话获取一个不存在的文件并且get操作返回的输入流没有关闭。这会触发同一会话上的所有后续操作,抛出 id == 2 的 SftpException,即找不到文件

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-02
      • 1970-01-01
      • 2011-09-12
      • 2011-12-31
      • 1970-01-01
      • 2011-08-10
      相关资源
      最近更新 更多