java socket SocketException: recvfrom failed: ECONNRESET
2016-01-12 23:46
786 查看
最近发现了,SocketException: recvfrom failed: ECONNRESET
01-12 23:53:58.481: W/System.err(17174): java.net.SocketException: recvfrom failed: ECONNRESET (Connection reset by peer)
01-12 23:53:58.481: W/System.err(17174): at libcore.io.IoBridge.maybeThrowAfterRecvfrom(IoBridge.java:592)
01-12 23:53:58.481: W/System.err(17174): at libcore.io.IoBridge.recvfrom(IoBridge.java:556)
01-12 23:53:58.481: W/System.err(17174): at java.net.PlainSocketImpl.read(PlainSocketImpl.java:485)
01-12 23:53:58.481: W/System.err(17174): at java.net.PlainSocketImpl.access$000(PlainSocketImpl.java:37)
01-12 23:53:58.481: W/System.err(17174): at java.net.PlainSocketImpl$PlainSocketInputStream.read(PlainSocketImpl.java:237)
01-12 23:53:58.481: W/System.err(17174): at com.action.NetToolServer$ServerTask.handleSocketDefault(NetToolServer.java:349)
01-12 23:53:58.481: W/System.err(17174): at com.action.NetToolServer$ServerTask.run(NetToolServer.java:234)
01-12 23:53:58.481: W/System.err(17174): at java.lang.Thread.run(Thread.java:818)
01-12 23:53:58.481: W/System.err(17174): Caused by: android.system.ErrnoException: recvfrom failed: ECONNRESET (Connection reset by peer)
01-12 23:53:58.481: W/System.err(17174): at libcore.io.Posix.recvfromBytes(Native Method)
01-12 23:53:58.481: W/System.err(17174): at libcore.io.Posix.recvfrom(Posix.java:161)
01-12 23:53:58.481: W/System.err(17174): at libcore.io.BlockGuardOs.recvfrom(BlockGuardOs.java:250)
01-12 23:53:58.481: W/System.err(17174): at libcore.io.IoBridge.recvfrom(IoBridge.java:553)
01-12 23:53:58.481: W/System.err(17174): ... 6 more
不敢说我的情况你遇到的也一样,但是我这里java socket的一种情况,算是抛砖引玉了。
NetToolServer.java 是我自己写的代码。
且看代码片段:
指向的是红色行代码。
思前想去,最后发现,这个错误虽然说的是recv server相关的错误,但是这种情况,是因为is有可能已经读取完全了。所以需要修改成为
while (is.available() > 0 && (length = is.read(inputByte, 0, inputByte.length)) > 0) { //***
就好了。保证从inputStream读取没有出错才行。
01-12 23:53:58.481: W/System.err(17174): java.net.SocketException: recvfrom failed: ECONNRESET (Connection reset by peer)
01-12 23:53:58.481: W/System.err(17174): at libcore.io.IoBridge.maybeThrowAfterRecvfrom(IoBridge.java:592)
01-12 23:53:58.481: W/System.err(17174): at libcore.io.IoBridge.recvfrom(IoBridge.java:556)
01-12 23:53:58.481: W/System.err(17174): at java.net.PlainSocketImpl.read(PlainSocketImpl.java:485)
01-12 23:53:58.481: W/System.err(17174): at java.net.PlainSocketImpl.access$000(PlainSocketImpl.java:37)
01-12 23:53:58.481: W/System.err(17174): at java.net.PlainSocketImpl$PlainSocketInputStream.read(PlainSocketImpl.java:237)
01-12 23:53:58.481: W/System.err(17174): at com.action.NetToolServer$ServerTask.handleSocketDefault(NetToolServer.java:349)
01-12 23:53:58.481: W/System.err(17174): at com.action.NetToolServer$ServerTask.run(NetToolServer.java:234)
01-12 23:53:58.481: W/System.err(17174): at java.lang.Thread.run(Thread.java:818)
01-12 23:53:58.481: W/System.err(17174): Caused by: android.system.ErrnoException: recvfrom failed: ECONNRESET (Connection reset by peer)
01-12 23:53:58.481: W/System.err(17174): at libcore.io.Posix.recvfromBytes(Native Method)
01-12 23:53:58.481: W/System.err(17174): at libcore.io.Posix.recvfrom(Posix.java:161)
01-12 23:53:58.481: W/System.err(17174): at libcore.io.BlockGuardOs.recvfrom(BlockGuardOs.java:250)
01-12 23:53:58.481: W/System.err(17174): at libcore.io.IoBridge.recvfrom(IoBridge.java:553)
01-12 23:53:58.481: W/System.err(17174): ... 6 more
不敢说我的情况你遇到的也一样,但是我这里java socket的一种情况,算是抛砖引玉了。
NetToolServer.java 是我自己写的代码。
且看代码片段:
try { is = socket.getInputStream(); os = socket.getOutputStream(); int length = 0; byte[] inputByte = new byte[2048]; byte[] outBuf = new byte[128]; while ( (length = is.read(inputByte, 0, inputByte.length)) > 0) { //***###*** //... <span style="white-space:pre"> </span>os.write(outBuf); os.flush(); } catch (Exception e) { e.printStackTrace(); } finally { try { is.close(); os.close(); socket.close(); <span style="white-space:pre"> </span>} catch (IOException e) { e.printStackTrace(); } catch (NullPointerException e) { }
指向的是红色行代码。
思前想去,最后发现,这个错误虽然说的是recv server相关的错误,但是这种情况,是因为is有可能已经读取完全了。所以需要修改成为
while (is.available() > 0 && (length = is.read(inputByte, 0, inputByte.length)) > 0) { //***
就好了。保证从inputStream读取没有出错才行。
相关文章推荐
- JAVA成员变量初始化
- hdu 2524 java
- Java继承小练习
- Spring MVC 学习笔记 json格式的输入和输出
- Spring Boot JDBC 连接数据库
- JDK1.8源代码
- Java之详细介绍jNI
- 配置SpringMVC返回JSON遇到的坑
- Java之JNI编程注意事项
- Java之JNI应用场景
- Java之JNI技术总结
- java web项目整体异常处理机制
- Java之JNI原理介绍
- Java之创建JNI的案例
- 给jdk写注释系列之jdk1.6容器(12)-PriorityQueue源码解析
- C和Java效率对比试验和编译器优化影响
- 如何使用springmvc的@requestbody 返回json数据
- Java常用知识整理
- 信息管理系统(java)
- 理解Java ClassLoader机制 |用Java说话,人气战胜时间!Come On