Java.Net.SocketTimeoutException: Zeitüberschreitung bei Verbindung

Muhammad Zeeshan 12 Oktober 2023
  1. Sockets in Java
  2. Zeitüberschreitungen in Java
  3. Ursachen für java.net.SocketTimeoutException: Connection timed out in Java
  4. Lösung für java.net.SocketTimeoutException: Connection timed out in Java
Java.Net.SocketTimeoutException: Zeitüberschreitung bei Verbindung

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.

  1. Der Server funktioniert einwandfrei. Der Wert timeout wird jedoch auf eine kürzere Zeit eingestellt. Erhöhen Sie deshalb den Wert des timeout.
  2. Auf dem Remote-Host wird der angegebene Port von keinem Dienst überwacht.
  3. Es wird keine Route zum Remote-Host gesendet.
  4. Der Remote-Host scheint keine Verbindungen zuzulassen.
  5. Beim Erreichen des Remote-Hosts ist ein Problem aufgetreten.
  6. 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.

  1. Auf der Client-Seite konstruieren wir als erstes einen Null-socket. Danach verwenden wir die Methode connect() und konfigurieren dann den Parameter timeout, wobei das Timeout grösser als 0 Millisekunden sein sollte.

    Wenn das Timeout abläuft, bevor die Funktion zurückkehrt, wird SocketTimeoutException geworfen.

    Socket s = new Socket();
    SocketAddress sAdres = new InetSocketAddress(host, port);
    s.connect(sAdres, 50000);
    
  2. Wenn Sie serverseitig einen timeout-Wert setzen möchten, können Sie die Funktion setSoTimeout() verwenden. Der Wert des Parameters timeout bestimmt, wie lange die Funktion ServerSocket.accept() blockiert.

    ServerSocket servers = new new ServerSocket(port);
    servers.setSoTimeout(10000);
    

    Ebenso sollte das timeout mehr als 0 Millisekunden betragen. Wenn das timeout abläuft, bevor die Methode zurückkehrt, generiert die Methode eine SocketTimeoutException.

  3. Das Bestimmen eines Verbindungs-Timeouts und das anschließende Behandeln mit einem try-catch-Block ist eine weitere hervorragende Technik, um mit HttpException umzugehen.

    HttpUrlConnection conn = (HttpURLConnection) url.openConnection();
    conn.setConnectTimeout(8000);
    
Muhammad Zeeshan avatar Muhammad Zeeshan avatar

I have been working as a Flutter app developer for a year now. Firebase and SQLite have been crucial in the development of my android apps. I have experience with C#, Windows Form Based C#, C, Java, PHP on WampServer, and HTML/CSS on MYSQL, and I have authored articles on their theory and issue solving. I'm a senior in an undergraduate program for a bachelor's degree in Information Technology.

LinkedIn

Verwandter Artikel - Java Error