文件上傳時報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,問題的解決方案是多樣性的,希望遇上同樣問題的你能有所幫助!


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章