开发者

Mac 上端口 5000 或 7000 被占用:隔空播放接收器

Apple 将 TCP 端口 5000 和 7000 列为隔空播放使用的端口。隔空播放接收器打开时,开发服务器无法使用这两个端口。

适用于:macOS 12 Monterey 及更高版本。该设置位于“通用”>“隔空投送与接力”,较新版本中为“隔空投送与连续互通”。核查日期:2026年10月29日

症状

  • Flask 或其他开发服务器在端口 5000 上启动失败,提示“address already in use”。
  • lsof 显示端口 5000 或 7000 上的进程是 ControlCenter。
  • curl localhost:5000 返回的响应并非来自正在开发的 App。

可能的原因

  • 隔空播放接收器。隔空播放接收器可让其他 Apple 设备向这台 Mac 串流内容。Apple 将端口 5000 和 7000 列为隔空播放使用的端口。
  • 其他服务器。如果进程不是 ControlCenter,说明是其他 App 占用了该端口。请参阅Mac 上端口已被占用。

如何检查

  1. 查找占用端口 5000 的进程。

    lsof -nP -iTCP:5000 -sTCP:LISTEN

    输出 COMMAND 列中出现 ControlCenter 的行即表示隔空播放接收器。

  2. 查找占用端口 7000 的进程。

    lsof -nP -iTCP:7000 -sTCP:LISTEN

如何修复

  1. 最简单的办法是让开发服务器改用其他端口,例如 5001 或 8000。

  2. 要释放这些端口,请选取苹果菜单 >“系统设置”>“通用”>“隔空投送与接力”。较新版本中名为“隔空投送与连续互通”。

  3. 关闭“隔空播放接收器”。

  4. 在 macOS 12 中,该设置位于“系统偏好设置”>“共享”>“隔空播放接收器”。

  5. 再次运行 lsof,确认端口已空闲。

    lsof -nP -iTCP:5000 -sTCP:LISTEN

常见问题

可以保持隔空播放接收器开启吗?

可以。让服务器改用其他端口即可。只有当 App 必须使用端口 5000 或 7000 时,才需要关闭隔空播放接收器。

为什么同一个服务器在 Linux 上能用端口 5000?

隔空播放接收器是 macOS 的功能,其他系统不会为它占用这个端口。

参考资料

参考资料核查于 2026年10月29日。man 手册页为 macOS 自带版本;在“终端”中用 man <name> 打开。