HOWTO · Java
Java.Net.SocketTimeoutException: Zeitüberschreitung bei Verbindung
Im heutigen Artikel besprechen wir java.net.SocketTimeoutException: Connection timed out.
Auf dieser Seite
Im heutigen Artikel befassen wir uns mit java.net.SocketTimeoutException: Connection timed out. Aber zuerst werfen wir einen genaueren Blick auf die Konzepte von Sockets und Timeouts.
Sockets in Java
Eine logische Verbindung zwischen zwei Computeranwendungen kann mehrere Endpunkte haben, von denen einer ein Socket ist.
Anders ausgedrückt handelt es sich um eine logische Schnittstelle, die Anwendungen zum Senden und Empfangen von Daten über ein Netzwerk verwenden. Eine IP-Adresse und eine Portnummer umfassen einen Socket in seiner einfachsten Form.
Jedem Socket wird eine eindeutige Portnummer zugewiesen, die zur Identifizierung des Dienstes verwendet wird. Verbindungsbasierte Dienste verwenden Stream-Sockets, die auf TCP basieren.
Aus diesem Grund bietet Java die Klasse java.net.Socket als clientseitige Programmieroption an.
Andererseits wird die Klasse java.net.ServerSocket in der serverseitigen TCP/IP-Programmierung verwendet. Der auf UDP basierende Datagramm-Socket ist eine andere Art von Socket und wird für verbindungslose Dienste verwendet.
Java unterstützt java.net.DatagramSocket für UDP-Operationen.
Zeitüberschreitungen in Java
Eine Instanz eines socket-Objekts wird erstellt, wenn der socket-Konstruktor aufgerufen wird, was eine Verbindung zwischen dem Client und dem Server von der Client-Seite ermöglicht.
Als Eingabe erwartet der Konstruktor die Adresse des entfernten Hosts und die Portnummer. Danach versucht es, die bereitgestellten Parameter zu verwenden, um eine Verbindung zum Remote-Host herzustellen.
Der Vorgang verhindert, dass andere Prozesse fortgesetzt werden, bis eine erfolgreiche Verbindung hergestellt wurde. Die Anwendung gibt jedoch den folgenden Fehler aus, wenn die Verbindung nach einer bestimmten Zeit nicht erfolgreich ist.
java.net.SocketTimeoutException : Connection timed out
Serverseitig ist die Klasse ServerSocket permanent aktiv, um eingehende Verbindungsanfragen abzuhören. Wenn eine Verbindungsanfrage von ServerSocket empfangen wird, wird die Funktion accept aufgerufen, um ein neues socket-Objekt zu erstellen.
Ähnlich wie bei der vorherigen Methode blockiert diese, bis der Remote-Client verbunden ist.
Ursachen für java.net.SocketTimeoutException: Connection timed out in Java
Im Folgenden sind einige mögliche Gründe für den Fehler aufgeführt.
- Der Server funktioniert einwandfrei. Der Wert
timeoutwird jedoch auf eine kürzere Zeit eingestellt. Erhöhen Sie deshalb den Wert destimeout. - Auf dem Remote-Host wird der angegebene Port von keinem Dienst überwacht.
- Es wird keine Route zum Remote-Host gesendet.
- Der Remote-Host scheint keine Verbindungen zuzulassen.
- Beim Erreichen des Remote-Hosts ist ein Problem aufgetreten.
- Internetverbindung, die entweder langsam oder nicht verfügbar ist.
Lösung für java.net.SocketTimeoutException: Connection timed out in Java
Wir können die Option timeout für Client- und Serveraktivitäten voreinstellen. Das Hinzufügen der Konstrukte try und catch wäre eine geeignete Lösung.
-
Auf der Client-Seite konstruieren wir als erstes einen Null-
socket. Danach verwenden wir die Methodeconnect()und konfigurieren dann den Parametertimeout, wobei das Timeout grösser als 0 Millisekunden sein sollte.Wenn das Timeout abläuft, bevor die Funktion zurückkehrt, wird
SocketTimeoutExceptiongeworfen.Socket s = new Socket(); SocketAddress sAdres = new InetSocketAddress(host, port); s.connect(sAdres, 50000); -
Wenn Sie serverseitig einen
timeout-Wert setzen möchten, können Sie die FunktionsetSoTimeout()verwenden. Der Wert des Parameterstimeoutbestimmt, wie lange die FunktionServerSocket.accept()blockiert.ServerSocket servers = new new ServerSocket(port); servers.setSoTimeout(10000);Ebenso sollte das
timeoutmehr als 0 Millisekunden betragen. Wenn dastimeoutabläuft, bevor die Methode zurückkehrt, generiert die Methode eineSocketTimeoutException. -
Das Bestimmen eines Verbindungs-Timeouts und das anschließende Behandeln mit einem
try-catch-Block ist eine weitere hervorragende Technik, um mitHttpExceptionumzugehen.HttpUrlConnection conn = (HttpURLConnection) url.openConnection(); conn.setConnectTimeout(8000);