Software caused connection abort: recv failed

Software caused connection abort: recv failed

数据库连接时有时会报此错误。客户端建立短连接后,服务端关闭了连接,但是客户端没有关闭,仍然尝试发送请求,就会发生错误。

描述如下:

客户端和服务端建立tcp的短连接,每次客户端发送一次请求, 服务端响应后关闭与客户端的连接. 如果客户端在服务端关闭连接后,没有释放连接,继续试图发送请求和接收响应. 这个时候就会出错. 
这个时候客户端Socket的getOutputStream返回来的OutPutStream维护 的是本地的连接状态, 无法知道远程的服务端已经关闭了对应的InputStream和socket因此 虽然调用了 out.write(sendbuf, 0, sendbuf.length); 方法,但是实际上服务端并没有接收到客户端的请求信息. 因为没有抛出异常,因此造成了误以为客户端请求发送成功的假象. 
接下来调用etInputStream的in.read(header, 0, 14);方法. 因为这次要读取服务端的信息,因此产生了 Software caused connection abort: recv failed的异常 
总结产生原因,在服务端/客户端单方面关闭连接的情况下,另一方依然以为 tcp连接仍然建立,试图读取对方的响应数据,导致出现 Software caused connection abort: recv failed的异常. 
因此在receive数据之前,要先判断连接状态. 通过inputstream的available()方法来判断,是否有响应结果. 如果available()的返回值为0,说明没有响应数据,可能是对方已经断开连接, 如果available()的返回值大于0,说明有响应数据. 另外值得注意的是available()返回的值是非堵塞的,可以被多个线程访问 
在对方释放连接后,也要释放本地的连接.

还有一种可能是传输数据协议不一致,也可能会报这个错误。

时间: 2024-10-04 11:31:23

Software caused connection abort: recv failed的相关文章

Software caused connection abort: recv failed错误

java.net.SocketException: Software caused connection abort: recv failed    at java.net.SocketInputStream.socketRead0(Native Method)    at java.net.SocketInputStream.read(Unknown Source)    at java.net.SocketInputStream.read(Unknown Source)    at org.

java.net.SocketException:Software caused connection abort: recv failed 异常分析 +socket客户端&服务端代码

java.net.SocketException:Software caused connection abort: recv failed 异常分析 分类: 很多的技术 2012-01-04 12:54 8004人阅读 评论(6) 收藏 举报 socket服务器bufferstring网络java 第 1个异常是java.net.BindException:Address already in use: JVM_Bind.该异常发生在服务器端进行new ServerSocket(port)(p

FTP上传文件,报错java.net.SocketException: Software caused connection abort: recv failed

FTP上传功能,使用之前写的代码,一直上传都没有问题,今天突然报这个错误: java.net.SocketException: Software caused connection abort: recv failed at java.net.SocketInputStream.socketRead0(Native Method) at java.net.SocketInputStream.read(SocketInputStream.java:152) at java.net.SocketIn

开发:异常收集之 Software caused connection abort: recv failed

近期用ibatis比较多,中间也遇到很多奇葩小问题,但是也纠结我特别久.遂记录下来: 其中一个:java.sql.SQLException: Io 异常: Software caused connection abort: recv failed 这个问题弄了很久,因为大部分数据查询都没有问题,当查到某个特定数据的时候就出现了这个,大概意思就是查询时,连接已关闭 然后就去数据库看数据,发现数据表和实体有区别,数据表多了一个列Line,这个列大部分数据是空的.所以大部分查询没问题, 当查到某个Li

错误:Caused by: java.net.SocketException: Software caused connection abort: recv failed

使用Spring JDBC时遇到的Software caused connection abort: recv failed问题 org.springframework.dao.DataAccessResourceFailureException: PreparedStatementCallback; SQL [select t.f_role_id from db_sys_user_role t where t.f_user_id=?]; Communications link failure

关于javaSocket中 Software caused connection abort: recv failed问题

在学习Socket中今天突然遇到了以下这种问题 原来是网路连接出了问题,由于我測试的是远程连接所以是在学校的局域网下,结果非常不稳定,開始还以为怎么了一会连上了一会又出现故障然后把IP地址改为本机的127.0.0.1之后就没有 出现过了.

org.apache.commons.net.ftp.FTPClient 下载文件提示Software caused connection abort: recv failed

今天在使用FTPClient下载文件时,登录成功了,但是提示下图所示的错误信息: 出现这个问题,本以为设置的读取文件目录不对,尝试修改多次无果.为了排除路径的问题,在firefox中安装了插件"FireFTP",连接上之后,可以正常下载,于是该问题排除. 后来在http://blog.csdn.net/wangjinwei6912/article/details/6603152 看到这位朋友的提示防火墙的问题,于是打开系统的防火墙,发现系统的防火墙都是开着的,如下图所示: 尝试把防火墙

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

1.错误描述 ClientAbortException: java.net.SocketException: Software caused connection abort: socket write error at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:407) at org.apache.tomcat.util.buf.ByteChunk.flushBuffer(ByteCh

LoadRunner Error code 10053,Software caused connection abort

发现问题的应用场景  C/S结构程序,请求响应采用异步机制.即客户端发送一个请求后不是一直等待这个结果,客户端将请求存放在请求队列并获得一个JOBID,服务器运行后将运行结果存放在响应队列,客户端定时查看响应队列,根据JOBID定时从响应队列中获取结果.因此带来的测试问题是受服务器状态影响,客户端获取结果的次数不固定. 测试脚本示例  lrs_create_socket("socket0", "TCP", "LocalHost=0", "