最近用 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

完成后重启。