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

Unity中使用Mirror框架客户端与服务器连接失败问题求助

Unity Mirror框架客户端无法连接服务器问题

服务器端

场景内有一个GameObject,挂载了Telepathy Transport组件和继承自Mirror.NetworkManager的ArenaManager组件,核心代码如下:

public override void Start()
{
    base.Start();

    NetworkServer.RegisterHandler<AuthenticateMessage>( OnAuthenticate, false );
    NetworkServer.RegisterHandler<MatchConfirmedMessage>( OnMatchConfirm, false );
    NetworkServer.RegisterHandler<PlayerLoadedMessage>( OnPlayerLoaded, false );
    NetworkServer.RegisterHandler<PlayerPreppedMessage>( OnPlayerPrepped, false );
    NetworkServer.RegisterHandler<PlayerUnpreppedMessage>( OnPlayerUnprepped, false );
    NetworkServer.RegisterHandler<PlayerLoadoutMessage>( OnPlayerLoadout, false );
    NetworkServer.RegisterHandler<PlayerStatusMessage>( OnPlayerStatus, false );
    NetworkServer.RegisterHandler<PlayerEventMessage>( OnPlayerEvent, false );
    NetworkServer.RegisterHandler<PlayerTauntMessage>( OnPlayerTaunt, false );
    NetworkServer.RegisterHandler<PlayerReconnectingMessage>( OnPlayerReconnecting, false );
    NetworkServer.RegisterHandler<RequestRematchMessage>( OnRequestRematch, false );

    #if RUN_LOCALLY
    GetComponent<TelepathyTransport>().port = (ushort)m_Port;
    NetworkServer.Listen( 9999 );

    StartCoroutine( CheckIP() );        // 输出外网IP用于检查
    StartCoroutine( GatherTitleData() );    // 收集游戏相关数据
    #else
    // PlayFab相关逻辑,用于获取远程服务器IP
    #endif
}

public override void OnServerConnect( NetworkConnectionToClient nConn )
{
    base.OnServerConnect( nConn );

    // 服务器端该方法从未被触发
}

当前问题:服务器端的OnServerConnect方法完全没有被触发。

客户端

客户端配置与服务器端一致,同样挂载Telepathy Transport组件和ArenaManager组件,使用服务器所在机器的外网IP发起连接,已完成端口转发(未转发前连接直接被拒绝,现在连接请求会挂起直至超时断开),核心代码如下:

void ConnectClient( string address, int port )
{
    NetworkClient.OnConnectedEvent = OnClientConnect;
    NetworkClient.RegisterHandler<MatchFoundMessage>( OnMatchFound, false );
    NetworkClient.RegisterHandler<MatchReadyMessage>( OnMatchReady, false );
    NetworkClient.RegisterHandler<PrepStatusMessage>( OnPrepStatus, false );
    NetworkClient.RegisterHandler<PlayerLoadoutMessage>( OnPlayerLoadout, false );
    NetworkClient.RegisterHandler<StartBattleMessage>( OnStartBattle, false );
    NetworkClient.RegisterHandler<OpponentStatusMessage>( OnOpponentStatus, false );
    NetworkClient.RegisterHandler<OpponentEventMessage>( OnOpponentEvent, false );
    NetworkClient.RegisterHandler<BattleRefreshMessage>( OnBattleRefresh, false );
    NetworkClient.RegisterHandler<EndBattleMessage>( OnEndBattle, false );
    NetworkClient.RegisterHandler<OpponentLeftMessage>( OnOpponentLeft, false );
    NetworkClient.RegisterHandler<OpponentRematchMessage>( OnOpponentWantsRematch, false );
    NetworkClient.RegisterHandler<PlayerTauntMessage>( OnOpponentTaunt, false );
    NetworkClient.OnDisconnectedEvent = OnClientDisconnect;
    NetworkClient.OnErrorEvent = OnClientError;

    GetComponent<TelepathyTransport>().Port = ( ushort )port;
    NetworkClient.Connect( address );
}

public override void OnClientConnect()
{
    base.OnClientConnect();

    // 该方法从未被触发,Connect调用会一直挂起直至超时断开
}

当前问题:客户端的OnClientConnect方法从未触发,连接请求挂起后超时断开。

已完成服务器主机的端口转发配置,使用了正确的外网IP和硬编码端口,但仍无法成功建立连接,因缺乏网络开发经验,寻求问题排查及解决帮助。


内容的提问来源于stack exchange,提问作者Matt Orlando

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 11:35:05