文件上传时报Recv failure: Connection reset by peer异常解决
以前上传文件时报这个异常没这么在意,这次网络不好时总是报这个异常,导致文件上传失败,故特意说明一下,报个异常的原因还是很多的,今日只针对我当前遇上的问题进行记录一下。
背景:平时网络好的时候,我开启线程的上传和下载都没问题,网络慢的时候就出来这个异常 Recv failure: Connection reset by peer 。
异常的原因有两点:1、网络非常慢时易导致该异常;2、线程多次重复请求网络服务造成的异常,因为上次启用的线程还没断开,所以该服务一直存在,导致再次进行上传请求时异常。
开始写的线程是这样写的:
new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
try {
File file = new File(filePath);
uploadForm(param, fileKey, file, file.getName(),
RequestURL, mContext);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}).start();
这种写法是相当方便,当请求结束后会自动回收线程,但是如果请求一直没有反应,这个线程将一直存在,所以当我们点击第二次上传请求服务的时候,依然会报异常,因为该线程一直暂用了这个“道”,其他的请求就无路可请,所以更改为:
if (mThread != null) {
mThread.interrupt();
mThread = null;
}
mThread = new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
try {
File file = new File(filePath);
uploadForm(param, fileKey, file, file.getName(), RequestURL,
mContext);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
mThread.start();
更改后,上传异常解决了!
更改后的代码中,我们对每次的线程请求进行了判断,保证了每次请求的独立性,在上一个项目中也同样遇上这个问题,当时更改成socket进行传输就Ok,问题的解决方案是多样性的,希望遇上同样问题的你能有所帮助!
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。