Problem Connecting To Master Server.

Over the past few weeks I have been working on a multiplayer game that uses Unity’s Master server. At first, My Script worked great and I was able to connect to servers on other computers without a problem. However today I have been trying to use the script but whenever I create a server on one computer and refresh the available servers on another, the unity editor returns the error “Failed to connect to master server at 67.225.180.24:23466” and the server I created does not show up on the server list.

Here is the code I use to connect to the master server:
#pragma strict

DontDestroyOnLoad(this);
var SentSpawnInfo : boolean = false;
var ServerPassword : boolean = false;
var AdditionalInfo : String = " Name"; 
var Testing : boolean = false;
var TestingIP : boolean = false;
var CreatingServer : boolean = false;
private var gameName = "none";
private var serverName : String = "ServerName";
private var serverTagline : String = "SRVR";
var serverPort = 25002;
var numberOfPlayers : int = 32;
private var playerCount: int = 0;
private var timeoutHostList = 0.0;
private var lastHostListRequest = -1000.0;
private var Username : String = "Username";
private var Password : String = "Password";
private var hostListRefreshTimeout = 10.0;
private var natCapable : ConnectionTesterStatus = ConnectionTesterStatus.Undetermined;
private var filterNATHosts = false;
private var Registering : boolean = false;
private var Timer : float = 0.0;
private var RegisterError : String = "";
private var GameWindowRect = Rect (Screen.width-300,0,300,100);
private var ChatWindowRect = Rect (0,Screen.height-200,300,200);
private var LoggedIn : boolean = false;
private var Text : String = "Hi";
private var Chat : String = "";
private var TestResults = "Detetcting NAT capabilities...";

function OnGUI (){
 GameWindowRect = GUILayout.Window (0, GameWindowRect, MakeGameWindow, "Hexic");
}

function Awake (){
 natCapable = Network.TestConnection();
 if (Network.HavePublicAddress())
  Debug.Log("This machine has a public IP address");
 else
  Debug.Log("This machine has a private IP address");
}

function MakeGameWindow (id : int){
 var hideNumberOfPlayers = !Network.isServer;
 if (!hideNumberOfPlayers){
  GUILayout.Label("Number of player's connected: " + playerCount);
 }
  GUILayout.Label(TestResults);
 if (GUILayout.Button ("Retest connection")){
  Debug.Log("Redoing connection test");
  TestingIP = false;
  Testing = true;
  natCapable = Network.TestConnection(true);
 }
 if (Network.peerType == NetworkPeerType.Disconnected){
  GUILayout.Space(10);
  if (CreatingServer == false){
   GUILayout.BeginHorizontal();
   if (GUILayout.Button ("Create Server")){
    CreatingServer = true;
   }
   GUILayout.EndHorizontal ();
  }
  else if (CreatingServer == true){
   ServerPassword = GUILayout.Toggle(ServerPassword, "Enable Password");
   if (ServerPassword){
    AdditionalInfo = " Name, Server Password";
    GUILayout.Space(0);
    gameName = GUILayout.TextArea (gameName);
    GUILayout.Space(0);
   }
   else {
    gameName = "none";
    AdditionalInfo = " Name";
   }
   serverName = GUILayout.TextArea (serverName);
   GUILayout.Space(0);
   serverPort = parseInt (GUILayout.TextArea (serverPort.ToString()));
   GUILayout.BeginHorizontal ();
   GUILayout.Label ("Enter Desired Server" + AdditionalInfo + " And Server Port (From 2000 - 30000)");
   GUILayout.EndHorizontal ();
   if (GUILayout.Button ("StartServer")){
    var useNat = !Network.HavePublicAddress();
    Network.InitializeServer(numberOfPlayers, serverPort, useNat);
    MasterServer.RegisterHost(gameName, serverName, serverTagline);
    CreatingServer = false;
   }
  }
  if (CreatingServer == false){
   GUILayout.BeginHorizontal ();
   gameName = GUILayout.TextArea (gameName);
   GUILayout.Label ("Enter Server Password");
   if (GUILayout.Button ("Refresh Available Servers") || Time.realtimeSinceStartup > lastHostListRequest + hostListRefreshTimeout){
    MasterServer.RequestHostList (gameName);
    lastHostListRequest = Time.realtimeSinceStartup;
   }
   GUILayout.EndHorizontal();
  }
  GUILayout.FlexibleSpace();
  GUILayout.Space(5);
  var data : HostData[] = MasterServer.PollHostList();
  for (var element in data){
   GUILayout.BeginHorizontal();
   if ( !(filterNATHosts)){
    var name = element.gameName + " " + element.connectedPlayers + " / " + element.playerLimit;
    GUILayout.Label(name);  
    GUILayout.Space(5);
    var hostInfo = "[";
    for (var host in element.ip){
     hostInfo = hostInfo + host + ":" + element.port + " ";
    }
    hostInfo = hostInfo + "]";
    GUILayout.Label(hostInfo);  
    GUILayout.Space(5);
    GUILayout.Label(element.comment);
    GUILayout.Space(5);
    GUILayout.FlexibleSpace();
    if (GUILayout.Button("Connect")){
     Network.Connect(element.ip, element.port);          
    }
   }
   GUILayout.EndHorizontal();  
  }
 }
 else {
  if (GUILayout.Button ("Disconnect")){
   Network.Disconnect();
   MasterServer.UnregisterHost();
   SentSpawnInfo = false;
  }
  GUILayout.BeginHorizontal ();
  if (LoggedIn){
   if (GUILayout.Button ("Logout")){
    LoggedIn = false;
   }
  }
  if (!LoggedIn){
   if (!Registering){
    Username = GUILayout.TextArea (Username);
    Password = GUILayout.PasswordField (Password, "*"[0], 25);
    if (GUILayout.Button ("Login")){
     var ValidLogin = PlayerPrefs.HasKey (Username + Password);
     if (ValidLogin == true){
      LoggedIn = true;
     } 
     else {
      GUILayout.Label ("Invalid Username And/Or Password");
     }
    }
    if (GUILayout.Button ("Register")){
     Registering = true;
    }
    if (RegisterError == "Congratulations "+ Username +" You Have Successfuly Registered!"){
     GUILayout.Label (RegisterError);
    }
   }
   else if (Registering){
    Username = GUILayout.TextArea (Username);
    Password = GUILayout.PasswordField (Password, "*"[0], 25);
    if (GUILayout.Button ("Finish")){
     ValidLogin = PlayerPrefs.HasKey (Username + Password);
     if (Username != "Desired Username" && Username != "Username" && Username != ""){
      if (Password != "Desired Password" && Password != "Password" && Password != ""){
       if (Username != Password){
        if (!ValidLogin){
         PlayerPrefs.SetString (Username + Password, Username + Password);
         RegisterError = "Congratulations "+ Username +
                         " You Have Successfuly Registered!";
         Registering = false;
        }
        else {
         RegisterError = "Username And Password Already Taken.";
        }
       }
       else {
        RegisterError = "Username And Password Can't Be The Same.";
       }
      }
      else { 
       RegisterError = "Password Can't Be *Desired Password*,"+
                       " *Password* Or Left Blank.";
      }
     }
     else { 
      RegisterError = "Username Can't Be *Desired Username*,"+
                      "*Username* Or Left Blank.";
     }
    }
    GUILayout.Label (RegisterError);
    if (GUILayout.Button ("Back")){
     Registering = false;
    }
   }
  }
  GUILayout.EndHorizontal ();
  GUILayout.FlexibleSpace();
 }
 GUI.DragWindow (Rect (0,0,1000,1000));
}

function Update (){
 if (!Testing){
  TestConnection();
 }
 if (Network.isClient && SentSpawnInfo == false && LoggedIn == true){
  GameObject.Find ("Spawner").SendMessage ("SpawnAPerson");
  SentSpawnInfo = true;
 }   
 else if (Network.isServer && SentSpawnInfo == false && LoggedIn == true){
  GameObject.Find ("Spawner").SendMessage ("SpawnAPerson");
  SentSpawnInfo = true;
 }  
}

function TestConnection(){
 var IPTestResult = Network.TestConnection();
 switch (IPTestResult) {
 case ConnectionTesterStatus.Error: 
  TestResults = "Error determining NAT funtionality";
  Testing = false;
  break;
 case ConnectionTesterStatus.Undetermined: 
  TestResults = "Undetermined NAT functionality";
  Testing = false;
  break;
 case ConnectionTesterStatus.PublicIPIsConnectable:
  TestResults = "Connectable IP address.";
  var useNat = false;
  Testing = false;
  break;
 case ConnectionTesterStatus.PublicIPPortBlocked:
  TestResults = "Unconnectable IP address->Starting " + 
                "server is impossible."; 
  useNat = false;
 if (!TestingIP) {
  IPTestResult = Network.TestConnectionNAT();
  TestingIP = true;
  var IPStatus = "Trying to bypass blocked IP";
  Timer = Time.time + 10;
 }
 else if (Time.time > Timer) {
  TestingIP = false;        
  useNat = true;
  Testing = false;
  break;
 }
 case ConnectionTesterStatus.PublicIPNoServerStarted:
  TestResults = "Server Uninitialized->Server must be active"+
                " to check accessibility. Retest when server started.";
  break;
 case ConnectionTesterStatus.LimitedNATPunchthroughPortRestricted:
  TestResults = "Limited NAT functionality->Can't connect to "+
                "all types of NAT servers. Hosting servers is "+
                "not advised.";
  useNat = true;
  Testing = false;
  break;
 case ConnectionTesterStatus.LimitedNATPunchthroughSymmetric:
  TestResults = "Limited NAT functionality->Can't connect to all "+
                "types of NAT servers. Hosting servers is not advised.";
  useNat = true;
  Testing = false;
  break;
   case ConnectionTesterStatus.NATpunchthroughFullCone:
    TestResults = "Full NAT functionality->Full Server & Client "+
                  "Connectability.";
    useNat = true;
    Testing = false;
    break;
    default: 
     TestResults = "Error in test, got " + IPTestResult;
 }
 if (Testing == false){
  if (useNat){
   var shouldEnableNATMessage = "NAT enabling advised when starting server ";
  }
  else{
   shouldEnableNATMessage = "NAT unneeded";
   IPStatus = "Done testing";
  }
 }
}

function OnPlayerConnected(player: NetworkPlayer){
 playerCount += 1;
}

function OnPlayerDisconnected(player: NetworkPlayer){
 playerCount -= 1;
 Network.RemoveRPCs(player);
 Network.DestroyPlayerObjects(player);
}

Any help would be appreciated.

I’m wondering whether there’s a problem with the master server, I’m in exactly the same position - scripts worked fine up until last night and now I’m getting master server errors.

The Unity master server is ment for testing only. It’s not forbidden to use it in your final game (afaik), but it’s not very reliable and has no uptime guaranty.

Just host your own master server and most problems are gone :wink:

Please no further complains that the master server doesn’t work. It’s not Unity’s responsibility to provide a lobby for your game.