0

在我的代码中,我试图保持 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;

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

4

1 回答 1

0

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

于 2014-05-19T02:52:15.530 回答