溫馨提示×

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

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

報(bào)錯(cuò)JAVA.NET.SOCKETEXCEPTION: SOFTWARE CAUSED CONNECTION ABORT: RECV FAILED如何解決

發(fā)布時(shí)間:2021-07-02 16:18:25 來(lái)源:億速云 閱讀:1544 作者:chen 欄目:大數(shù)據(jù)

這篇文章主要講解了“報(bào)錯(cuò)JAVA.NET.SOCKETEXCEPTION: SOFTWARE CAUSED CONNECTION ABORT: RECV FAILED如何解決”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“報(bào)錯(cuò)JAVA.NET.SOCKETEXCEPTION: SOFTWARE CAUSED CONNECTION ABORT: RECV FAILED如何解決”吧!

產(chǎn)生這個(gè)異常的原因有多種方面,單就如 Software caused 所示, 

是由于程序編寫(xiě)的問(wèn)題,而不是網(wǎng)絡(luò)的問(wèn)題引起的. 

已知會(huì)導(dǎo)致這種異常的一個(gè)場(chǎng)景如下: 
客戶端和服務(wù)端建立tcp的短連接,每次客戶端發(fā)送一次請(qǐng)求, 
服務(wù)端響應(yīng)后關(guān)閉與客戶端的連接. 
如果客戶端在服務(wù)端關(guān)閉連接后,沒(méi)有釋放連接,繼續(xù)試圖發(fā)送請(qǐng)求和接收響應(yīng). 
這個(gè)時(shí)候就會(huì)出錯(cuò). 

這個(gè)時(shí)候客戶端Socket的getOutputStream返回來(lái)的OutPutStream維護(hù) 
的是本地的連接狀態(tài), 
無(wú)法知道遠(yuǎn)程的服務(wù)端已經(jīng)關(guān)閉了對(duì)應(yīng)的InputStream和socket因此 
雖然調(diào)用了 
out.write(sendbuf, 0, sendbuf.length); 
方法,但是實(shí)際上服務(wù)端并沒(méi)有接收到客戶端的請(qǐng)求信息. 
因?yàn)闆](méi)有拋出異常,因此造成了誤以為客戶端請(qǐng)求發(fā)送成功的假象. 

接下來(lái)調(diào)用etInputStream的in.read(header, 0, 14);方法. 
因?yàn)檫@次要讀取服務(wù)端的信息,因此產(chǎn)生了 
Software caused connection abort: recv failed的異常 

總結(jié)產(chǎn)生原因,在服務(wù)端/客戶端單方面關(guān)閉連接的情況下,另一方依然以為 
tcp連接仍然建立,試圖讀取對(duì)方的響應(yīng)數(shù)據(jù),導(dǎo)致出現(xiàn) 
Software caused connection abort: recv failed的異常. 

因此在receive數(shù)據(jù)之前,要先判斷連接狀態(tài). 
通過(guò)inputstream的available()方法來(lái)判斷,是否有響應(yīng)結(jié)果. 
如果available()的返回值為0,說(shuō)明沒(méi)有響應(yīng)數(shù)據(jù),可能是對(duì)方已經(jīng)斷開(kāi)連接, 
如果available()的返回值大于0,說(shuō)明有響應(yīng)數(shù)據(jù). 
另外值得注意的是available()返回的值是非堵塞的,可以被多個(gè)線程訪問(wèn) 

在對(duì)方釋放連接后,也要釋放本地的連接

感謝各位的閱讀,以上就是“報(bào)錯(cuò)JAVA.NET.SOCKETEXCEPTION: SOFTWARE CAUSED CONNECTION ABORT: RECV FAILED如何解決”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)報(bào)錯(cuò)JAVA.NET.SOCKETEXCEPTION: SOFTWARE CAUSED CONNECTION ABORT: RECV FAILED如何解決這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

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

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

AI