温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

文件上传时报Recv failure: Connection reset by peer异常解决

发布时间:2020-06-12 17:16:20 来源:网络 阅读:7767 作者:niceheart 栏目:开发技术

    以前上传文件时报这个异常没这么在意,这次网络不好时总是报这个异常,导致文件上传失败,故特意说明一下,报个异常的原因还是很多的,今日只针对我当前遇上的问题进行记录一下。

    背景:平时网络好的时候,我开启线程的上传和下载都没问题,网络慢的时候就出来这个异常 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,问题的解决方案是多样性的,希望遇上同样问题的你能有所帮助!


向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI