last update
2026-02-05 15:38

解决Windows端口占用问题

最近在编写和运行程序时,偶尔会遇到端口无法使用的问题,显示的是没有权限绑定端口,或者端口已经被占用。本文将介绍几种解决Windows端口占用问题的方法。

端口占用问题

遇到端口相关的问题,第一肯定是要查询当前端口的使用情况。在Windows系统中,可以通过以下命令来查看端口占用情况:

netstat -ano | findstr :端口号

其中,端口号替换为你想要查询的具体端口号。执行该命令后,会显示占用该端口的进程ID(PID)。

然后你可以在任务管理器中找到对应的进程,或者使用以下命令直接查看进程信息:

tasklist /FI "PID eq 进程ID"

结束占用端口的进程即可。

绑定失败问题

我遇到的就是此类问题,我借助AI,尝试了各种方法,都没有查询 到端口被占用的信息,最后发现是因为权限问题导致的绑定失败。

问题分析:

端口没有被占用,而是被保留了,无法被绑定和使用。

为什么会被保留?有一些软件可能会预留一些端口用于自身的功能,比如WSL2、Hyper-V、docker、某些安全软件、VPN软件等,它们可能 会使用 WinNAT 来管理网络连接,从而保留了一些端口。

解决方法

查询端口保留信息:

netsh int ipv4 show excludedportrange protocol=tcp

释放端口保留:

net stop winnat # 停止 WinNAT 服务

重新尝试绑定端口:

net start winnat # 启动 WinNAT 服务

当遇到这类问题时,停止并重新启动 winnat 服务,通常可以解决端口被保留的问题,从而成功绑定端口。

Important

以上命令必须在管理员权限的 PowerShell 或命令提示符中运行。

配置保留端口

我的端口冲突主要是因为前端Angular会使用4200端口,在之前是没有遇到的,我不确定是哪个应用程序预留了这个端口。有没有什么办法,让系统不去保留这些端口呢?

如果能配置保留端口,不与我们的应用冲突,这样就能避免端口绑定问题,也不需要每次重新启动 winnat 服务,影响其他应用。

可以通过以下命令来配置保留端口范围:

netsh int ipv4 add excludedportrange protocol=tcp startport=起始端口 numberofports=端口数量