java 常見超時異常原因


 

 

一、java.net.SocketTimeoutException: failed to connect to/103.83.45.229(port 443)from/192.168.1.124(port 49054)after 10000ms

可能出現的原因:

(1)在真機測試的時候,手機連接的數據流量,而不是公司的局域網. 把手機網絡連接設置為有局域網就可以了.

(2)設置的請求建立連接超時時間過短,沒有連接到服務器;   增加connectTimeout連接的時間; 

(3)設置的請求建立連接超時時間過短,會拋出java.net.SocketException: connetct time out的異常。

 

二、java.net.SocketTimeoutException: SSL handshake timed out:

   (1)設置的readTimeout過短,沒有讀取到資源;

 

三、java.io.IOException: unexpected end of stream on okhttp3.Address@XXXX

增加關閉連接即可

.addHeader("Connection", "close")

 

 

 

 

ConnectTimeout
指的是建立連接所用的時間,適用於網絡狀況正常的情況下,兩端連接所用的時間。
在java中,網絡狀況正常的情況下,例如使用HttpClient或者HttpURLConnetion連接時設置參數connectTimeout=5000即5秒,如果連接用時超過5秒就是拋出java.net.SocketException: connetct time out的異常。


ReadTimeout
指的是建立連接后從服務器讀取到可用資源所用的時間。
在這里我們可以這樣理解ReadTimeout:正常情況下,當我們發出請求時可以收到請求的結果,也就是頁面上展示的內容,但是當網絡狀況很差的時候,就會出現頁面上無法展示出內容的情況。另外當我們使用爬蟲或者其他全自動的程序時,無法判斷當前的網絡狀況是否良好,此時就有了ReadTimeout的用武之地了,通過設置ReadTimeout參數,例:ReadTimeout=5000,超過5秒沒有讀取到內容時,就認為此次讀取不到內容並拋出Java.net.SocketException: read time out的異常。

 

根據上面關於ConnectTimeout和ReadTimeout的描述,在我們使用需要設置這兩項參數的服務或程序時,應該對兩項參數一起設置。
一般而言兩項參數的數值可以設置成一樣的,但根據筆者個人經驗,可以把ReadTimeout設置的長一點,ConnectTimeout可以相對比較短,這是源於我們的網絡狀況一般較為穩定,連接時很少出現問題,但是讀取時因為數據下載時的網絡波動,出狀況的可能性更大一些。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM