為什麼會卡在「連接埠已被占用」或 address already in use?

在 Windows 上使用 Clash for Windows 或類似的圖形化包裝時,核心(例如 Mihomo/Clash Meta)啟動時必須在本機綁定(bind)一組 IP 與連接埠,用來提供 HTTP/SOCKS 代理、混合埠,以及對外開啟外部控制器(REST API)介面。若該連接埠已被其他行程占住,核心便無法完成綁定,於日誌或介面上常見 address already in usebind: Only one usage... 這類訊息,外觀就是「剛更新完反而打不開」「按啟動卻立刻失敗」。

最常見的原因不是設定檔語法壞掉,而是上一個 Clash 程序沒真正結束(例如關閉視窗但背景程序卡在托盤)、你開了第二個用戶端卻沿用同一組埠,或其他軟體剛好也監聽在同一個本機埠(例如舊版加速器、本機 API 偵錯工具、自動化腳本)。這類問題用「重開機」多半能暫時解掉,但你可以用 netstat 把占用者一次看清,之後就不必靠猜。

ℹ️
用語對照:本文所稱「控制埠」對應設定檔中的 external-controller 欄位(常見為 127.0.0.1:9090);「代理/混合埠」則對應 portsocks-portmixed-port 等。兩者都可能被占用,排查時請不要只看其中一個數字。

先釐清:哪些埠最容易撞衝?

不同使用者自訂程度不一,但實務上常互相踩雷的幾個預設值包括:外部控制器(常寫成 127.0.0.1:9090,YAML 裡欄位名稱就是 external-controller)、混合埠 mixed-port(社群常見 7890)、以及分開的 portsocks-port。如果你從舊版或另一套圖形介面複製設定,很容易在兩份核心同時使用同一組埠的情況下撞車。

建議你在開始下命令前,先打開用戶端介面或設定檔,把「計畫使用」的幾個數字抄在記事本:包含外部控制器位址、HTTP/SOCKS/mixed 任一項實際啟用的埠。接著我們用系統工具去對照「到底是誰已經在聽這些埠」。若你希望先掌握訂閱與設定檔整體結構,可搭配站內的訂閱連結匯入教學,避免在調埠時夾雜不相干的格式問題。

第一步:用 Windows netstat 找到 PID(可直接複製)

以下命令多半可在一般命令提示字元執行(多數情境不必先以系統管理員身分開啟);若你的 Windows 介面語系為英文,選單用字可能不同,但指令相同。請將下方範例中的 9090 換成你那邊實際懷疑被占用的埠號(例如 7890)。

netstat -ano | findstr :9090

說明:-a 顯示所有連線與監聽埠,-n 以數字呈現位址與埠號,-o 顯示擁有該連線的行程識別碼(PID)findstr 則用來過濾出含有 :9090 的那幾列。若輸出裡出現 LISTENING,列尾數字就是占用者的 PID。

若你更習慣 PowerShell,也可以改用下列寫法(同樣把埠號換成你的目標):

Get-NetTCPConnection -LocalPort 9090 -ErrorAction SilentlyContinue | Format-Table -AutoSize

當你同時懷疑多個埠時,不妨針對每個埠各跑一次;少數情況下,殘留行程會同時占用控制埠與 mixed-port,只查一邊會漏掉。這也是為什麼我們前面建議先把「設定檔裡會啟用的埠」先列成清單。

第二步:依 PID 結束行程前,請先確認是誰

拿到 PID 後,不要立刻強制結束。建議先用工作管理員或命令列查出執行檔名稱,避免誤殺系統服務。以命令提示字元為例(將 12345 換成你的 PID):

tasklist /FI "PID eq 12345"

若顯示為 clash-win64.exeClash for Windows.exe 或你認得的更新工具/舊版核心,優先在圖形介面中「正常結束」;若介面無回應,再考慮使用:

taskkill /PID 12345 /F
⚠️
風險提示:/F 為強制結束。請確認 PID 對應的是你預期要關掉的程式,且已儲存重要工作。企業裝置若受端點安全軟體控管,請遵守內部規範再操作。

完成後,重新啟動 Clash 用戶端,觀察是否仍報連接埠占用。若錯誤消失,多半是殘留行程或重複啟動造成的衝突,並非訂閱本身失效。

第三步:改設定檔的 external-controller 與本機埠

若你確認必須讓兩套程式並存,或該埠被第三方長期占用、不方便結束,便可以改 Clash 這邊的綁定位址與埠號。以 YAML 為例,找到頂層或合併後的設定區塊,調整 external-controller(控制埠)到一個你確定空閒的埠位,例如:

external-controller: 127.0.0.1:9091

同理,若錯誤訊息指向 mixed-port 或其他監聽埠,請在設定檔中修改對應欄位,並確保圖形介面裡顯示的埠與檔案一致。部分用戶端會把「外部控制器」顯示在進階設定頁,修改後需重新載入設定或重啟核心才會生效。

提醒你:改數字很簡單,但務必記得同步更新依賴該埠的外部工具(例如瀏覽器副控外掛、自動測速腳本、本機儀表板網址)。否則會出現「核心已啟動,但儀表板連不到」的第二層問題,容易被誤判成核心故障。

圖形介面用戶端通常要去哪裡改?

不同分支選單名稱不一,但大致會落在「核心設定/進階設定/覆寫(Override)」附近。若介面提供「開啟設定檔資料夾」或「編輯目前的設定」,優先使用官方路徑編輯並儲存,再讓用戶端重新載入。避免手動複製到錯的設定檔路徑,導致你以為改過、實際啟動的仍是另一份副本。

若你同時在排查系統代理或 TUN,請記得:連接埠占用發生在核心能否綁定本機埠這一層,與「規則是否分流正確」是不同問題。TUN 相關的整體觀念可參考站內的TUN 模式詳解,以免把驅動與網卡問題混進連接埠除錯裡。

常見誤判與排除順序

(1)以為是防毒軟體擋下來:部分安全軟體會攔截對外監聽,但典型的 127.0.0.1 本機埠衝突仍會優先表現為「埠被占用」。先用 netstat 交叉驗證,比較不容易走冤枉路。

(2)更新後捷徑指向新版本,但開機自動啟動仍是舊執行檔:這種情境會出現兩個版本交替搶埠。建議檢查「工作階段登入時啟動」與排程工作,把舊項目停用後再試。

(3)只改圖形介面數字、實際載入的覆寫檔沒改到:若你同時使用多份覆寫規則,請確認最終合併結果裡的埠號已更新,必要時直接檢視實際送給核心的 YAML。

(4)誤把「連線逾時」當成「無法綁定埠」:前者多半是網路或節點問題;後者才會在日誌裡反覆出現 bind/address already in use。先對照關鍵字,節省大量試誤時間。

把連接埠問題解掉之後,若你要繼續優化分流與 DNS,建議從說明文件總覽挑出與目前版本相符的章節,逐步檢視規則優先順序與策略組,而不是一次改十個參數。這樣當核心終於穩定綁定本機埠時,你也比較容易判讀日誌與儀表板上的真實狀態。

取得可信的用戶端與更新來源

連接埠占用有時也與不完整更新多版本核心殘留有關。建議透過固定、可追蹤的下載入口取得安裝包,更新後若仍有異常,優先依本文順序檢查 PID 與 external-controller,再考慮重置設定檔或匯入備份。

你可以先從本站用戶端下載頁取得目前 Windows 平台適用的版本,再回到本機用 netstat 驗證埠號是否與你的預期一致。比起在論壇片段式搜尋錯誤字串,先把「埠 → PID → 執行檔」這條鏈走完,通常最快定位問題。此處若提及開源授權或上游專案資訊,仍可另外查閱專案頁面,但取得可安裝程式的首選路徑仍建議以本站下載頁為準。

結語:把占用者找出來,比反覆重裝更有效

Clash for Windows 相關用戶端一旦出現啟動失敗,很多人第一反應是重灌或重下訂閱;但若本質是本機連接埠已被占用,問題核心其實在行程管理與埠分配,而不是「節點掛了」。學會用 netstat 搭配 PID 檢視,再視情況調整 external-controller 與 mixed-port,你能省下大量無效嘗試,也更清楚自己的環境裡究竟跑了哪些程式。

相較於到處收集不相容的舊教學,更重要的是選擇一個來源清楚、更新節奏穩定、且能在介面上明確呈現埠與核心狀態的實作。當你遇到類似錯誤時,只要照本文把關鍵字對上「誰在 LISTENING、PID 是誰、設定檔寫了哪個埠」,多數情況都能在幾分鐘內收斂。→ 立即免費下載 Clash,開啟流暢上網新體驗