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

1. Въведение

В този бърз урок ще обсъдим някои възможни причини за java.net.ConnectException . След това ще покажем как да проверите връзката с помощта на две публично достъпни команди и малък пример за Java.

2. Какво причинява java.net.ConnectException

В java.net.ConnectException изключение е един от най-често срещаните Java изключенията, свързани с изграждане на мрежи. Може да го срещнем, когато установяваме TCP връзка от клиентско приложение към сървър. Тъй като това е проверено изключение, трябва да го обработваме правилно в нашия код в блок за опити за улавяне .

Има много възможни причини за това изключение:

  • Сървърът, с който се опитваме да се свържем, просто не е стартиран, следователно не можем да получим връзка
  • Комбинацията хост и порт, която използваме за свързване със сървъра, може да е неправилна
  • Защитна стена може да блокира връзки от конкретни 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

Чрез 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.