.Net Core启动程序报错:以一种访问权限不允许的方式做了一个访问套接字的尝试
2024-01-26
问题
启动.net core程序报错:System .Net .Sockets .SocketException 10013 以一种访问权限不允许的方式做了一个访问套接字的尝试

一般是端口被占用或者指定端口在排除范围之内,对症下药,我们需要换个端口、处理端口占用问题或者把端口从排除范围中删除即可
一招制敌:重启计算机(不太建议),因为重启计算机后,端口排除排除范围会初始化,端口也可能没有被占用
如何解决
处理端口占用
首先我们在cmd输入以下命令,查看端口(54000)是否被占用
xxxxxxxxxxnetstat -ano | findstr 54000
如果端口被占用,则可以在任务管理器中的详细信息根据PID查到对应的程序,右键将其结束任务即可

检查端口排除范围
如果端口没有被占用,接下来我们要查看指定端口是否在端口排除范围之内(端口是否被排除),如下图我们发现端口54000被排除了
xxxxxxxxxxnetsh interface ipv4 show excludedportrange protocol=tcp
接下来我们只需要重启winnat,再查询端口是否被排除即可(是的,这里只需要重启winnat即可,不用手动删除排除范围也不用重启计算机)
如果端口还在排除范围的话就多重启winnat几次,或者手动删除排除范围即可
xxxxxxxxxx# 重启winnatnet stop winnatnet start winnatnetsh interface ipv4 show excludedportrange protocol=tcp
接着重新启动项目,成功运行

添加/删除端口排除范围
至于手动添加/删除端口排除范围,可以参照以下写法。不过我没有测试成功,先记个Todo吧
xxxxxxxxxxnet stop winnat# 添加端口排除范围,从5600开始往后10个端口netsh int ip add excludedportrange protocol=tcp numberofports=10 startport=5600net start winnatnetsh interface ipv4 show excludedportrange protocol=tcpnetsh int ip reset# 重启计算机
如下图,我重启计算机后,端口5600确实在排除范围内,但是没有生效,仍然可以使用端口5600

# 移除排除范围netsh int ip delete excludedportrange protocol=tcp numberofports=10 startport=56092# 重启计算机