ERROR: [WinError 10013] 以一种访问权限不允许的方式做了一个访问套接字的尝试。
·
WinError 10013 错误解决(Python)
一、错误描述
在 Windows 操作系统上运行 Python 网络相关程序(如 Web 服务、Socket 服务、FastAPI、Flask、Uvicorn、Django 等)时,程序启动失败,控制台输出如下错误信息:
ERROR: [WinError 10013] 以一种访问权限不允许的方式做了一个访问套接字的尝试。
该错误表明:
当前 Python 进程在尝试绑定或访问某个端口时,被操作系统拒绝,原因通常与端口权限、端口占用或系统安全策略有关。
需要注意的是PC端微信进行视频语音通话时会占用一个8000端口,同时在MacOs系统下5000、7000端口都会被系统占用(隔空投送等功能)
二、常见触发场景
该错误通常出现在以下场景中:
- 使用 Uvicorn / FastAPI / Flask 启动 Web 服务
- 使用 socket 模块手动绑定端口
- 使用受系统限制的端口号
- 端口被其他进程或系统服务占用
- Windows 防火墙或安全软件拦截
示例(可能触发错误):
uvicorn main:app --host 0.0.0.0 --port 80
或:
socket.bind(("0.0.0.0", 80))
三、错误原因分析
原因 1:使用了系统受限端口(1–1023)
在 Windows 系统中,1–1023 端口属于系统保留端口,普通用户无权限绑定。
常见受限端口示例:
| 端口 | 说明 |
|---|---|
| 80 | HTTP |
| 443 | HTTPS |
| 21 | FTP |
| 22 | SSH |
原因 2:未使用管理员权限运行程序
即使端口本身可用,如果当前命令行窗口不是以管理员身份运行,也可能无法创建套接字。
原因 3:端口已被其他进程占用
端口可能已被以下服务占用:
- IIS
- Docker / Docker Desktop
- MySQL / Redis
- 其他 Python 服务
- WSL 或虚拟机服务
原因 4:Windows 防火墙或安全软件拦截
包括但不限于:
- Windows Defender 防火墙
- 第三方安全软件
- 企业级安全策略
四、解决方案(按推荐顺序)
方案一:更换为高位端口(推荐)
将端口修改为 1024 以上端口,例如:
8000
8080
5000
3000
示例:
uvicorn main:app --host 0.0.0.0 --port 8000
或代码中:
app.run(port=5000)
方案二:使用管理员权限运行命令行
- 右键 CMD 或 PowerShell
- 选择“以管理员身份运行”
- 重新执行 Python 程序
方案三:检查并释放端口占用
1. 查看端口占用情况
netstat -ano | findstr :8000
示例输出:
LISTENING 12345
其中 12345 为进程 PID。
2. 结束占用端口的进程
taskkill /PID 12345 /F
方案四:关闭或调整相关系统服务
IIS 服务
iisreset /stop
或通过以下路径关闭:
- 控制面板 → 程序 → 启用或关闭 Windows 功能
- 取消勾选 Internet Information Services
Docker 服务
- 检查容器端口映射情况
- 临时关闭 Docker Desktop 进行验证
方案五:配置 Windows 防火墙放行端口
- 控制面板 → Windows Defender 防火墙
- 高级设置 → 入站规则
- 新建规则 → 端口 → TCP
- 放行指定端口(如 8000)
五、典型应用场景修复示例
FastAPI + Uvicorn
错误示例:
uvicorn main:app --port 80
正确示例:
uvicorn main:app --port 8000
Flask
app.run(host="0.0.0.0", port=5000)
Socket 程序
s.bind(("127.0.0.1", 9000))
六、快速自检清单
- 是否使用了 1024 以上端口
- 是否以管理员权限运行
- 端口是否已被占用
- 防火墙是否阻止访问
七、总结
WinError 10013 的根本原因在于:
Windows 系统拒绝当前进程以当前权限绑定指定端口。
最有效的解决方式包括:
- 使用高位端口(如 8000、8080)
- 必要时以管理员权限运行程序
更多推荐
所有评论(0)