開發者
Mac 上的連接埠 5000 或 7000 被占用:AirPlay 接收器
Apple 將 TCP 連接埠 5000 和 7000 列為 AirPlay 使用的連接埠。AirPlay 接收器開啟時,開發伺服器就無法使用這兩個連接埠。
症狀
- 在連接埠 5000 上執行的 Flask 或其他開發伺服器停止,並顯示「address already in use」。
lsof在連接埠 5000 或 7000 上顯示ControlCenter。curl localhost:5000傳回的回應不是來自你的 App。
可能原因
- AirPlay 接收器。AirPlay 接收器讓其他 Apple 裝置可以串流到 Mac。Apple 將連接埠 5000 和 7000 列為 AirPlay 使用的連接埠。
- 其他伺服器。如果處理程序不是 ControlCenter,就是有其他 App 在使用這個連接埠。請參閱Mac 上的連接埠已被占用。
如何檢查
找出使用連接埠 5000 的處理程序。
lsof -nP -iTCP:5000 -sTCP:LISTEN輸出COMMAND 欄位中出現
ControlCenter的那一行,就表示是 AirPlay 接收器。找出使用連接埠 7000 的處理程序。
lsof -nP -iTCP:7000 -sTCP:LISTEN
如何修正
最簡單的做法是讓開發伺服器改用其他連接埠,例如 5001 或 8000。
若要釋出這些連接埠,請選擇「蘋果」選單 >「系統設定」>「一般」>「AirDrop 與接力」。較新版本稱為「AirDrop 與接續互通」。
關閉「AirPlay 接收器」。
在 macOS 12 上,這個設定位於「系統偏好設定」>「共享」>「AirPlay 接收器」。
再執行一次 lsof,確認連接埠已釋出。
lsof -nP -iTCP:5000 -sTCP:LISTEN
常見問題
可以讓 AirPlay 接收器保持開啟嗎?
可以。把伺服器改到其他連接埠執行即可。只有在 App 必須使用連接埠 5000 或 7000 時,才需要關閉 AirPlay 接收器。
為什麼伺服器在 Linux 上可以使用連接埠 5000?
AirPlay 接收器是 macOS 的功能,其他系統不會為此占用這個連接埠。
資料來源
- Apple 支援:Apple 軟體產品使用的 TCP 和 UDP 連接埠
- Apple 支援:在 Mac 上更改「AirDrop 與接續互通」設定
- lsof(8),macOS 27.2 內建的 man 頁面
資料來源檢查日期:2026年10月29日。man 頁面為 macOS 內建版本;在終端機中用 man <name> 開啟。