Beheben Sie die Java.Net.SocketException: Connection Reset in Java
-
die
java.net.SocketException
in Java -
Ursachen der
java.net.SocketException: Connection reset
in Java -
Reproduzieren Sie den Fehler
java.net.SocketException: Connection reset
und identifizieren Sie seine Ursachen in Java -
Beheben Sie den Fehler
java.net.SocketException: Connection reset
in Java
Der heutige Artikel behandelt die Gründe und Lösungen für den Fehler java.net.SocketException: Connection reset
, der in Java auftreten kann. Schließlich werden wir sehen, wie wir den Java-Fehler java.net.SocketException: Connection reset
beseitigen können.
die java.net.SocketException
in Java
SocketException
ist die Unterklasse von IOException
. Sein Status als geprüfte Ausnahme ist garantiert.
Beim Versuch, einen Socket zu öffnen oder darauf zuzugreifen, weist die allgemeinste Ausnahme, die auftreten kann, auf ein Problem hin. Sie erhalten die folgende Fehlermeldung, wenn Sie sich die Seite des Servers ansehen:
java.net.SocketException : Connection reset
Ursachen der java.net.SocketException: Connection reset
in Java
java.net.SocketException: Connection reset
wird auf dem Server ausgelöst, wenn der Client die Verbindung zum Socket beendet, bevor die Antwort über den Socket zurückgesendet werden kann. Angenommen, Sie schließen den Browser, bevor die Antwort vom Server abgerufen wird.
Mit TCP-RST-Paketen teilt Ihnen die Gegenseite mit, dass die Verbindung, auf der das letzte TCP-Paket übertragen wurde, nicht bestätigt wurde. Ein Connection reset
zeigt an, dass ein TCP RST erfolgreich empfangen wurde.
Dies könnte daran liegen, dass die Verbindung nicht mehr aktiv ist. Immerhin ist der Hafen geschlossen oder aus anderen Gründen.
Eine einfache Definition eines Reset-Pakets enthält keinen Inhalt und hat das RST-Bit in den TCP-Header-Flags gesetzt. Im Folgenden sind einige der Gründe aufgeführt, warum der Fehler java.net.SocketException: Connection reset
auftreten kann:
- Der TCP-Socket wurde als Ergebnis des Empfangs eines
Schließen
-Befehls von einem entfernten System geschlossen. - Dies kann auch durch eine große Anzahl von Anfragen verursacht werden, die vom Server in die Warteschlange gestellt werden, was dazu führt, dass die Anfrage zeitlich begrenzt wird, bevor der Client sie anzeigen kann. Sie können auch den Zustand und die Protokolle des Servers überprüfen, um festzustellen, ob eine hohe Last verursacht wird.
- Das Schließen eines Sockets mit ungelesenen Daten im Socket-Empfangspuffer kann ebenfalls zu diesem Fehler führen.
- Die Verbindung wurde am anderen Ende absichtlich zurückgesetzt. Während dies für Anwendungssoftware selten und ungeeignet ist, ist kommerzielle Software nicht ungewöhnlich.
- Entweder ist das Anwendungsprotokoll falsch, oder Sie haben versucht, auf eine Verbindung zu schreiben, die beendet wurde, bevor Sie fertig waren.
Reproduzieren Sie den Fehler java.net.SocketException: Connection reset
und identifizieren Sie seine Ursachen in Java
Beispielcode (Server.java
-Datei):
package com.demobrokenpipe;
import java.io.*;
import java.net.*;
public class Server {
public static void main(String[] args) throws Exception {
ServerSocket socket = new ServerSocket(6666);
System.out.println("The Server Is Initialized");
Socket conn = socket.accept();
System.out.println("A Request Is Received");
BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
System.exit(1);
conn.close();
}
}
Beispielcode (Client.java
-Datei):
package com.demobrokenpipe;
import java.io.*;
import java.net.*;
public class Client {
public static void main(String argv[]) throws Exception {
Socket socket = new Socket("localhost", 6666);
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
out.write("Hi");
System.out.println("Incorrect String");
BufferedReader bufferReader =
new BufferedReader(new InputStreamReader(socket.getInputStream()));
System.out.println(bufferReader.read());
}
}
Hier haben wir zwei Klassen, Server.java
und Client.java
, die sich mit der Portnummer 6666
verbinden. Wir öffnen zwei Terminals und führen beide Dateien aus, um zwischen Client und Server zu kommunizieren, aber es gibt eine Nachricht und einen Fehler wie folgt aus.
Fehlerbeschreibung:
Incorrect String
Exception in thread "main" java.net.SocketException: Connection reset
Lassen Sie uns den Fehler verstehen, indem wir die Schritte Socket
, SocketException
und SocketException: Connectin reset
durchgehen, die zu den Ursachen dieses Fehlers führen.
Wir verwenden Sockets, um eine erfolgreiche Verbindung in zwei oder mehr Programmen herzustellen, um über dasselbe Netzwerk miteinander zu kommunizieren. In unserem Fall haben wir zwei Programme, Client.java
und Server.java
.
Durch die Verwendung von Sockets
erhalten wir eine Schnittstelle, um über den Netzwerkprotokollstapel zu kommunizieren und die Programme Nachrichten über dasselbe Netzwerk austauschen zu lassen.
Mit einfachen Worten können wir sagen, dass Sockets
die Endpunkte bei der Kommunikation über ein Netzwerk sind. Normalerweise ist der Socket-Server multithreaded, der von verschiedenen Clients gesendete Socket-Verbindungsanfragen akzeptieren kann.
Die SocketException
ist die Kindklasse von IOException
, also eine geprüfte Ausnahme. Es tritt auf, wenn wir versuchen, auf den Socket zuzugreifen oder ihn zu öffnen. Sehen Sie sich die vollständige Ausnahmehierarchie für SocketException
-Fehler an.
Vollständige Ausnahmehierarchie:
Immer wenn der Client die Socket-Verbindung schließt, führt dies serverseitig zu einer SocketException
, da die Antwort noch nicht über diesen Socket zurückgesendet wurde. Ja, du hast es richtig verstanden.
Wir erhalten den Fehler java.net.SocketException: Connection reset
auf der Serverseite, wenn der Client die Socket-Verbindung schließt, bevor er die Antwort vollständig erhalten hat.
Connection reset
bedeutet hier, dass der entfernte Endpunkt Ihnen mitteilt, dass die Verbindung, auf der das letzte TCP-Paket gesendet wurde, nicht erkannt wird. Dies kann verschiedene Gründe haben.
Lassen Sie uns sie unten finden:
-
Der Benutzer schließt den Webbrowser, bevor er die Antwort vollständig erhält.
-
Am häufigsten wurde die Verbindung, die wir zu schreiben versuchen, normal geschlossen. Wir können auch sagen, dass ein Anwendungsprotokollfehler vorliegt.
-
Eine andere Möglichkeit ist, dass der benötigte Port nicht mehr offen ist. Wir sehen diesen Fehler auch, wenn ein Client den Socket schließt, während sich noch ungelesene Daten in einem Socket-Empfangspuffer befinden.
-
Wenn Sie ein Windows-Benutzer sind, finden Sie es möglicherweise als
Software verursacht einen Verbindungsabbruch
. Die Neulinge verwechseln es mitVerbindungsreset
.Denken Sie daran, beides ist nicht dasselbe. Die
Software hat einen Verbindungsabbruch verursacht
tritt auf, wenn wir beim Senden von unserer Seite aus einige Netzwerkprobleme haben. -
Eine andere Situation ist die Verwendung einer Methode von Java
Socket
namenssetSoTimeout()
, die die OptionSO_TIMEOUT
aktiviert/deaktiviert, indem sie einen Timeout-Wert übergibt, der größer als0
sein muss. Das Übergeben von0
ist auch ein Grund, der zum FehlerSocketException: Connection Reset
führt.
Jetzt kommt es darauf an, dass wir auch die Verbindung in der Datei Client.java
schliessen? Lassen Sie uns das unten finden.
Beheben Sie den Fehler java.net.SocketException: Connection reset
in Java
Wenn dieser Fehler als Client beim Herstellen einer Verbindung mit dem Server auftritt, können wir dies beheben, indem Sie einen der folgenden Schritte ausführen:
- Stellen Sie sicher, dass der Server über Telnet auf einem Host-Port läuft. Auf diesem Port läuft der Server.
- Bestätigen Sie, ob ein Server neu gestartet wird.
- Prüfen Sie, ob derselbe Server auf einen anderen Host umschaltet.
Darüber hinaus können wir uns der Lösung nähern, wenn wir die im vorherigen Abschnitt beschriebenen Gründe überwinden. In unserem Fall hat das Entfernen von System.exit(1)
den Fehler behoben, weil es das System beendet und das Programm geschlossen hat.
Beispielcode (Server.java
-Datei):
import java.io.*;
import java.net.*;
public class Server {
public static void main(String[] args) throws Exception {
ServerSocket socket = new ServerSocket(6666);
System.out.println("The Server Is Initialized");
Socket conn = socket.accept();
System.out.println("A Request Is Received");
BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
System.out.println(reader.readLine());
conn.close();
}
}
Beispielcode (Client.java
-Datei):
import java.io.*;
import java.net.*;
public class Client {
public static void main(String argv[]) throws Exception {
Socket socket = new Socket("localhost", 6666);
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
out.write("Hi");
System.out.println("Incorrect String");
BufferedReader bufferReader =
new BufferedReader(new InputStreamReader(socket.getInputStream()));
System.out.println(bufferReader.read());
}
}
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.
LinkedInVerwandter Artikel - Java Error
- Adresse wird bereits verwendet JVM_Bind-Fehler in Java
- Android Java.Lang.IllegalStateException behoben: Methode der Aktivität konnte nicht ausgeführt werden
- Ausnahme im Hauptthread Java.Lang.ClassNotFoundException in IntelliJ IDEA
- Ausnahme im Hauptthread Java.Lang.NoClassDefFoundError
- Beheben Sie das Problem, dass Java nicht installiert werden kann. Es gibt Fehler in den folgenden Schaltern
- Beheben Sie den Fehler `Es wurde keine Java Virtual Machine gefunden` in Eclipse