使用JSCH意外结束我的代码的超时异常

时间:2018-05-15 09:06:59

标签: java recursion networking timeout jsch

我正在使用jsch发送文件。我有这段代码:

public boolean connect()
{ 
    if (_connect()) return true;
    else if (cons_attempts < 3) 
    {
        cons_attempts ++;
        try 
        {
            Thread.sleep(3000);
        } 
        catch (InterruptedException ex){}
        finally
        {
            connect();
        }
    }
    return false;
}

public boolean _connect()
{
    try 
    {
        session = jsch.getSession(user, host, port);
        session.setTimeout(15000);
        session.setConfig("StrictHostKeyChecking","no");

        session.connect();
        Channel channel = session.openChannel("sftp");
        channel.connect(15000);
        sftp = (ChannelSftp) channel;
        return true;
    }
    catch (JSchException ex) 
    {
        MyLogger.log(Level.SEVERE, ex.getMessage());
        return false;
    }
}

我的代码只有超时异常问题。在此之前,我没有为jsch设置超时,日志是:

  

- java.net.ConnectException:Connexionendéeparexpirationdudélaid'dentte(连接超时)

     

- 再见

记录超时:

  

- 超时:未建立套接字

     

- 再见

第一次超时并不是我的问题,但令人沮丧的是我不明白为什么我的程序在连接尝试后只退出一次。

除了我到目前为止所发现的所有其他例外,该程序确实尝试了3次。我错过了什么?我的代码没有尝试连接2次的原因是什么?

由于

修改 - 不确定它是否有用,但.jar是在.sh执行的.sh中执行的。

- 服务器的操作系统也是Debian。

- 根据我们的网络人员,我们自己的防火墙似乎不是超时的原因。

1 个答案:

答案 0 :(得分:1)

因为你没有发布调用connect()方法的方法的完整代码,所以我假设你正在调用connect()方法然后调用_connect()方法。然后,如果您希望代码尝试三次尝试,则connect()方法应为

 public boolean connect(){ 
   int maxAttempt = 3;
   for(int cons_attempts  = 0 ; cons_attempts   < maxAttempt  ; cons_attempts  ++){ 
     if (_connect()) {return true;}
     try 
      {
         Thread.sleep(3000);
      } 
       catch (InterruptedException ex){}
     }
   }
   return false;
 }