您的位置:首页 > 编程语言 > Java开发

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 是我自己写的代码。

且看代码片段:

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读取没有出错才行。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: