【JAVA】使用socket 获取流读取 时报错java.net.SocketException: Software caused connection abort: recv failed

使用socket 进行通信 循环读取信息的时候报错java.net.SocketException: Software caused connection abort: recv failed

大概原因:

客户机<-->服务器,之间是由一个socket 长连接来通信,客户端有一个接收线程在while(true){..}循环里不停地从InputStream流中读数据,客户机每隔几秒钟发一次心跳包至服务端,如果连续未收到心跳包响应的次数已达到规定的次数,客户机认为此链路异常,将socket关闭,那么服务器会抛出java.net.SocketException: Connection reset by peer异常,然后分配给此socket连接的线程退出,那么客户端在while(true){..}循环,读取流时便会发java.net.SocketException:Software caused connection abort: recv failed异常。

简单说就是:循环读取信息的时候 InputStream 流异常关闭,但是你还从里面读取,所以要报错

 

解决方案:

每次读取信息的时候 检查是否还是连接状态:

                         使用available()方法, 返回大于0的表示连接,小于等于0 的是关闭连接

简单代码:

        while((len = is.read(bytes)) != -1) {

                .......!

               最后判断下连接状态:

             if(is.available()<=0) break;        

}
--------------------- 
作者:xiaoduup 
来源:CSDN 
原文:https://blog.csdn.net/xiaodujava/article/details/82693231 
版权声明:本文为博主原创文章,转载请附上博文链接!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值