在模拟客户端和服务器之间通信时出现java.net.SocketException:Software caused connection abort: socket write error

java.net.SocketException: Software caused connection abort: socket write errorat java.base/java.net.SocketOutputStream.socketWrite0(Native Method)at java.base/java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:110)at java.base/java.net.SocketOutputStream.write(SocketOutputStream.java:150)at java.base/java.io.ObjectOutputStream$BlockDataOutputStream.drain(ObjectOutputStream.java:1883)at java.base/java.io.ObjectOutputStream$BlockDataOutputStream.setBlockDataMode(ObjectOutputStream.java:1792)at java.base/java.io.ObjectOutputStream.writeNonProxyDesc(ObjectOutputStream.java:1287)at java.base/java.io.ObjectOutputStream.writeClassDesc(ObjectOutputStream.java:1232)at java.base/java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1428)at java.base/java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1179)at java.base/java.io.ObjectOutputStream.writeFatalException(ObjectOutputStream.java:1583)at java.base/java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:352)at task010305.net.Server.handlerRequest(Server.java:67)at task010305.net.Server.lambda$start$0(Server.java:35)at java.base/java.lang.Thread.run(Thread.java:834)

我出现的情形是当服务器对资源进行释放时客户端还处于连接中,当客户端再次请求时就会出现Software caused connection abort: socket write errorSocket closed的异常,当客户端进行释放资源时服务器也会出现同样的错误

客户端(client):

public void start(){OutputStream os;ObjectOutputStream oos = null;InputStream is;ObjectInputStream ois = null;try {do {client=new Socket("127.0.0.1",PROT);os=client.getOutputStream();oos=new ObjectOutputStream(os);is=client.getInputStream();ois=new ObjectInputStream(is);System.out.println("客户端连接服务器成功");} while (view.startMenu(ois,oos)!=0);} catch (IOException e) {e.printStackTrace();} finally {try {if (ois != null)ois.close();if (oos != null)oos.close();if (client != null)client.close();} catch (IOException e) {e.printStackTrace();}}}

服务器(Server):

public void start(){try {serverSocket=new ServerSocket(PROT);System.out.println("服务器已就绪!目前端口为:"+PROT);while (true){//等待客户端连接Socket socket=serverSocket.accept();System.out.println(socket.hashCode()+"客户端为您服务!");//每个客户端进行开辟单独的线程服务new Thread(() -> {//处理客户端请求handlerRequest(socket);}).start();}} catch (IOException e) {e.printStackTrace();}}private void handlerRequest(Socket socket){InputStream is;ObjectInputStream ois = null;OutputStream os;ObjectOutputStream oos = null;try {is=socket.getInputStream();ois=new ObjectInputStream(is);os=socket.getOutputStream();oos=new ObjectOutputStream(os);//客户端发的请求类型String flag= ois.readUTF();System.out.println("客户端请求类型:"+flag+",当前使用线程为:"+Thread.currentThread().getName());do {if ("findAll".equals(flag)) {Express allExpress = ed.findAllExpress();if (allExpress!=null)oos.writeObject(allExpress);elseoos.writeObject("快递柜中暂无快递!");}} while (true);} catch (IOException e) {e.printStackTrace();//System.out.println(e.getMessage());} finally {try {if (ois != null)ois.close();if (oos != null)oos.close();} catch (IOException e) {e.printStackTrace();}}}

造成问题是因为在循环中一边先结束了关闭了资源
解决方法:

  1. 因为服务器需要一直运行,所以对客户端进行判断,如果连接为空或者连接被关闭进行重新连接
  2. 或者在服务器中对请求方法进行死循环让本次请求在线程未结束前不关闭释放资源

java学习网络编程遇到异常java.net.SocketException:Software caused connection abort: socket write error相关推荐

  1. java.net.SocketException: Software caused connection abort: socket write error

    我使用的框架是Struts2+Hibernate3+Spring,项目的后台数据库是Mysql,最近挪到正式服务器上了,处于一直打开服务的状态,就出现了java.net.SocketException ...

  2. 异常:Software caused connection abort: socket write error

    异常:Software caused connection abort: socket write error 参考文章: (1)异常:Software caused connection abort ...

  3. java.net.SocketException: Software caused connection abort: socket write erro

    场景:接口测试 编辑器:eclipse 版本:Version: 2018-09 (4.9.0) testng版本:TestNG version 6.14.0 执行testng.xml时报错信息: 出现 ...

  4. 解决:java.net.SocketException: Software caused connection abort: recv failed

    前言:最近在学习 NIO 和netty 相关知识时,在bio的模式下,遇到了 java.net.SocketException: Software caused connection abort: r ...

  5. java学习-网络编程

    一.前期配置:安装tomcat服务器 现代的应用程序都离不开网络,网络编程是非常重要的技术.Java SE提供java.net包,其中包含了网络 编程所需要的最基础一些类和接口.这些类和接口面向两个不 ...

  6. JAVA的网络编程【转】

    转自 http://www.cnblogs.com/springcsc/archive/2009/12/03/1616413.html 网络编程 网络编程对于很多的初学者来说,都是很向往的一种编程技能 ...

  7. linux java socket编程_深入学习socket网络编程,以java语言为例

    了解java的socket编程与Linux Socket API之间的关系 一.java的网络编程 1.socket原理 socket通信就是通过IP和端口号将两台主机建立连接,提供通信.主机A的应用 ...

  8. java网络编程技术学习笔记(b站【狂神说Java】网络编程实战讲解)

    b站视频链接:[狂神说Java]网络编程实战讲解 文章目录 网络编程 1.1.概述 1.2.网络通信的要素 1.3.IP 1.4.端口 1.5.通信协议 1.6.TCP 文件发送 1.7.UDP 1. ...

  9. java中no1_【Java】-- 网络编程のNo.1

    在现有的网络中,网络通讯的方式主要有两种: TCP(传输控制协议)方式 UDP(用户数据报协议)方式 在网络通讯中,TCP方式就类似于拨打电话,使用该种方式进行网络通讯时,需要建立专门的虚拟连接,然后 ...

  10. 【Java】网络编程——TCP/UDP网络对讲机

    目录 前言 OSI概述 传输层 端口 Socket InetAddress类 UDP协议间的通信 UDP协议相关类 UDP 发送端 UDP 接收端 + 发送端 UDP 聊天 + 全局广播 UDP发送大 ...

最新文章

  1. Spring配置Bean的方式
  2. ES6新特性之了解ES6以及其发展历史
  3. 编写高质量的代码,改善c#程序的157个建议_之1~10
  4. centos设置ip
  5. 2014 网选 广州赛区 hdu 5023 A Corrupt Mayor's Performance Art
  6. 发现保存GIF格式后相素发生变化咋办
  7. 高并发架构系列:Spring Cloud的核心成员、以及架构实现详细介绍
  8. 计算机研究生可以参加哪些比赛?
  9. linux常见权限相关错误及解决
  10. python跳出if_python跳出if
  11. 钣金编程软件Radan无人值守,自动排版功能
  12. DisplayTag用法
  13. 双三次插值(BiCubic插值)
  14. 华硕笔记本很久没用开机后无法进入系统自动跳转bios界面的解决方法
  15. 鹏哥C语言笔记分享P4
  16. 飞书和钉钉之间,差了几个企业微信?
  17. 求助,我电脑是不是中毒了。
  18. 创客学院线上培训课程泄露,大家抓紧白嫖!
  19. 【设计模式笔记】单例模式Singleton Pattern
  20. deepin安装瑞昱Realtek无线网卡8188GU驱动

热门文章

  1. 深入探访支付宝双11十年路,技术凿穿焦虑与想象极限 | CYZONE特写...
  2. word文本框顶端对齐
  3. QoS 基础: 什么是QoS, 我真的需要吗?
  4. 大厂技术博客学习(2)​——5G时代下淘宝直播高清低延时技术jie秘
  5. 《了不起的盖茨比》极简版:进化神驱动的二舅和二伯
  6. linux查看本机IP掩码,linux下 取得本机ip、掩码、网关
  7. QFT的问世 高斯定理
  8. 如何实现网页中按钮的自动点击?
  9. 通过ThreadLoad实现线程范围内的共享变量
  10. 把编程当小葵花妈妈课堂