最近在编写和运行程序时,偶尔会遇到端口无法使用的问题,显示的是没有权限绑定端口,或者端口已经被占用。本文将介绍几种解决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=端口数量