目录

Exception-in-thread-main-java.net.SocketException-Connection-reset

目录

Exception in thread “main“ java.net.SocketException: Connection reset

Exception in thread “main” java.net.SocketException: Connection reset

在做网络相关的东西时可能会遇到类似于这种连接错误的信息,我这里遇到了一个,以下是错误代码 问题重现,以及修复和分析

//简单的客户端
public class Center {
    public static void main(String[] args) throws IOException, InterruptedException {
    Socket socket=new Socket("127.0.0.1",8080);
    OutputStream outputStream=socket.getOutputStream();
    OutputStreamWriter outputStreamWriter=new OutputStreamWriter(outputStream,"UTF-8");
    BufferedWriter bufferedWriter=new BufferedWriter(outputStreamWriter);
    bufferedWriter.write("ffffffffff");
    bufferedWriter.flush();
//    Thread.sleep(1000);
//    bufferedWriter.close();
//    outputStreamWriter.close();
//    outputStream.close();
    }
}

//简单的服务器端
public class Server {

    public static void main(String[] args) throws IOException {
        ServerSocket serverSocket=new ServerSocket(8080);
        while(true){
            Socket socket=serverSocket.accept();
            System.out.println(";;;;;;;");
            InputStream inputStream=socket.getInputStream();
            System.out.println(inputStream==null);
            InputStreamReader inputStreamReader=new InputStreamReader(inputStream,"UTF-8");
            BufferedReader bufferedReader=new BufferedReader(inputStreamReader);
            String  content=null;
            while((content= bufferedReader.readLine())!=null){
                System.out.println(content);
            }
        }
    }

}

先运行服务器端程序,然后运行客户端程序(注意顺序,不然客户端运行就要报找不到服务器的错!)

这是错误截图

https://i-blog.csdnimg.cn/blog_migrate/e432ba79047f6eaaf4e9c034d1c63b4c.png

解决办法就是我上边写的客户端代码中注释掉的几个 close 方法给取消注释就 ok 了。

分析原因:

我认为这个与 tcp 的连接规则有关系,他必须是连接有头有尾,大概意思是,我客户端给服务器端建立连接后,如果客户端想连接终止,必须给服务器端说一声,不然服务器端联系不上客户端,以为是出了故障,就要报错,以上边的简单的例子来说,我客户端发了这个消息后,任务就完成了,可以断开连接了,所以这里必须调用 close 方法,关闭相关的资源,这个时候服务端也就知道你客户端要下线了,那连接不上你客户端就是正常的,那么就可以完美运行。

这里我简单归纳一哈其他的出现这个问题的可能原因:

1.可能是服务器加载太多,崩了,比如来的消息太多,没有做缓存相关东西。

2.当前网络不稳定

3.客户端出问题了,比如浏览器崩了,重启浏览器就好