【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 
版权声明:本文为博主原创文章,转载请附上博文链接!

你可能感兴趣的:(java常见错误集锦,改错)