首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java Socket 連接被拒絕異常排查指南

     編輯:Java 相關知識

在進行 Socket 編程時,java.net.ConnectException: Connection refused 是最常見的異常之一。本文直擊痛點,記錄一次典型排查過程,幫助開發者快速定位問題,避免彎路。

異常堆棧

java.net.ConnectException: Connection refused: connect
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.PlainSocketImpl.doConnect(Unknown Source)
    at java.net.PlainSocketImpl.connectToAddress(Unknown Source)
    at java.net.PlainSocketImpl.connect(Unknown Source)
    at java.net.SocksSocketImpl.connect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at java.net.Socket.<init>(Unknown Source)
    at java.net.Socket.<init>(Unknown Source)

根因分析

直接原因:客户端嘗試連接的 IP 和端口上,沒有服務端程序正在監聽。即「沒有開啟對應的服務器」。

常見場景:

  • 服務端進程未啟動或已崩潰。
  • 服務端綁定的 IP/端口與客戶端調用的不一致(如服務端綁 127.0.0.1,客戶端連 localhost 卻解析到 IPv6 ::1)。
  • 防火牆攔截(通常拋出超時而非拒絕,但某些配置下會表現為拒絕)。
  • 端口號筆誤(如 8080 寫成 8008)。

快速排查清單

  1. 確認服務端進程存活:ps -ef | grep java 或 Windows 任務管理器。
  2. 驗證端口監聽:netstat -an | grep 端口號(Linux)或 netstat -ano | findstr 端口號(Windows),狀態應為 LISTEN。
  3. 本機 Telnet 測試:telnet localhost 端口號,若連不上則確為服務端問題。
  4. 檢查綁定地址:服務端代碼中 new ServerSocket(port) 默認綁 0.0.0.0(全網卡),若顯式指定 InetAddress.getByName("127.0.0.1") 則僅本機可訪問。
  5. 核對客戶端調用參數:IP、端口、協議(TCP/UDP)是否與服務端完全一致。

最佳實踐建議

  • 啟動順序:先啟服務端再啟客戶端;集成測試中使用健康檢查或重試機制。
  • 異常處理:捕獲 ConnectException 給出友好提示(如「服務暫不可用,請稍後重試」),避免堆棧暴露給用戶。
  • 日誌記錄:服務端啟動時打印實際綁定的 InetSocketAddress,便於運維核對。
核心提示:Connection refused 幾乎總意味著「對端沒人聽」。優先檢查服務端進程與端口,90% 情況下問題即在此處。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved