Тайм-аут игнорируется с неправильным IP - PullRequest
0 голосов
/ 01 апреля 2020

Я работаю над приложением Android (Java 8, apache .commons. net .ftp 3.6, Min: API 24 / target: API 27), которое подключается к FTP-серверу, но я У меня странная проблема:

Если я подключаюсь к одному из тестовых серверов publi c (например, speedtest.tele2.net) или напрямую к IP-адресу (например, 10.1.1.123), он работает нормально.

Если я специально добавляю опечатку в «нормальный» адрес (например, sspeedtest.tele2.net), я получаю ожидаемое java.net.UnknownHostException, но если я добавлю опечатку в IP-адрес, независимо от того, находится ли он в той же сети или нет (например, 10.1.1.223), больше ничего не происходит - без исключений, без ошибок, без результатов, даже по истечении установленного времени ожидания.

Код:

FTPClient f = new FTPClient();
f.setDefaultTimeout(5000); //5 seconds

try {
    f.connect(url,port);
    boolean b = f.login(username,password);
    Log.d(TAG,"logged in="+b+", connected="+f.isConnected());
} catch (IOException e) {
    e.printStackTrace();
}

Я позволю он работал немного дольше и, наконец, через 1 минуту и ​​16 секунд было сгенерировано исключение:

W/System.err: java.net.ConnectException: Connection refused

Я пробовал это несколько раз, и, кажется, исключение всегда выдается после 1: 16.

Как сделать так, чтобы тайм-аут тоже соблюдался? Я должен использовать другой?

1 Ответ

2 голосов
/ 01 апреля 2020

Вы устанавливаете тайм-аут для получения данных. Тайм-аут для открытия соединения является отдельным и устанавливается с помощью метода setConnectTimeout(int connectTimeout):

FTPClient f = new FTPClient();
f.setConnectTimeout(5000); // 5 second timeout to open connection
f.setDefaultTimeout(5000); // 5 second timeout when receiving data

Если вы получаете «отказано в соединении», это означает, что IP-адрес фактически используется некоторым хостом в сети. Если по этому адресу ничего не будет, вы получите сообщение об ошибке «Нет маршрута к хосту».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...