net网页同时监听 IPv4 + IPv6

我开启了localhost:5000的端口服务器 为什么 IPv4 地址 . . . . . . . . . . . . : 192.168.2.107 尽管我的ipv4是192.168. 但是访问192.168.:5000 无响应

public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                    webBuilder.UseUrls("http://[::]:5000");
                });

你现在的监听写法:

webBuilder.UseUrls("http://[::]:5000");

只绑定了 IPv6 通配符 ::,在 部分 Windows 版本或机器 上会导致 IPv4 地址 192.168.2.107:5000 无法访问(浏览器/手机直接超时)。


✅ 正确写法:同时监听 IPv4 + IPv6

UseUrls 改成下面任意一种即可:

方法 1:显式写两条

webBuilder.UseUrls("http://0.0.0.0:5000", "http://[::]:5000");

方法 2:简写一条(更推荐)

webBuilder.UseUrls("http://*:5000");   // Kestrel 会自动在 IPv4/IPv6 双栈监听

✅ 完整示例

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        .ConfigureWebHostDefaults(webBuilder =>
        {
            webBuilder.UseStartup<Startup>();
            webBuilder.UseUrls("http://*:5000");   // ← 关键改动
        });

🔍 验证

  1. 重新 dotnet run
  2. 打开命令行执行:
    netstat -ano | findstr 5000
    
    应看到:
    TCP    0.0.0.0:5000    0.0.0.0:0    LISTENING
    TCP    [::]:5000       [::]:0       LISTENING
    
  3. 在手机/局域网另一台电脑访问 http://192.168.2.107:5000,此时即可正常响应。

⚠️ 额外检查(如果仍不通)

  • 防火墙:确认已放行 TCP 5000(见上一回合的 PowerShell 命令)。
  • 路由器 AP 隔离:关闭或确认两台设备处于同一网段(192.168.2.x)。

按此修改即可解决 “IPv4 地址无法访问 5000 端口” 的问题。