前言:這兩個(gè)異常報(bào)出的時(shí)候,說明客戶端沒法正常連接到服務(wù)端,但是兩者還是有區(qū)別的。
1:connection timed out
在實(shí)際開發(fā)中經(jīng)常會碰到connection timed out
的問題
1
2
3
4
5
6
7
8
9
10
11
|
java.net.connectexception: connection timed out (connection timed out) at java.net.plainsocketimpl.socketconnect( native method) at java.net.abstractplainsocketimpl.doconnect(abstractplainsocketimpl.java: 350 ) at java.net.abstractplainsocketimpl.connecttoaddress(abstractplainsocketimpl.java: 206 ) at java.net.abstractplainsocketimpl.connect(abstractplainsocketimpl.java: 188 ) at java.net.sockssocketimpl.connect(sockssocketimpl.java: 392 ) at java.net.socket.connect(socket.java: 589 ) at java.net.socket.connect(socket.java: 538 ) at java.net.socket.<init>(socket.java: 434 ) at java.net.socket.<init>(socket.java: 211 ) at clientsockettimeout.main(clientsockettimeout.java: 8 ) |
當(dāng)?shù)玫?nbsp;connection timed out: connect 的時(shí)候表示tcp路由不正常,原因有很多,可能是服務(wù)器無法ping通,可能是服務(wù)器(防火墻等)丟棄了該請求報(bào)文包,也可能是服務(wù)器應(yīng)答太慢,又或者存在間歇性的問題(這種情況很難從日志文件中排查問題)。
2:connection refused
當(dāng)?shù)玫?code>connection refused: connect 異常的時(shí)候表示從本地客戶端到目標(biāo)ip地址的路由是正常的,但是該目標(biāo)端口沒有進(jìn)程在監(jiān)聽,然后服務(wù)端拒絕掉了連接。
一個(gè)成功的tcp鏈接將會看到syn,syn-ack,ack,這也就是我們預(yù)期的tcp三次握手。當(dāng)使用tcpdump或wireshark抓包工具來探測發(fā)送過來的請求報(bào)文包時(shí),connection refused將會看到syn,rst。
connection refused問題排查
1. 查看防火墻是否打開,如防火墻打開,端口是否開放
2. 查看服務(wù)端是否正常運(yùn)行
3. 查看服務(wù)端監(jiān)聽的端口與客戶端訪問的端口是否一致
jps | grep [appname]
netstat -anp | grep [pid]
4. ping hostname, telnet hostname port
5. 檢查客戶端訪問的hostname和port是否正確
6. 檢測服務(wù)端監(jiān)聽端口是host是否使用了127.0.0.1/localhost
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對服務(wù)器之家的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接
原文鏈接:https://blog.csdn.net/weixin_40581455/article/details/84674106