You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Hamachi搭建.NET Core 3.1 SignalR服务器及替代方案咨询

问题描述

本人首次接触网络编程,使用C#、Visual Studio开发一款小型手游。因租赁服务器成本过高,且希望在贴近真实环境的条件下调试游戏,但网络服务商不允许端口映射,无法将本机作为公网服务器。尝试通过Hamachi局域网配置.NET Core 3.1 SignalR服务器,指定Hamachi IP后服务器可正常启动,但客户端无法连接。现咨询:

  1. 是否可通过Hamachi搭建该网络连接?
  2. 另有哪些可在本机运行服务器的替代方案?

附相关代码配置:

Startup.cs

using Microsoft.AspNetCore.Builder;using Microsoft.AspNetCore.Hosting;using Microsoft.AspNetCore.HttpsPolicy;using Microsoft.Extensions.Configuration;using Microsoft.Extensions.DependencyInjection;using Microsoft.Extensions.Hosting;using Microsoft.Extensions.Options;using SignalRtest.Hubs;using System;using System.Collections.Generic;using System.Linq;using System.Threading.Tasks;

namespace SignalRtest
{
    public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        public IConfiguration Configuration { get; }
       
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddControllersWithViews();
            services.AddSignalR();
        }
     
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseExceptionHandler("/Home/Error");
               
                app.UseHsts();
            }
           // app.UseCors("CorsPolicy");
            app.UseHttpsRedirection();
            app.UseStaticFiles();

            app.UseRouting();

            app.UseAuthorization();
          //  app.MapHub<MyHubs>("/myhubs");
           

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllerRoute(
                    name: "default",
                    pattern: "{controller=Home}/{action=Index}/{id?}");

                endpoints.MapHub<myhubs>("/myhubs");
                
            });
}
}
}

launchSettings.json

我们尝试指定本机及Hamachi网络IP,也试过不同端口。

{
  "iisSettings": {
    "windowsAuthentication": false,
    "anonymousAuthentication": true,
    "iisExpress": {
      "applicationUrl": "http://localhost:52131",
      "sslPort": 44378
    }
  },
  "profiles": {
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    },
    "SignalRtest": {
      "commandName": "Project",
      "launchBrowser": true,
      "applicationUrl": "https://25.35.XXX.XX:12975;http://25.35.XXX.XX:32976",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    }
  }
}

CLIENT

public void HUB_CONNECTED()
{
    HubConnections = new HubConnectionBuilder()
        .WithUrl("https://25.35.XXX.XX:12975/myhubs")
        .WithAutomaticReconnect()
        .Build();
}

注:使用默认localhost地址(https://localhost:5001;http://localhost:5000)时可正常工作,需实现跨设备测试。


解答

一、Hamachi可以搭建该网络连接,连接失败大概率是以下问题导致:

  1. CORS未配置:代码中注释掉了app.UseCors("CorsPolicy"),跨设备连接时客户端会触发CORS校验,必须配置允许跨域请求。
    修复步骤:

    • 在ConfigureServices中添加CORS配置:
      services.AddCors(options =>
      {
          options.AddPolicy("CorsPolicy", builder =>
          {
              builder.AllowAnyHeader()
                     .AllowAnyMethod()
                     .AllowCredentials()
                     .WithOrigins("*"); // 开发环境可先用*,生产环境指定具体客户端地址
          });
      });
      
    • 在Configure中启用CORS,放在UseRouting之前:
      app.UseCors("CorsPolicy");
      
  2. HTTPS证书不被信任:使用HTTPS连接时,Hamachi环境下的自签名证书可能不被客户端认可。
    修复方式:

    • 开发环境可暂时改用HTTP连接,将客户端的WithUrl改为http://25.35.XXX.XX:32976/myhubs,确保服务器HTTP端口正常监听。
    • 若必须用HTTPS,可在客户端添加证书忽略逻辑(仅开发环境使用):
      .WithUrl("https://25.35.XXX.XX:12975/myhubs", options =>
      {
          options.HttpMessageHandlerFactory = _ => new HttpClientHandler
          {
              ServerCertificateCustomValidationCallback = HttpClientHandler.DangerousAcceptAnyServerCertificateValidator
          };
      })
      
  3. 防火墙拦截端口:本机防火墙可能阻止了Hamachi端口的入站请求,需在Windows防火墙中添加规则,允许12975和32976端口的TCP流量。

  4. Hamachi网络状态异常:确保客户端设备和服务器设备都已加入同一Hamachi网络,且Hamachi客户端显示为绿色在线状态,能互相ping通对方的Hamachi IP。

二、本机运行服务器的替代方案

  • 同一局域网热点共享:用电脑或手机开启热点,将服务器设备和测试设备连接到同一热点,直接使用服务器的局域网IP(如192.168.x.x)连接,适合近距离调试。
  • 免费内网穿透工具:使用类似Ngrok的工具,将本机端口映射到公网地址,无需端口映射权限,客户端通过工具生成的公网URL连接服务器,适合跨地域调试。
  • 其他虚拟局域网工具:ZeroTier、Tailscale等工具和Hamachi功能类似,免费额度足够小型开发调试使用,可更换工具排查兼容性问题。
  • 云服务器免费试用:国内主流云服务商提供新用户免费试用云服务器,时长1个月到1年不等,可用来部署测试服务器,贴近真实公网环境。

内容的提问来源于stack exchange,提问作者Sky Keeper

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 07:55:56