5月份的时候在做一个HTTPSQS(HTTP Simple Queue Service
)的应用开发的时候遇到了这个异常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(SocketInputStream.java:129)
产生这个异常的原因有多种方面,单就如 Software caused 所示,
是由于程序编写的问题,而不是网络的问题引起的.
已知会导致这种异常的一个场景如下:
客户端和服务端建立tcp的短连接,每次客户端发送一次请求,
服务端响应后关闭与客户端的连接.
如果客户端在服务端关闭连接后,没有释放连接,继续试图发送请求和接收响应.
这个时候就会出错
.
这个时候客户端Socket的getOutputStream返回来的OutPutStream维护
的是本地的连接状态,
无法知道远程的服务端已经关闭了对应的InputStream和socket因此
虽然调用了
out.write(sendbuf, 0, sendbuf.length);
方法,但是实际上服务端并没有接收到客户端的请求信息.
因为没有抛出异常,因此造成了误以为客户端请求发送成功的假象.
接下来调用InputStream的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()返回的值是非堵塞的,可以被多个线程访问
在对方释放连接后,也要释放本地的连接.
这里把这个错误记下来,重要的就是红色部分。下次再有一样的异常就不用百度去找了,加深一下印象。
分享到:
相关推荐
Software caused connection abort: recv failed
Caused by: android.system.ErrnoException: write failed: ENOSPC (No space lef
我真的佛了,我把电脑都重装系统了,没想到还是有问题,最终我找到了解决方案。 (我指的重装系统就是win10自带的功能,可能...Network error: Software caused connection abort 原创文章 6获赞 8访问量 726 关注
解决TestNG单元测试报错Software caused connection abort: socket write error
主要介绍了oracle常见故障及规划解析,小编觉得还是不错的,这里分享给大家,供需要的朋友参考。
Caused by: java.net.UnknownHostException: openapi.alipay.com
天喻软件:颠覆CAD.pdf
专题资料
Caused by: java.lang.OutOfMemoryError: PermGen space解决方案, avax.servlet.ServletException: java.lang.OutOfMemoryError: PermGen space at org.apache.jasper.servlet.JspServlet.service(JspServlet.java...
JAVAHttpClientThe server failed to respond with a validCaused by: org.apache.htt
连接服务器失败(错误原因:Connection refused) error 111 抓包结果
异常:Caused by: java.lang.IllegalStateException: Method has too many Body parameters Caused by: java.lang.IllegalStateException: Method has too many Body parameters: public abstract ...
主要介绍了java.net.ConnectException: Connection refused问题解决办法的相关资料,需要的朋友可以参考下
Android Caused by: java.lang.ClassNotFoundException解决办法 出现问题: 08-13 18:29:22.924: E/AndroidRuntime(1875): Caused by: Java.lang.ClassNotFoundException:XXXXX in loader dalvik.system....
android Caused by: libcore.io.GaiException: getaddrinfo failed: EAI_NODATA (No address associated 97/100 android Caused by: libcore.io.GaiException: getaddrinfo failed: EAI_NODATA (No address ...
主要介绍了Caused by: android.os.NetworkOnMainThreadException错误解决办法,本文提供了2种解决方法,需要的朋友可以参考下
主要介绍了Caused by: java.lang.ClassNotFoundException: org.objectweb.asm.Type异常,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
Caused by: org.jboss.as.controller.client.helpers.domain.UpdateFailedException: "WFLYDC0022: Operation failed or was rolled back on all servers." 查看此文件末尾的完整堆栈跟踪更有趣的日志来自主机控制...