如何修复任意端口上的“监听 EACCES:权限被拒绝”

如何修复任意端口上的“监听 EACCES:权限被拒绝”

有没有人经历过类似这样的节点:

我正在运行Angular,我的 Windows 崩溃并重新启动,现在当我尝试时,ng serve我得到:

Error: listen EACCES: permission denied 127.0.0.1:4200
    at Server.setupListenHandle [as _listen2] (net.js:1253:19)
    at listenInCluster (net.js:1318:12)
    at GetAddrInfoReqWrap.doListen [as callback] (net.js:1451:7)
    at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:61:10)

我也试过ng serve --port 4201

结果相同。

注意:之前视窗重新启动后,我正在运行该应用程序WSL。之后,我尝试WSLPowershell

更新:这甚至发生在一个新项目中。

答案1

在我的情况下出现错误是因为使用的端口属于 Hyper-V 的保留端口。

当我重新启动计算机时,此端口范围会发生变化,因此有时会出现错误,有时则不会。

要检查 Windows 保留的端口,您可以使用(cmd/powershell):

netsh interface ipv4 show excludedportrange protocol=tcp

该问题描述如下:https://github.com/microsoft/WSL/issues/5514

常规解决方法(在评论 554587817 中):https://github.com/docker/for-win/issues/3171#issuecomment-554587817

快速解决方法:选择不属于保留范围的端口

答案2

一次 Windows 重启是不够的,我重启了两次,问题就解决了。

抱歉,我没有更技术性的信息。

除外: 1:尽量不要从 Windows 文件夹在 WSL 上进行开发。

答案3

感谢@fambrosi 找到这个帖子,https://github.com/docker/for-win/issues/3171#issuecomment-788808021。这是解决这个烦人的问题的命令。

net stop winnat
netsh int ipv4 set dynamic tcp start=49152 num=16384
netsh int ipv6 set dynamic tcp start=49152 num=16384
net start winnat

答案4

ng serve我在终端上尝试命令时也遇到了同样的问题。

an unhandled exception occurred: listen EACCES: permission denied 127.0.0.1:4200
see "C:\Users\MyUser\AppData\Local\Temp\ng-At4Tad\angular-errors.log" for further details.

解决方案:只需将命令修改为

ng serve --port 4401

相关内容