以前上传文件时报这个异常没这么在意,这次网络不好时总是报这个异常,导致文件上传失败,故特意说明一下,报个异常的原因还是很多的,今日只针对我当前遇上的问题进行记录一下。
背景:平时网络好的时候,我开启线程的上传和下载都没问题,网络慢的时候就出来这个异常 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,问题的解决方案是多样性的,希望遇上同样问题的你能有所帮助!