Рубрики
Без рубрики

Обработка java.net.ConnectException

Узнайте, как обрабатывать java.net.ConnectException

Автор оригинала: baeldung.

1. введение

В этом кратком руководстве мы обсудим некоторые возможные причины java.net.ConnectException . Затем мы покажем, как проверить соединение с помощью двух общедоступных команд и небольшого примера Java.

2. Что вызывает java.net.ConnectException

Исключение java.net.ConnectException является одним из наиболее распространенных исключений Java, связанных с сетью. Мы можем столкнуться с этим, когда устанавливаем TCP-соединение от клиентского приложения к серверу. Поскольку это проверенное исключение, мы должны правильно обработать его в нашем коде в блоке try-catch .

Существует множество возможных причин этого исключения:

  • Сервер, к которому мы пытаемся подключиться, просто не запущен, поэтому мы не можем получить соединение
  • Комбинация хоста и порта, которую мы используем для подключения к серверу, может быть неправильной
  • A брандмауэр может блокировать подключения с определенных IP-адресов или портов

3. Перехват исключения программно

Обычно мы подключаемся к серверу программно, используя класс java.net.Socket . Чтобы установить TCP-соединение, мы должны убедиться, что мы подключаемся к правильной комбинации хоста и порта:

String host = "localhost";
int port = 5000;

try {
    Socket clientSocket = new Socket(host, port);

    // do something with the successfully opened socket

    clientSocket.close();
} catch (ConnectException e) {
    // host and port combination not valid
    e.printStackTrace();
} catch (Exception e) {
    e.printStackTrace();
}

Если комбинация хоста и порта неверна, Socket вызовет исключение java.net.ConnectException. В приведенном выше примере кода мы печатаем трассировку стека, чтобы лучше определить, что происходит не так. Отсутствие видимой трассировки стека означает, что наш код успешно подключен к серверу.

В этом случае мы должны проверить детали подключения, прежде чем продолжить. Мы также должны убедиться, что ваш брандмауэр не препятствует подключению.

4. Проверка Соединений С КЛИЕНТОМ

Через CLI мы можем использовать команду ping , чтобы проверить, работает ли сервер, к которому мы пытаемся подключиться .

Например, мы можем проверить, запущен ли сервер Baeldung:

ping baeldung.com

Если сервер Baeldung запущен, мы должны увидеть информацию об отправленных и полученных пакетах.

PING baeldung.com (104.18.63.78): 56 data bytes
64 bytes from 104.18.63.78: icmp_seq=0 ttl=57 time=7.648 ms
64 bytes from 104.18.63.78: icmp_seq=1 ttl=57 time=14.493 ms

telnet – это еще один полезный инструмент CLI, который мы можем использовать для подключения к указанному хосту или IP-адресу. Кроме того, мы также можем передать точный порт, который мы хотим протестировать. В противном случае будет использоваться порт 23 по умолчанию.

Например, если мы хотим подключиться к веб-сайту Baeldung через порт 80, мы можем запустить:

telnet baeldung.com 80

Стоит отметить, что команды ping и telnet могут не всегда работать — даже если сервер, на который мы пытаемся связаться, запущен и мы используем правильную комбинацию хоста и порта. Это часто происходит в производственных системах, которые обычно надежно защищены для предотвращения несанкционированного доступа. Кроме того, брандмауэр, блокирующий определенный интернет-трафик, может быть еще одной причиной сбоя.

5. Заключение

В этом кратком руководстве мы обсудили общее исключение сети Java, java.net.ConnectException .

Мы начали с объяснения возможных причин этого исключения. Мы показали, как поймать исключение программно, а также две полезные команды CLI, которые могут помочь определить причину.

Как всегда, код, показанный в этой статье, доступен на GitHub .