文件上传时报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,问题的解决方案是多样性的,希望遇上同样问题的你能有所帮助!


本文出自 “吸博取精自我更新” 博客,请务必保留此出处http://wyong.blog.51cto.com/1115465/1617542

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。