Я использую 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 (Тайм-аут соединения)
- пока
При тайм-аутах протоколируется:
- таймаут: сокет не установлен
- пока
Первый тайм-аут на самом деле не моя проблема, но расстраивает то, что я не понимаю, почему моя программа завершает работу после 1 попытки подключения.
За всеми другими исключениями, которые я обнаружил, программа пыталась выполнить это 3 раза Что мне не хватает? В чем причина того, что мой код не пытается подключиться еще 2 раза?
Спасибо
Edit:
-Не уверен, что это поможет, но .jar выполняется в .sh, который выполняется заданием cron.
-Также на сервере установлена ОС Debian.
- По словам нашего сетевого парня, наши собственные брандмауэры, похоже, не являются причиной тайм-аута.