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);}}}
}
先运行服务器端程序,然后运行客户端程序(注意顺序,不然客户端运行就要报找不到服务器的错!)
这是错误截图
解决办法就是我上边写的客户端代码中注释掉的几个close方法给取消注释就ok了。
分析原因:
我认为这个与tcp的连接规则有关系,他必须是连接有头有尾,大概意思是,我客户端给服务器端建立连接后,如果客户端想连接终止,必须给服务器端说一声,不然服务器端联系不上客户端,以为是出了故障,就要报错,以上边的简单的例子来说,我客户端发了这个消息后,任务就完成了,可以断开连接了,所以这里必须调用close方法,关闭相关的资源,这个时候服务端也就知道你客户端要下线了,那连接不上你客户端就是正常的,那么就可以完美运行。
这里我简单归纳一哈其他的出现这个问题的可能原因:
1.可能是服务器加载太多,崩了,比如来的消息太多,没有做缓存相关东西。
2.当前网络不稳定
3.客户端出问题了,比如浏览器崩了,重启浏览器就好