解决报错“此端口已被占用”问题
在 Windows 系统使用一些软件的时候,经常会弹出“此端口已被占用”的报错,因而将这个问题在这里梳理一下。
这个问题一般来说有两个原因,一个是这个端口已经被某个应用使用,另一个原因是这个端口被系统保留了。
问题排查
首先,检查端口占用情况:
1 2
| # powershell netstat -ano | findstr "端口号"
|
如果有结果,就是被其他应用占用,会显示对应的 PID;否则的话,考虑是被系统保留了。
被其他应用占用
如果是被其他应用占用,直接 kill 就好:
被系统保留
造成系统保留端口的原因比较多,其中一个就是 hyper-v 虚拟机开启或者打开了 WSL2 的原因。
首先,查看系统的保留端口列表:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| # 查看系统默认端口占用访问 netsh int ipv4 show dynamicport tcp # 结果为: 协议 tcp 动态端口范围 --------------------------------- 启动端口 : 1024 端口数 : 13977
# 查看hyper-v启动后的保留端口范围 netsh interface ipv4 show excludedportrange protocol=tcp # 结果为: 协议 tcp 端口排除范围
开始端口 结束端口 ---------- -------- 1052 1151 1152 1251 1452 1551 1552 1651 1866 1965 3122 3221 3222 3321 3322 3421 3422 3521 3522 3621 3622 3721 3722 3821 5357 5357 14367 14466 14469 14568 50000 50059 *
|
如果使用的端口在上述列表中,则表明该端口是被保留了,解决办法如下:
设置保留端口确保不被占用
1 2 3 4 5 6 7 8
| # powershell / cmd 管理员权限 # start 起始端口 num 表示可用端口数 按自己的需求来 netsh int ipv4 set dynamicport tcp start=30000 num=16383
# 排除ipv4动态端口占用 startport 起始端口 numberofports 端口数 netsh int ipv4 add excludedportrange protocol=tcp startport=5080 numberofports=1
|
PS:
已经被占用的端口无法被改动,需要先杀掉对应的进程。
改变应用使用的端口
选择系统保留端口列表之外的端口使用。