.NET调试模式下启动服务触发SocketException异常求助
解决.NET服务调试时SocketException的思路
你遇到的SocketException核心原因是端口被占用(从异常信息“Only one usage of each socket address (protocol/network address/port) is normally permitted”可判断),以下是具体排查和解决步骤:
检查端口占用情况
- Windows系统:打开命令提示符,执行命令
netstat -ano | findstr :<你的服务端口号>,找到占用端口的PID,然后在任务管理器中结束对应进程。 - Linux/macOS系统:执行命令
lsof -i :<你的服务端口号>,找到进程后用kill -9 <PID>终止进程。
- Windows系统:打开命令提示符,执行命令
确认服务端口配置
- 检查
appsettings.json中的Urls配置项,确认是否指定了已被占用的端口; - 查看
CreateWebHostBuilder方法内是否通过UseUrls硬编码了端口,是否存在重复绑定的情况。
- 检查
清理残留调试进程
- 在Visual Studio调试时,有时之前的服务进程未完全退出,打开任务管理器找到所有
dotnet.exe或你的服务进程,全部终止后重新启动调试。
- 在Visual Studio调试时,有时之前的服务进程未完全退出,打开任务管理器找到所有
临时更换端口测试
- 修改
appsettings.json中的端口号,或者在CreateWebHostBuilder中临时指定新端口,比如:CreateWebHostBuilder(args, null).UseUrls("http://localhost:5002").Build();
重新启动服务,若不再报错,说明原端口确实被占用。
- 修改
非Windows系统权限检查
- 如果是Linux/macOS环境,若服务使用了1024以下的端口,需要以root权限启动(执行
sudo dotnet run),或者更换为1024以上的端口。
- 如果是Linux/macOS环境,若服务使用了1024以下的端口,需要以root权限启动(执行
内容的提问来源于stack exchange,提问作者CrazySynthax
相关产品推荐
相关产品推荐

