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:
- Die IP/Domain der URL ist falsch.
- Der der IP/Domäne entsprechende Server ist ausgefallen.
- Möglicherweise hat eine Firewall die Anfragen blockiert oder das Internet befindet sich hinter einem Proxy.
- 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.
- Einstellen der Inhaltslänge via
setFixedLengthStreamingMode()
. - Wiederholte Verbindungsversuche, falls die URL-Verbindung beim ersten Versuch fehlschlägt.
- Erhöhen des Verbindungslimits auf einen höheren Betrag durch die Funktion
setConnectTimeout
.
Verwandter Artikel - Java Exception
- Ausnahme bei ungültiger Eingabe in Java
- Ausnahme im Hauptthread Java.Util.NoSuchElementException: Keine Zeile gefunden
- Ausnahme im Thread AWT-EventQueue-0 java.lang.NullPointerException
- Beheben Sie die Java.Net.BindException: Adresse wird bereits verwendet: Bind
- Der Java-Gateway-Prozess wurde beendet, bevor seine Portnummer gesendet wurde
- Java Throwable vs. Ausnahmeklasse