0

私のコードでは、サーバーとの多くの対話が発生すると予想されるため、Jsch セッションをアクティブに維持しようとしています。そして、ロジックは次のとおりです。

  1. 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;

問題は、チャネルに 1 バイトを挿入する前に、新しいチャネルが以前のチャネルと同じエラーを受け取ったのはなぜですか?

4

1 に答える 1

0

わかった。そのため、以前にセッションを使用して存在しないファイルを取得したことが原因で、取得操作によって返された入力ストリームが閉じられていません。これにより、同じセッションで後続のすべての操作がトリガーされ、id == 2 の SftpException がスローされます。つまり、ファイルが見つかりません

于 2014-05-19T02:52:15.530 に答える