0.有时候在本地启用一个服务比如MySQL服务,或者在启用IDEA的调试的时候,或者在本地启用一个监听端口的时候可能会出现监听失败的情况,经过查找之后会发现并没有应用占用相应的端口。
1.经过查找发现其实是在启用了Hyper-V之后系统会保留一些端口,这些端口如果包含了你应用要使用的端口就会出现冲突。
2.使用netsh interface ipv4 show excludedportrange protocol=tcp
命令可以查看当前保留的端口范围。结果如图所示:
3.在上述端口范围中一般都可以看到你要使用的端口,比如我这里是2516和2517
4.解决方法:
- 0.修改端口保留返回,手动保留你需要的端口。
netsh int ipv4 add excludedportrange protocol=tcp startport=2516 numberofports=4
,不过这个方法需要在当前端口没有被Hyper-V保留,并且没有被任何程序占用的情况下使用才可以。 - 1.重启电脑或者重启Windows Nat Driver (
net stop winnat
和net start winnat
)不推荐,因为重启后端口保留范围确定不了。重启后有可能还在保留范围内。 - 2.修改应用程序监听的端口,这个也是临时的方法,不过有时候可能监听端口无法修改,而且修改之后也可能还会被占用
- 3.修改动态端口范围,可以先使用
netsh int ipv4 show dynamicport tcp
查看当前动态端口返回:
结果表示从1024一共13977个端口为动态端口,也就是说1024~15001为动态端口
使用netsh int ipv4 set dynamicport tcp start=3000 num=18000
修改端口范围为3000~21000作为动态端口,这样Hyper-V在选用保留端口的时候就只会在这个范围内选取了。
不过这个方法也不是特别的推荐,因为过小的动态端口可能导致使得系统在分配端口的时候出现资源不足的问题。当然过大的范围一般没有什么大问题,可能会出现端口扫描更容易被扫描到的问题。