Jsch sftp通道状态对同一会话的前一个通道状态的影响?

时间:2014-05-16 04:27:24

标签: java ssh jsch sshd

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

  1. 一个线程将在会话中打开通道以检查文件是否存在
  2. 另一个线程尝试在同一会话中打开通道以将文件发送到服务器
  3. 但是我发现如果#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;
    

    所以问题是为什么即使在我将一个字节放入通道之前,新通道也会出现与之前通道相同的错误?

1 个答案:

答案 0 :(得分:0)

好。因此问题导致我之前使用会话来获取不存在的文件,并且get操作返回的输入流未关闭。触发同一会话中的所有后续操作会抛出SftpException,其中id == 2,即找不到文件