开发者
Mac 上端口 5000 或 7000 被占用:隔空播放接收器
Apple 将 TCP 端口 5000 和 7000 列为隔空播放使用的端口。隔空播放接收器打开时,开发服务器无法使用这两个端口。
症状
- Flask 或其他开发服务器在端口 5000 上启动失败,提示“address already in use”。
lsof显示端口 5000 或 7000 上的进程是ControlCenter。curl localhost:5000返回的响应并非来自正在开发的 App。
可能的原因
- 隔空播放接收器。隔空播放接收器可让其他 Apple 设备向这台 Mac 串流内容。Apple 将端口 5000 和 7000 列为隔空播放使用的端口。
- 其他服务器。如果进程不是 ControlCenter,说明是其他 App 占用了该端口。请参阅Mac 上端口已被占用。
如何检查
查找占用端口 5000 的进程。
lsof -nP -iTCP:5000 -sTCP:LISTEN输出 COMMAND 列中出现
ControlCenter的行即表示隔空播放接收器。查找占用端口 7000 的进程。
lsof -nP -iTCP:7000 -sTCP:LISTEN
如何修复
最简单的办法是让开发服务器改用其他端口,例如 5001 或 8000。
要释放这些端口,请选取苹果菜单 >“系统设置”>“通用”>“隔空投送与接力”。较新版本中名为“隔空投送与连续互通”。
关闭“隔空播放接收器”。
在 macOS 12 中,该设置位于“系统偏好设置”>“共享”>“隔空播放接收器”。
再次运行 lsof,确认端口已空闲。
lsof -nP -iTCP:5000 -sTCP:LISTEN
常见问题
可以保持隔空播放接收器开启吗?
可以。让服务器改用其他端口即可。只有当 App 必须使用端口 5000 或 7000 时,才需要关闭隔空播放接收器。
为什么同一个服务器在 Linux 上能用端口 5000?
隔空播放接收器是 macOS 的功能,其他系统不会为它占用这个端口。
参考资料
- Apple 支持:Apple 软件产品所使用的 TCP 和 UDP 端口
- Apple 支持:在 Mac 上更改“隔空投送与连续互通”设置
- lsof(8),macOS 27.2 自带的 man 手册页
参考资料核查于 2026年10月29日。man 手册页为 macOS 自带版本;在“终端”中用 man <name> 打开。