gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 11:15:03 26 4
gpt4 key购买 nike

我正在使用 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)

-- bye

记录超时:

-- timeout: socket is not established

-- bye

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

除了我到目前为止发现的所有其他异常,该程序确实尝试了 3 次。我缺少什么?我的代码不再尝试连接 2 次的原因是什么?

谢谢

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

-服务器的操作系统也是 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;
}

关于java - 超时异常使用 JSCH 意外结束我的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50346293/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com