Behandlung von java.net.ConnectException

1. Einleitung

In diesem kurzen Tutorial werden einige mögliche Ursachen für java.net.ConnectException erläutert . Anschließend zeigen wir anhand von zwei öffentlich verfügbaren Befehlen und einem kleinen Java-Beispiel, wie die Verbindung überprüft wird.

2. Was verursacht java.net.ConnectException ?

Die Ausnahme java.net.ConnectException ist eine der häufigsten Java-Ausnahmen im Zusammenhang mit Netzwerken. Dies kann auftreten, wenn wir eine TCP-Verbindung von einer Clientanwendung zu einem Server herstellen. Da es sich um eine aktivierte Ausnahme handelt, sollten wir sie in unserem Code in einem Try-Catch- Block ordnungsgemäß behandeln .

Es gibt viele mögliche Ursachen für diese Ausnahme:

  • Der Server, zu dem wir eine Verbindung herstellen möchten, wird einfach nicht gestartet. Daher können wir keine Verbindung herstellen
  • Die Host- und Portkombination, mit der wir eine Verbindung zum Server herstellen, ist möglicherweise falsch
  • Eine Firewall blockiert möglicherweise Verbindungen von bestimmten IP-Adressen oder Ports

3. Programmgesteuertes Abfangen der Ausnahme

Normalerweise stellen wir programmgesteuert über die Klasse java.net.Socket eine Verbindung zum Server her . Um eine TCP-Verbindung herzustellen, müssen wir sicherstellen, dass wir eine Verbindung mit der richtigen Kombination aus Host und Port herstellen:

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(); }

Wenn die Kombination aus Host und Port nicht korrekt ist, löst Socket eine java.net.ConnectException aus. In unserem obigen Codebeispiel drucken wir den Stack-Trace, um besser festzustellen, was falsch läuft. Keine sichtbare Stapelverfolgung bedeutet, dass unser Code erfolgreich mit dem Server verbunden wurde.

In diesem Fall sollten wir die Verbindungsdetails überprüfen, bevor wir fortfahren. Wir sollten auch überprüfen, ob unsere Firewall die Verbindung nicht verhindert.

4. Überprüfen der Verbindungen mit der CLI

Über die CLI können wir mit dem Befehl ping überprüfen, ob der Server, zu dem wir eine Verbindung herstellen möchten, ausgeführt wird .

Zum Beispiel können wir überprüfen, ob der Baeldung-Server gestartet ist:

ping baeldung.com

Wenn der Baeldung-Server ausgeführt wird, sollten Informationen zu gesendeten und empfangenen Paketen angezeigt werden.

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 ist ein weiteres nützliches CLI-Tool, mit dem wir eine Verbindung zu einem bestimmten Host oder einer bestimmten IP-Adresse herstellen können. Darüber hinaus können wir auch einen genauen Port übergeben, den wir testen möchten. Andernfalls wird der Standardport 23 verwendet.

Wenn wir beispielsweise über Port 80 eine Verbindung zur Baeldung-Website herstellen möchten, können wir Folgendes ausführen:

telnet baeldung.com 80

Es ist erwähnenswert, dass Ping- und Telnet- Befehle möglicherweise nicht immer funktionieren - selbst wenn der Server, den wir erreichen möchten, ausgeführt wird und wir die richtige Kombination aus Host und Port verwenden. Dies ist häufig bei Produktionssystemen der Fall, die normalerweise stark gesichert sind, um unbefugten Zugriff zu verhindern. Außerdem kann eine Firewall, die bestimmten Internetverkehr blockiert, eine weitere Fehlerursache sein.

5. Schlussfolgerung

In diesem kurzen Tutorial haben wir die allgemeine Java-Netzwerkausnahme java.net.ConnectException erläutert .

Wir haben mit einer Erklärung möglicher Ursachen dieser Ausnahme begonnen. Wir haben gezeigt, wie die Ausnahme programmgesteuert abgefangen werden kann, zusammen mit zwei nützlichen CLI-Befehlen, mit denen die Ursache ermittelt werden kann.

Wie immer ist der in diesem Artikel gezeigte Code über GitHub verfügbar.