最近用 IntelliJ IDEA 写 Tomcat Servlet 程序运行的时候,会提示端口占用问题,具体现象是显示1099端口占用,但是使用
netstat -aon | findstr :1099
查看时显示没有被占用。然后在 Google 搜索后都是端口被其它应用程序占用,结束进程就可以解决问题。最后机缘巧合,发现了 Hyper-V 会占用动态端口导致显示端口被占用,解决方法如下:
关闭 Hyper-V
方法 1、使用控制面板关闭
打开控制面板、程序和功能,点击左边的打开或关闭 Windows 功能,然后将红框标注出来的全部取消掉。

WSL 关闭后不会删除已经安装的 Linux 子系统,修改好后重新打开即可。完成后点击确定,然后按照提示重启。
方法 2、使用 Powershell 命令关闭
右键点击开始按钮,打开使用命令提示符打开 Windows Powershell,将
dism.exe /Online /Disable-Feature:Microsoft-Hyper-V
粘贴进去,然后回车,完成后重启电脑。
修改动态端口范围
方法 1:添加排除端口
netsh int ipv4 add excludedportrange protocol=tcp startport=需要添加的端口号 numberofports=1
netsh int ipv4 add excludedportrange protocol=udp startport=需要添加的端口号 numberofports=1
这两行命令是将需要使用的端口号添加进排除范围内,一次只能添加一个端口号。
修改好后,运行 netsh interface ipv4 show excludedportrange protocol=tcp
可以查看被排除在外的端口。
但是这样很麻烦,如果有多个需要使用的端口就要运行很多次,那么就需要方法 2。
方法 2:修改系统动态端口范围
netsh int ipv4 set dynamicport tcp start=49152 num=16383
netsh int ipv4 set dynamicport udp start=49152 num=16383
分别添加 TCP 和 UDP 从 49152 开始 16383 个端口用来给系统使用,避免 1080 这种常用调试的端口号被占用。当然开始的端口号和个数都可以自定义。修改好后运行 netsh int ipv4 show dynamicport tcp
可以查看系统会占用的动态端口范围,
重新开启 Hyper-V
如果是在控制面板中关闭的话,开启时重新勾选即可。使用 Powershell 的话运行下列命令
dism.exe /Online /Enable-Feature:Microsoft-Hyper-V /All
完成后重启。