1. Введение
В этом кратком руководстве мы обсудим некоторые возможные причины java.net.ConnectException
. Затем мы покажем, как проверить соединение с помощью двух общедоступных команд и небольшого примера Java.
2. Что вызывает исключение java.net.ConnectException
Исключение java.net.ConnectException
является одним из наиболее распространенных исключений Java, связанных с сетью. Мы можем столкнуться с этим, когда устанавливаем TCP-соединение от клиентского приложения к серверу. Поскольку это проверенное исключение, мы должны правильно обрабатывать его в нашем коде в блоке try-catch
.
Есть много возможных причин этого исключения:
- Сервер, к которому мы пытаемся подключиться, просто не запущен, поэтому мы не можем получить соединение
- Комбинация хоста и порта, которую мы используем для подключения к серверу, может быть неправильной.
- Брандмауэр может блокировать подключения с определенных 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
, чтобы проверить, работает ли сервер, к которому мы пытаемся подключиться `` .
Например, мы можем проверить, запущен ли сервер ForEach:
ping foreach.com
Если сервер ForEach запущен, мы должны увидеть информацию об отправленных и полученных пакетах.
PING foreach.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
— еще один полезный инструмент командной строки, который мы можем использовать для подключения к указанному хосту или IP-адресу. Кроме того, мы также можем передать точный порт, который мы хотим протестировать. В противном случае будет использоваться порт 23 по умолчанию.
Например, если мы хотим подключиться к веб-сайту ForEach через порт 80, мы можем запустить:
telnet foreach.com 80
Стоит отметить, что команды ping
и telnet
могут работать не всегда, даже если сервер, к которому мы пытаемся подключиться, работает и мы используем правильную комбинацию хоста и порта. Это часто имеет место в производственных системах, которые обычно надежно защищены от несанкционированного доступа. Кроме того, еще одной причиной сбоя может быть брандмауэр, блокирующий определенный интернет-трафик.
5. Вывод
В этом кратком руководстве мы обсудили распространенное сетевое исключение Java, java.net.ConnectException
.
Мы начали с объяснения возможных причин этого исключения. Мы показали, как программно перехватывать исключение, а также две полезные команды CLI, которые могут помочь определить причину.
Как всегда, код, показанный в этой статье, доступен на GitHub .