溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

文件上傳時(shí)報(bào)Recv failure: Connection reset by peer異常解決

發(fā)布時(shí)間:2020-06-12 17:16:20 來源:網(wǎng)絡(luò) 閱讀:7801 作者:niceheart 欄目:開發(fā)技術(shù)

    以前上傳文件時(shí)報(bào)這個(gè)異常沒這么在意,這次網(wǎng)絡(luò)不好時(shí)總是報(bào)這個(gè)異常,導(dǎo)致文件上傳失敗,故特意說明一下,報(bào)個(gè)異常的原因還是很多的,今日只針對我當(dāng)前遇上的問題進(jìn)行記錄一下。

    背景:平時(shí)網(wǎng)絡(luò)好的時(shí)候,我開啟線程的上傳和下載都沒問題,網(wǎng)絡(luò)慢的時(shí)候就出來這個(gè)異常 Recv failure: Connection reset by peer

    異常的原因有兩點(diǎn):1、網(wǎng)絡(luò)非常慢時(shí)易導(dǎo)致該異常;2、線程多次重復(fù)請求網(wǎng)絡(luò)服務(wù)造成的異常,因?yàn)樯洗螁⒂玫木€程還沒斷開,所以該服務(wù)一直存在,導(dǎo)致再次進(jìn)行上傳請求時(shí)異常。

    開始寫的線程是這樣寫的:

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();

這種寫法是相當(dāng)方便,當(dāng)請求結(jié)束后會(huì)自動(dòng)回收線程,但是如果請求一直沒有反應(yīng),這個(gè)線程將一直存在,所以當(dāng)我們點(diǎn)擊第二次上傳請求服務(wù)的時(shí)候,依然會(huì)報(bào)異常,因?yàn)樵摼€程一直暫用了這個(gè)“”,其他的請求就無路可請,所以更改為:

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();

更改后,上傳異常解決了!

  更改后的代碼中,我們對每次的線程請求進(jìn)行了判斷,保證了每次請求的獨(dú)立性,在上一個(gè)項(xiàng)目中也同樣遇上這個(gè)問題,當(dāng)時(shí)更改成socket進(jìn)行傳輸就Ok,問題的解決方案是多樣性的,希望遇上同樣問題的你能有所幫助!


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI