Search Unity

  1. Welcome to the Unity Forums! Please take the time to read our Code of Conduct to familiarize yourself with the forum rules and how to post constructively.
  2. Dismiss Notice

Failed to connect to server from Unity.Netcode.Transports.UTP.UnityTransport:

Discussion in 'Netcode for GameObjects' started by soemyatmyat, Dec 16, 2022.

  1. soemyatmyat

    soemyatmyat

    Joined:
    Sep 20, 2022
    Posts:
    7
    Hello!

    I'm pretty new to Unity. I'm developing a PvP game, using Netcode for GameObjects and Relay Service for connection.

    Following the documentation https://docs.unity.com/relay/relay-and-ngo.html, I am able to get the Allocation from Relay Service and have my Host started.
    Code (CSharp):
    1.  
    2.  
    3. await UnityServices.InitializeAsync(); //Initialize the Unity Service Engine
    4.             if (!AuthenticationService.Instance.IsSignedIn){ //If not already logged, log the user in
    5.                 await AuthenticationService.Instance.SignInAnonymouslyAsync();
    6.             }
    7.  
    8. Allocation allocation = await Unity.Services.Relay.RelayService.Instance.CreateAllocationAsync(2);
    9.  
    10. string joinCode = await Unity.Services.Relay.RelayService.Instance.GetJoinCodeAsync(allocation.AllocationId); // display it to the user later
    11.  
    12. // Retrieve the Unity transport used by the NetworkManager
    13.         UnityTransport transport = NetworkManager.Singleton.gameObject.GetComponent<UnityTransport>();
    14.  
    15. RelayServerEndpoint relayServer = null;
    16.         foreach (RelayServerEndpoint endPoint in allocation.ServerEndpoints) {
    17.             if (endPoint.ConnectionType == "dtls") {
    18.                 relayServer = endPoint;
    19.             }
    20.         }
    21.  
    22. transport.SetRelayServerData(relayServer.Host, (ushort) relayServer.Port, allocation.AllocationIdBytes, allocation.Key, allocation.ConnectionData);
    23.  
    24. NetworkManager.Singleton.StartHost();
    25.  
    26.  
    From the client side, I attempt to connect to the host using join code. I am able to retrieve the JoinAllocation and have my Client started with below code.
    Code (CSharp):
    1. await UnityServices.InitializeAsync();
    2. if (!AuthenticationService.Instance.IsSignedIn){
    3.                 //If not already logged, log the user in
    4.                 await AuthenticationService.Instance.SignInAnonymouslyAsync();
    5.             }
    6. JoinAllocation allocation = await Unity.Services.Relay.RelayService.Instance.JoinAllocationAsync(joinCode);
    7.  
    8. UnityTransport transport = NetworkManager.Singleton.gameObject.GetComponent<UnityTransport>();
    9.  
    10. RelayServerEndpoint relayServer = null;
    11.         foreach (RelayServerEndpoint endPoint in allocation.ServerEndpoints) {
    12.             if (endPoint.ConnectionType == "dtls") {
    13.                 relayServer = endPoint;
    14.             }
    15.         }
    16.  
    17. transport.SetRelayServerData(relayServer.Host, (ushort) relayServer.Port, allocation.AllocationIdBytes, allocation.Key, allocation.ConnectionData, allocation.HostConnectionData);
    18.  
    19. NetworkManager.Singleton.StartClient();

    But, the host is not getting the client connected. After a while, the client throws an error messag...

    Failed to connect to server.
    UnityEngine.Debug:LogError (object)
    Unity.Netcode.Transports.UTP.UnityTransport: ProcessEvent () (at Library/PackageCache/com.unity.netcode.gameobjects@1.2.0/Runtime/Transports/UTP/UnityTransport.cs:828)
    Unity.Netcode.Transports.UTP.UnityTransport: Update () (at Library/PackageCache/com.unity.netcode.gameobjects@1.2.0/Runtime/Transports/UTP/UnityTransport.cs:877)

    Does anybody have any idea what went wrong please? I am running the host from application and client from Unity Editor on the same network.
     
  2. simon-lemay-unity

    simon-lemay-unity

    Unity Technologies

    Joined:
    Jul 19, 2021
    Posts:
    359
    Your calls to
    SetRelayServerData
    should set the optional
    isSecure
    parameter to true to match the endpoint you are using (DTLS). I'd recommend using the new API that builds a
    RelayServerData
    directly from the allocation to avoid these kinds of gotchas. The documentation was updated recently to cover this.
     
  3. soemyatmyat

    soemyatmyat

    Joined:
    Sep 20, 2022
    Posts:
    7
    Thanks Simon!