Java.Net.ConnectException: Zeitüberschreitung bei Verbindung

Shuvayan Ghosh Dastidar 12 Oktober 2023
  1. Führen Sie Netzwerkanrufe mit java.net in Java durch
  2. Fehler im Paket java.net in Java
Java.Net.ConnectException: Zeitüberschreitung bei Verbindung

Das Paket java.net verfügt über viele Funktionen, mit denen Verbindungen zu beliebigen Servern im Internet hergestellt werden können und somit Restrufe wie GET oder POST ausgeführt werden können.

Dieses Tutorial konzentriert sich auf die Verwendung dieses Pakets, um grundlegende Netzwerkanrufe zu tätigen, und welche Fehler auftreten und behoben werden können.

Führen Sie Netzwerkanrufe mit java.net in Java durch

Das Tätigen von Netzwerkanrufen ist eines der wichtigsten Dinge, mit denen Java-Entwickler täglich konfrontiert sind. Das korrekte Durchführen von Netzwerkaufrufen kann die Anwendung robuster machen und eine gute Benutzererfahrung bieten.

Das Paket java.net hat viele Funktionen, die mit dem Tätigen von Netzwerkanrufen verbunden sind.

import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;

class Main {
  public static void main(String args[]) throws Exception {
    HttpURLConnection.setFollowRedirects(true); // Defaults to true

    String url = "https://www.delftstack.com/howto/java/";
    URL request_url = new URL(url);
    HttpURLConnection http_conn = (HttpURLConnection) request_url.openConnection();
    http_conn.setConnectTimeout(100000);
    http_conn.setReadTimeout(100000);
    http_conn.setInstanceFollowRedirects(true);
    System.out.println(String.valueOf(http_conn.getResponseCode()));
  }
}

Das obige Codesegment stellt eine GET-Anforderung an die url-Variable und öffnet dann eine Verbindung. Wenn alles funktioniert, druckt es den Antwortcode 200 aus.

Nach zu vielen Versuchen schlägt jedoch die Verbindung zum Server fehl und es kann eine IOException ausgelöst werden.

import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;

class Main {
  public static void main(String args[]) throws Exception {
    URL url = new URL("https://reqres.in/api/users");
    HttpURLConnection http = (HttpURLConnection) url.openConnection();
    http.setRequestMethod("POST");
    http.setDoOutput(true);
    http.setRequestProperty("Content-Type", "application/json");
    http.setRequestProperty("Content-Length", "0");
    String body = "{\"name\": \"morpheus\",\"job\": \"leader\"}";
    http.getOutputStream().write(body.getBytes("UTF8"));
    System.out.println(http.getResponseCode() + " " + http.getResponseMessage());
    http.disconnect();
  }
}

Das obige Codesegment sendet eine POST-Anforderung an einen Beispiel-REST-API-Server und gibt die Antwort zurück.

Fehler im Paket java.net in Java

Beim Tätigen von Netzwerkanrufen in Java kann es zu einem Connection Timed Out-Problem kommen. Das Beheben dieser Probleme ähnelt manchmal dem, warum eine bestimmte URL in einem Browser nicht geöffnet wird.

Sie können folgende Ursachen haben:

  1. Die IP/Domain der URL ist falsch.
  2. Der der IP/Domäne entsprechende Server ist ausgefallen.
  3. Möglicherweise hat eine Firewall die Anfragen blockiert oder das Internet befindet sich hinter einem Proxy.
  4. Der Server hat möglicherweise die IP-Adresse blockiert.

Zum Beispiel:

import java.io.*;
import java.net.URL;
import java.net.URLConnection;

class Main {
  public static void main(String args[]) throws Exception {
    URLConnection urlConnection = null;
    OutputStream outputStream = null;
    URL url = new URL("http://google.com");
    urlConnection = url.openConnection();
    urlConnection.setConnectTimeout(1);
  }
}

Ausgang:

Exception in thread "main" java.net.SocketTimeoutException: Connect timed out
	at java.base/java.net.Socket.connect(Socket.java:648)
	at java.base/sun.net.NetworkClient.doConnect(NetworkClient.java:177)
	at java.base/sun.net.www.http.HttpClient.openServer(HttpClient.java:474)
	at java.base/sun.net.www.http.HttpClient.openServer(HttpClient.java:569)
	at java.base/sun.net.www.http.HttpClient.<init>(HttpClient.java:242)
...

Daher wird die obige Ausnahme ausgelöst, wenn keine geeignete Verbindung zum Socket oder zur URL geöffnet werden kann und die Portkombination oder das Timeout nicht ausreicht, um eine Verbindung zur URL herzustellen, die in diesem Fall durch urlConnection.setConnectTimeout(1);.

Man kann Folgendes versuchen, um den Fehler Connection Timed Out in Java zu vermeiden.

  1. Einstellen der Inhaltslänge via setFixedLengthStreamingMode().
  2. Wiederholte Verbindungsversuche, falls die URL-Verbindung beim ersten Versuch fehlschlägt.
  3. Erhöhen des Verbindungslimits auf einen höheren Betrag durch die Funktion setConnectTimeout.
Shuvayan Ghosh Dastidar avatar Shuvayan Ghosh Dastidar avatar

Shuvayan is a professional software developer with an avid interest in all kinds of technology and programming languages. He loves all kinds of problem solving and writing about his experiences.

LinkedIn Website

Verwandter Artikel - Java Exception