Почему при запуске URL-адреса возникает исключение «java.net.ConnectException: Connection timed out»?

Я получаю сообщение ConnectException: Connection timed out с некоторой частотой из моего кода. URL, который я пытаюсь ударить, вверх. Один и тот же код работает для некоторых пользователей, но не для других. Кажется, что, как только один пользователь начинает получать это исключение, они продолжают получать исключение.

Вот трассировка стека:

 java.net.ConnectException: Connection timed out Caused by: java.net.ConnectException: Connection timed out at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333) at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195) at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182) at java.net.Socket.connect(Socket.java:516) at java.net.Socket.connect(Socket.java:466) at sun.net.NetworkClient.doConnect(NetworkClient.java:157) at sun.net.www.http.HttpClient.openServer(HttpClient.java:365) at sun.net.www.http.HttpClient.openServer(HttpClient.java:477) at sun.net.www.http.HttpClient.(HttpClient.java:214) at sun.net.www.http.HttpClient.New(HttpClient.java:287) at sun.net.www.http.HttpClient.New(HttpClient.java:299) at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:796) at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:748) at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:673) at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:840) 

Вот fragment моего кода:

 URLConnection urlConnection = null; OutputStream outputStream = null; OutputStreamWriter outputStreamWriter = null; InputStream inputStream = null; try { URL url = new URL(urlBase); urlConnection = url.openConnection(); urlConnection.setDoOutput(true); outputStream = urlConnection.getOutputStream(); // exception occurs on this line outputStreamWriter = new OutputStreamWriter(outputStream); outputStreamWriter.write(urlString); outputStreamWriter.flush(); inputStream = urlConnection.getInputStream(); String response = IOUtils.toString(inputStream); return processResponse(urlString, urlBase, response); } catch (IOException e) { throw new Exception("Error querying url: " + urlString, e); } finally { IoUtil.close(inputStream); IoUtil.close(outputStreamWriter); IoUtil.close(outputStream); } 

9 Solutions collect form web for “Почему при запуске URL-адреса возникает исключение «java.net.ConnectException: Connection timed out»?”

Таймауты подключения (при условии, что локальная сеть и несколько клиентских машин) обычно возникают из

a) какой-то брандмауэр на пути, который просто ест пакеты, не сообщая отправителю такие вещи, как «No Route to host»,

b) потери пакетов из-за неправильной конфигурации сети или перегрузки линии

c) слишком много запросов на перегрузку сервера

d) небольшое количество одновременно доступных streamов / процессов на сервере, что приводит к их удалению. Это происходит, в частности, с запросами, которые требуют много времени для запуска и могут сочетаться с c).

Надеюсь это поможет.

Если URL-адрес работает хорошо в веб-браузере на том же компьютере, возможно, код Java не использует прокси-сервер HTTP, используемый браузером для подключения к URL-адресу.

Я бы рекомендовал увеличить время ожидания соединения до получения выходного streamа, например:

 urlConnection.setConnectTimeout(1000); 

Где 1000 – в миллисекундах (1000 миллисекунд = 1 секунда).

В сообщении об ошибке говорится все: время ожидания подключения. Это означает, что ваш запрос не получил ответа в течение некоторого (по умолчанию) таймфрейма. Причины, по которым не было получено никакого ответа, вероятно, будут следующими:

a) IP / домен или порт неверны

b) IP / домен или порт (т.е. служба) не работают

c) IP / домен занимает больше времени, чем ваш таймаут по умолчанию для ответа

d) У вас есть брандмауэр, который блокирует запросы или ответы на любой порт, который вы используете

e) У вас есть брандмауэр, который блокирует запросы к этому конкретному хосту

f) Ваш доступ в Интернет не работает

g) Ваш Live-сервер не работает, т.е. в случае вызова «rest-API».

Обратите внимание, что брандмауэры и блокировка портов или IP-адресов могут быть установлены вашим интернет-провайдером

  • попробуйте сделать Telnet, чтобы увидеть проблему с брандмауэром
  • выполнить tracert / traceroute чтобы найти количество прыжков

Это может быть проблема с IPv6 (хост публикует IP-адрес AAAA-Address, а хост-пользователи считают, что он настроен для IPv6, но на самом деле он неправильно подключен). Это также может быть проблема MTU сети, блок брандмауэра, или целевой хост может публиковать различные IP-адреса (случайно или на основе страны-источника), которые не все доступны. Или аналогичные сетевые проблемы.

Вы не можете много сделать, кроме того, чтобы установить тайм-аут и добавить хорошие сообщения об ошибках (особенно распечатывать разрешенный адрес хоста). Если вы хотите сделать его более надежным, добавьте повторную попытку, параллельную попытку всех адресов, а также посмотрите на кеширование имен (положительное и отрицательное) на платформе Java.

Существует вероятность того, что ваш IP / хост заблокирован удаленным хостом, особенно если он считает, что вы слишком сильно нажимаете на него.

Причина, по которой это случилось со мной, заключалась в том, что удаленный сервер разрешал только определенный IP-адрес, но не свой, и я пытался отображать изображения с URL-адресов сервера … так что все просто остановилось, отображая ошибку таймаута, которую вы имел…

Убедитесь, что либо сервер разрешает собственный IP-адрес, либо что вы делаете вещи с какого-то удаленного URL-адреса, который действительно существует.

Я решил свою проблему:

 System.setProperty("https.proxyHost", "myProxy"); System.setProperty("https.proxyPort", "80"); 

или http.proxyHost

  • HttpClient 4.0.1 - как освободить соединение?
  • Загрузка JSON с NSURLSession не возвращает никаких данных
  • java.rmi.ConnectException: подключение отказалось от хоста: 127.0.1.1;
  • Мгновенно обнаруживать отключение клиента от серверного сокета
  • Как управлять соединениями MongoDB в веб-приложении Node.js?
  • Присоединение темы к себе
  • проверить подключение к Интернету в cocoa-приложении
  • Можно ли использовать статический экземпляр java.sql.Connection в многопоточной системе?
  • Java обнаруживает потерянное соединение
  • Interesting Posts

    Как использовать две или более базы данных с весной?

    C # – Как добавить рабочий лист Excel программно – Office XP / 2003

    Как проверить через bash, если ваше соединение является беспроводным N / G / … в Linux?

    CORS с POSTMAN

    Как включить технологию виртуализации в Samsung Chromebox

    Используйте файл rvmrc или ruby-version для установки gemset проекта с RVM?

    Настроить рейд 1 после установки ОС

    Список всех ключевых слов Firefox одновременно?

    Ложноположительная ошибка «неопределенной переменной» при компиляции SCSS

    Программно активировать режим самолета?

    Какой пакет lang подходит для SICP в Dr.Racket?

    Матричный class C ++

    Как мне требовать, чтобы универсальный тип реализовал такую ​​операцию, как Add, Sub, Mul или Div в общей функции?

    Что такое NetBIOS? Нужно ли Windows открыть порты 137 и 138?

    Оставляет ли перемещение объект в пригодном для использования состоянии?

    Давайте будем гением компьютера.