Java-Socket错误解决
作者:聂勇 欢迎转载,请保留作者信息并说明文章来源!
- 客户端 Redhat Enterprise Linux 9
- 服务端 Redhat Enterprise Linux 9
- JDK Javase5Update4
场景
- 客户端每个连接池有一个keep-live的时间来控制该连接池中每一个连接的空闲生存期。
- 服务端也有一个SocketTimeOut时间来控制每一个连接的空闲生存期。
Socket Exception
1)java.net.SocketException: Software caused connection abort: socket write error
原因:服务端将空闲超时的连接关闭了,但客户端连接池还认为连接有用,就用该连接来发送数据,所以会报错。
- WSAECONNABORTED (10053) Software caused connection abort
A connection abort was caused internal to your host machine. The software caused a connection abort because there is no space on the socket’s queue and the socket cannot receive further connections.
WinSock description: The error can occur when the local network system aborts a connection. This would occur if WinSock aborts an established connection after data retransmission fails (receiver never acknowledges data sent on a datastream socket).
TCP/IP scenario: A connection will timeout if the local system doesn’t receive an (ACK)nowledgement for data sent. It would also timeout if a (FIN)ish TCP packet is not ACK’d (and even if the FIN is ACK’d, it will eventually timeout if a FIN is not returned).
It seems to happen more with WindowsXP and it seems also to be possibly related to Windows firewall settings. In any case the salient point is that the abort has originated inside the local machine.
It’s a stupidly worded message.
- an intermittent router or firewall decided to drop the connection, or that some tcp/ip related malfunction occurred.
2)java.net.SocketException: Software caused connection abort: recv failed
原因:服务端将连接关闭了(可能发生了异常),但客户端还在接收数据。
3)java.net.SocketException: Broken pipe
原因:由于是长连接,所以连接会持续利用,只要连接的空闲时间没有超过keep-live的时间就认为是有效的。但服务端在客户端write date之前将连接关闭了,是因为客户端keep-live的时间和服务端SocketTimeOut的时间不一致。
出错模拟:
- 客户端write date
- 客户端wirte date
- 服务端 close socket
- 客户端write date // 客户端这时报错了
4)java.net.SocketException: Connection reset
原因:由于是长连接,所以连接会持续利用,只要连接的空闲时间没有超过keep-live的时间就认为是有效的。但服务端在客户端write date的时候将连接关闭了,是因为客户端keep-live的时间和服务端SocketTimeOut的时间不一致。
出错模拟:
- 客户端write date
- 客户端write date // 在write date的过程中,服务端关闭连接,客户端报错
原文地址:https://www.cnblogs.com/chinatrump/p/11584460.html
- 5G光传送网技术
- 突破封闭 Web 系统的技巧之正面冲锋
- 建立本地的Blast数据库
- [biztalk笔记]-1.Hello World!
- 人工智能对政府意味着什么
- 利用Linq对集合元素合并、去重复处理
- 上高速就开启自动驾驶,但出车祸了!自动驾驶真不敢用哦!
- Gof设计模式之建造者模式(二)
- 数字化随笔-演进AI
- 有料 | 无人驾驶登机桥首次在深圳试行
- java学习:eclipse + Weblogic 12c + svn 集成开发环境搭建
- Docker容器学习梳理--容器登陆方法梳理(attach、exec、nsenter)
- java学习:调用 java web service
- java学习:数据增删改查、存储过程调用及事务处理
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- Spring Boot 特性之 Fluent Builder API
- 一文搞懂 Flink Timer
- DATE类型的“小陷阱”
- 简单聊下 Java Agent
- Byte Buddy 基础知识
- 两种在SAP Cloud Application Studio里通过编程对C4C UI字段赋值的方法
- 如何使用 BTrace v.2.0.1
- 三分钟写一个 Java 多线程
- 使用纯粹的ABAP位操作实现两个整数相加
- 如何给SAP Cloud for Customer UI上的字段添加自定义校验逻辑
- guide-rpc-framework 源码学习
- 如何参与一个开源项目(多图)
- 微信小程序支付服务端.net core实现,简单直接
- PBE加密 .net 实现
- .net Core 图片验证码 基于SkiaSharp实现