開發者

Mac 上的連接埠 5000 或 7000 被占用:AirPlay 接收器

Apple 將 TCP 連接埠 5000 和 7000 列為 AirPlay 使用的連接埠。AirPlay 接收器開啟時,開發伺服器就無法使用這兩個連接埠。

適用於:macOS 12 Monterey 以上版本。設定位於「一般」>「AirDrop 與接力」,較新版本則為「AirDrop 與接續互通」。檢查日期:2026年10月29日

症狀

  • 在連接埠 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 上的連接埠已被占用。

如何檢查

  1. 找出使用連接埠 5000 的處理程序。

    lsof -nP -iTCP:5000 -sTCP:LISTEN

    輸出COMMAND 欄位中出現 ControlCenter 的那一行,就表示是 AirPlay 接收器。

  2. 找出使用連接埠 7000 的處理程序。

    lsof -nP -iTCP:7000 -sTCP:LISTEN

如何修正

  1. 最簡單的做法是讓開發伺服器改用其他連接埠,例如 5001 或 8000。

  2. 若要釋出這些連接埠,請選擇「蘋果」選單 >「系統設定」>「一般」>「AirDrop 與接力」。較新版本稱為「AirDrop 與接續互通」。

  3. 關閉「AirPlay 接收器」。

  4. 在 macOS 12 上,這個設定位於「系統偏好設定」>「共享」>「AirPlay 接收器」。

  5. 再執行一次 lsof,確認連接埠已釋出。

    lsof -nP -iTCP:5000 -sTCP:LISTEN

常見問題

可以讓 AirPlay 接收器保持開啟嗎?

可以。把伺服器改到其他連接埠執行即可。只有在 App 必須使用連接埠 5000 或 7000 時,才需要關閉 AirPlay 接收器。

為什麼伺服器在 Linux 上可以使用連接埠 5000?

AirPlay 接收器是 macOS 的功能,其他系統不會為此占用這個連接埠。

資料來源

資料來源檢查日期:2026年10月29日。man 頁面為 macOS 內建版本;在終端機中用 man <name> 開啟。