2011-05-08 89 views
0

客戶端輸入一些關於服務器的信息(例如服務器名稱,端口號vs ...)以及將要發送的消息。但是如果它寫入端口號錯誤,客戶端仍然等待響應。如果服務器端口錯誤,客戶端正在等待響應

如何在端口未打開的情況下拋出異常?

+1

*應該*拋出異常。如果沒有,那麼有人在港口上收聽。 – skaffman 2011-05-08 13:53:00

回答

1

如果服務器沒有監聽某個端口,它將得到一個ConnectException: Connection refused但是,如果您連接到運行不同服務的端口,則可能無法獲得響應,具體取決於該服務的功能。如果這是一個問題,我建議你在連接沒有得到預期結果時超時。

1

@ skaffman的評論是正確的。

通常,當您嘗試打開TCP/IP連接到沒有監聽的端口時,遠程計算機上的TCP/IP堆棧會通過發送RST來響應初始SYN消息,這會導致「連接被拒絕」異常。

如果你沒有看到這個異常,最可能的原因是有東西阻塞SYN消息(或正常的SYNACK響應)。這通常是一個防火牆(在任何一端)。常見的防火牆策略是爲所有端口悄悄丟棄TCP SYN消息,但只有少量端口。這會產生你觀察到的效果。

無論採用哪種方式,您都無法獲得立即的例外。你可以做的最好的辦法是設置非零連接超時,並捕獲超時異常

相關問題