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
相关产品推荐
相关产品推荐

