Omgaan met java.net.ConnectException

1. Inleiding

In deze korte tutorial bespreken we enkele mogelijke oorzaken van java.net.ConnectException. Vervolgens laten we zien hoe u de verbinding kunt controleren met behulp van twee openbaar beschikbare opdrachten en een klein Java-voorbeeld.

2. Wat zijn de oorzaken java.net.ConnectException

De java.net.ConnectException uitzondering is een van de meest voorkomende Java-uitzonderingen met betrekking tot netwerken. We kunnen het tegenkomen wanneer we een TCP-verbinding tot stand brengen van een clienttoepassing naar een server. Omdat het een aangevinkte uitzondering is, moeten we deze correct afhandelen in onze code in een proberen te vangen blok.

Er zijn veel mogelijke oorzaken van deze uitzondering:

  • De server waarmee we verbinding proberen te maken, is gewoon niet gestart, daarom kunnen we geen verbinding maken
  • De combinatie van host en poort die we gebruiken om verbinding te maken met de server, is mogelijk onjuist
  • Een firewall kan verbindingen van specifieke IP-adressen of poorten blokkeren

3. Programmatisch de uitzondering opvangen

We maken meestal programmatisch verbinding met de server met behulp van de java.net.Socket klasse. Om een ​​TCP-verbinding tot stand te brengen, moeten we zorg ervoor dat we verbinding maken met de juiste combinatie van host en poort:

String host = "localhost"; int poort = 5000; probeer {Socket clientSocket = nieuwe Socket (host, poort); // doe iets met de succesvol geopende socket clientSocket.close (); } catch (ConnectException e) {// combinatie van host en poort niet geldig e.printStackTrace (); } catch (uitzondering e) {e.printStackTrace (); }

Als de combinatie van host en poort onjuist is, Stopcontact zal een java.net.ConnectException. In ons codevoorbeeld hierboven drukken we de stacktracering af om beter te bepalen wat er misgaat. Geen zichtbare stacktrace betekent dat onze code met succes is verbonden met de server.

In dit geval moeten we de verbindingsdetails controleren voordat we verder gaan. We moeten ook controleren of onze firewall de verbinding niet verhindert.

4. Verbindingen met de CLI controleren

Via de CLI kunnen we dat gebruik de ping opdracht om te controleren of de server waarmee we verbinding proberen te maken, actief is.

We kunnen bijvoorbeeld controleren of de Baeldung-server is gestart:

ping baeldung.com

Als de Baeldung-server actief is, zouden we informatie over verzonden en ontvangen pakketten moeten zien.

PING baeldung.com (104.18.63.78): 56 databytes 64 bytes van 104.18.63.78: icmp_seq = 0 ttl = 57 tijd = 7,648 ms 64 bytes vanaf 104.18.63.78: icmp_seq = 1 ttl = 57 tijd = 14,493 ms

telnet is een andere handige CLI-tool die we kunnen gebruiken om verbinding te maken met een opgegeven host of IP-adres. Bovendien kunnen we ook een exacte poort doorgeven die we willen testen. Anders wordt standaardpoort 23 gebruikt.

Als we bijvoorbeeld verbinding willen maken met de Baeldung-website op poort 80, kunnen we uitvoeren:

telnet baeldung.com 80

Het is vermeldenswaard dat ping en telnet opdrachten werken mogelijk niet altijd - zelfs als de server die we proberen te bereiken actief is en we de juiste combinatie van host en poort gebruiken. Dit is vaak het geval bij productiesystemen, die doorgaans zwaar beveiligd zijn om ongeoorloofde toegang te voorkomen. Bovendien kan een firewall die specifiek internetverkeer blokkeert, een andere oorzaak van een storing zijn.

5. Conclusie

In deze korte tutorial hebben we de algemene Java-netwerkuitzondering besproken, java.net.ConnectException.

We zijn begonnen met een uitleg van mogelijke oorzaken van die uitzondering. We hebben laten zien hoe u de uitzondering programmatisch kunt opvangen, samen met twee handige CLI-opdrachten die kunnen helpen om de oorzaak te achterhalen.

Zoals altijd is de code die in dit artikel wordt getoond, beschikbaar op GitHub.