超时异常意外地用 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: Connexion terminée par expiration du délai d'attente (Connection timed out(

--再见

随着超时,它会记录:

-- 超时:未建立套接字

--再见

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

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

谢谢

编辑:-不确定它是否有帮助,但.jar是在由 cron 作业执行的.sh中执行的。

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

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

由于您没有发布调用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;
}   

相关内容

最新更新