修复 Java.Net.SocketException: Connection Reset 错误
今天的文章将讨论Java中可能出现的 java.net.SocketException: Connection Reset
错误的原因和解决方案。 最后,我们将看到如何消除 Java 的 java.net.SocketException:Connection Reset
错误。
Java 中的 java.net.SocketException
SocketException 是 IOException 的子类。 它作为已检查异常的状态是有保证的。
当尝试打开或访问套接字时,可能发生的最常见的异常表明存在问题。 如果你查看服务器端,你会得到以下错误:
java.net.SocketException: Connection reset
Java中java.net.SocketException: Connection Reset的原因
当客户端在通过套接字发回响应之前终止与套接字的连接时,服务器上会引发 java.net.SocketException: Connection reset
。 假设您可以在从服务器获取响应之前关闭浏览器。
TCP RST 数据包是远程端通知您传输最后一个 TCP 数据包的连接未得到确认的方式。 连接重置表明 TCP RST 已成功接收。
这可能是因为连接不再处于活动状态。 毕竟端口关闭或者其他原因。
重置数据包的简单定义不包含任何内容,并且在 TCP 标头标志中设置了 RST 位。 以下是可能发生 java.net.SocketException: Connection reset
错误的一些原因:
- 由于从远程系统接收到关闭命令,TCP 套接字已关闭。
- 这也可能是由于服务器排队的大量请求导致请求在客户端查看之前超时。 您还可以检查服务器的健康状况和日志,看看是否造成了重负载。
- 关闭套接字接收缓冲区中包含未读数据的套接字也可能导致此错误。
- 另一端的连接已被有意重置。 虽然这种情况很少见并且不适合应用软件,但商业软件并不罕见。
- 应用程序协议不正确,或者您尝试写入在完成之前已终止的连接。
在 Java 中重现 java.net.SocketException:Connection reset 错误并确定其原因
示例代码(Server.java 文件):
package com.demobrokenpipe;
import java.net.*;
import java.io.*;
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();
}
}
示例代码(Client.java 文件):
package com.demobrokenpipe;
import java.net.*;
import java.io.*;
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());
}
}
在这里,我们有两个类,Server.java 和 Client.java,连接到端口号 6666。我们打开两个终端并运行这两个文件以在客户端和服务器之间进行通信,但它会打印一条消息和一个错误,如下所示。
错误描述:
Incorrect String
Exception in thread "main" java.net.SocketException: Connection reset
让我们通过 Socket、SocketException 和 SocketException: Connectin Reset 来了解导致此错误的原因。
我们使用套接字在两个或多个程序中建立成功的连接,以便使用同一网络相互通信。 在我们的例子中,我们有两个程序:Client.java 和 Server.java。
通过使用Sockets,我们获得了一个通过网络协议栈进行通信的接口,并让程序在同一网络上共享消息。
简而言之,我们可以说套接字是网络通信的端点。 通常,socket服务器是多线程的,可以接受不同客户端发送的socket连接请求。
SocketException 是 IOException 的子类,因此它是一个受检查的异常。 当我们尝试访问或打开套接字时会发生这种情况。 查看 SocketException 错误的完整异常层次结构。
完整的异常层次结构:
每当客户端关闭套接字连接时,都会导致服务器端出现 SocketException,因为尚未通过该套接字返回响应。 是的,你说得对。
当客户端在完全接收到响应之前关闭套接字连接时,我们会在服务器端收到 java.net.SocketException: Connection Reset 错误。
这里,连接重置意味着远程端点通知您发送最后一个 TCP 数据包的连接无法识别。 造成这种情况的原因可能有多种。
让我们在下面找到它们:
- 用户在完全获得响应之前关闭了 Web 浏览器。
- 最常见的是,我们尝试写入的连接已正常关闭。 我们也可以说存在应用程序协议错误。
- 另一种可能性是所需的端口不再打开。 当客户端关闭套接字而未读数据仍在套接字接收缓冲区中时,我们也会看到此错误。
-
如果您是Windows用户,您可能会发现这是由于软件导致连接中止。 新手会将其与连接重置混淆。
请记住,两者并不相同。 当我们在从端发送时遇到一些网络问题时,该软件会导致连接中止。
-
另一种情况是使用 Java Socket 的
setSoTimeout()
方法,该方法通过传递一个必须大于 0 的超时值来启用/禁用 SO_TIMEOUT 选项。传递 0 也是导致SocketException: Connection Reset
错误的一个原因。
现在,问题是我们是否也要关闭 Client.java 文件中的连接? 让我们在下面找到它。
修复 Java 中的 java.net.SocketException:Connection reset 错误
如果我们作为客户端在与服务器连接时遇到此错误,我们可以通过执行以下任一操作来修复此错误:
- 确保服务器通过主机端口上的 telnet 运行。 该端口是服务器运行的位置。
- 确认服务器是否重新启动。
- 评估同一服务器是否故障转移到不同的主机。
此外,如果我们克服了上一节中描述的原因,我们就可以找到解决方案。 在我们的例子中,删除 System.exit(1)
修复了错误,因为它正在退出系统并关闭程序。
示例代码(Server.java 文件):
import java.net.*;
import java.io.*;
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();
}
}
示例代码(Client.java 文件):
import java.net.*;
import java.io.*;
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());
}
}
相关文章
修复 Java 错误 Java.Net.SocketException: Permission Denied
发布时间:2023/07/11 浏览次数:124 分类:Java
-
本篇文章介绍了 Java 中的 java.net.SocketException:Permission denied 错误。Java中出现 java.net.SocketException: Permission returned 错误的原因 SocketException 通常在网络连接出现问题时发生。
Minecraft 上 An Existing Connection Was Forcibly Closed by the Remote Host 错误
发布时间:2023/07/10 浏览次数:103 分类:Java
-
本篇文章介绍了使用 Minecraft 时出现远程主机错误强制关闭现有连接的原因和解决方案。Minecraft 上 Java.IO.IOException: An Existing Connection Was Forcibly Closed by the Remote Host 原因
Python 中 ConnectionRefusedError: [Errno 111] Connection Refused 错误
发布时间:2023/05/17 浏览次数:180 分类:Python
-
不应该有任何路由器或防火墙可能会停止通信,因为根据您的网络地址,服务器和客户端都应该在同一个局域网上。为什么 ConnectionRefusedError: [Errno 111] Connection refused 在 Python 中发生
Python 中 ConnectionRefusedError: [Errno 61] Connection Refused 错误
发布时间:2023/05/16 浏览次数:226 分类:Python
-
有时在设计客户端-服务器程序时,您可能会遇到错误 ConnectionRefusedError。Python中 ConnectionRefusedError 错误是如何产生的 正如我们已经讨论过的,这个错误主要发生在客户端程序无法连接到服务器
Java 中的异常 Javax.Net.SSL.SSLHandShakeException: Remote Host Closed Connect
发布时间:2023/05/16 浏览次数:204 分类:Java
-
在本文中,我们将了解 javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake 以及解决此异常的一些可能方法。
Python 中 Handling Socket.Error: [Errno 104] Connection Reset by Peer 错误
发布时间:2023/05/15 浏览次数:220 分类:Python
-
在我们创建连接到服务器以下载信息(如外汇或比特币汇率)的应用程序后,我们往往会遇到各种连接问题; 其中一个问题是 [Errno 104] Connection reset by peer 错误。
Python 中错误 ConnectionError: Max retries exceeded with url
发布时间:2023/02/14 浏览次数:406 分类:Python
-
出现错误 ConnectionError: Max retries exceeded with url 有多种原因: 向 request.get() 方法传递了不正确或不完整的 URL。 我们正受到 API 的速率限制。 requests 无法验证您向其发出请求的网站的 SS
如何修复 “Safari Can’t Establish a Secure Connection to the Server” 错误
发布时间:2021/12/08 浏览次数:2605 分类:网络
-
当我们浏览网页时,最不想看到的就是错误消息。 对于 macOS 用户,可能会遇到的问题之一是:“Safari Can’t Establish a Secure Connection to the Server”错误(Safari 无法与服务器建立安全连接)
如何修复“This Site Can’t Provide a Secure Connection”错误
发布时间:2021/09/09 浏览次数:2976 分类:网络
-
看到“This Site Can’t Provide a Secure Connection“的通知可能会令人困惑和震惊。上面的错误消息翻译一下就是“此站点无法提供安全连接”。本质上,它是到使用 HTTPS