Array index out of range?

OK, so I have a network script, everything works fine up to the point were a user joins a server, is asked for a password, then clicks connect. But when the user clicks connect i get and error Array index out of range. Here is the code:

var gameName:String = ""; 
var serverName:String = "";
var showTextField:boolean;
var showPassField:boolean;

private var connect:boolean;
private var canStart = false;
private var fontStyle : GUIStyle;
private var passWord:String = "";
private var passAtemp:String = "";
private var refreshing:boolean;
private var hostData:HostData[];

private var btnX:float;
private var btnY:float;
private var btnW:float;
private var btnH:float;

function Start(){
	btnX = Screen.width * 0.05;
	btnY = Screen.width * 0.05;
	btnW = Screen.width * 0.1;
	btnH = Screen.width * 0.1;
	}

function startServer(){
	Network.incomingPassword = passWord;
	Network.InitializeServer(6, 25000, !Network.HavePublicAddress);
	MasterServer.RegisterHost(gameName, serverName, "test game");
	}


function refreshHostList(){
	MasterServer.RequestHostList(gameName);
	refreshing = true;
}

function Update(){
	if(refreshing){
		if(MasterServer.PollHostList().Length > 0){	
			refreshing = false;
			Debug.Log(MasterServer.PollHostList().Length);
			hostData = MasterServer.PollHostList();
			}
		}
	}
function OnServerInitialized(){
	Application.LoadLevel("Lobby");
	Debug.Log("Server Initialized");
	
	
}
function OnMasterServerEvent(mse:MasterServerEvent){
	if(mse == MasterServerEvent.RegistrationSucceeded){
		Debug.Log("Registared Server");
		}
	}


function OnGUI(){
				
	if(showPassField){	
		GUI.Label(Rect (btnX * 6, btnY * 4, btnW * 2, btnH * 0.5), "Enter server Password: ");
		passAtemp = GUI.TextField(Rect (btnX * 8, btnY * 4, btnW * 2, btnH * 0.2), passAtemp, 12);
	if(GUI.Button(Rect(btnX * 7, btnY * 5, btnW, btnH * 0.5), "Connect")){
		connect = true;
		Debug.Log("Pass");
	}
}
	
	if(showTextField){
		GUI.Label(Rect (btnX * 6, btnY * 3, btnW * 2, btnH * 0.5), "Enter server name: ");
		serverName = GUI.TextField(Rect (btnX * 8, btnY * 3, btnW * 2, btnH * 0.2), serverName, 25);
		GUI.Label(Rect (btnX * 6, btnY * 4, btnW * 2, btnH * 0.5), "Enter server Password: ");
		passWord = GUI.TextField(Rect (btnX * 8, btnY * 4, btnW * 2, btnH * 0.2), passWord, 12);
		if(GUI.Button(Rect(btnX * 7, btnY * 5, btnW, btnH * 0.5), "Start")){
			startServer();
		}
		if(GUI.Button(Rect(btnX * 11, btnY * 5, btnW, btnH * 0.5), "Cancel")){
			Application.LoadLevel("Menu");
		}
	}
	
	if(!Network.isClient && !Network.isServer && !showTextField){
		
				if(GUI.Button(Rect(btnX, btnY, btnW, btnH), "Start Server")){
					showTextField = true;
					Destroy(GameObject.FindWithTag("Menu"));
					Debug.Log("Starting Server");
			}

	if(GUI.Button(Rect(btnX, btnY * 1.2 + btnH, btnW, btnH), "Refresh Host")){
			Debug.Log("Refreshing");
			refreshHostList();
		}
		
	if(GUI.Button(Rect(btnX, btnY * 3.4 + btnH, btnW, btnH), "Exit")){
			Application.Quit();
			}
			
	if(hostData){
		for(var i:int = 0; i<hostData.length; i++){
			if(GUI.Button(Rect(btnX * 2 + btnW, btnY*1.2 + (btnH * i), btnW * 3, btnH*.5),hostData_.gameName + "" +hostData*.connectedPlayers + "/6")){*_

* showPassField = true;*
* Destroy(GameObject.FindWithTag(“Menu”));*

* }*
* }*
* if(connect){*
_ Network.Connect(hostData*,passAtemp);
}
}
}
}*_

Your problem is that the

if(connect) {
      Network.Connect(hostData*, passAtemp);*

}
is outside the for next loop and so the value of i is guaranteed to be = to the length of the array and hence be an index out of range exception.
I can’t quite work out what you are trying to do with that line - but it’s guaranteed to fail at present.

You problem is the last statement. As the index of a for loop is increased on each turn it is hostData.length after the loop (else the loop wouldn’t be left). But as an array is zero based, you ask for an element outside the range.

Network.Connect(hostData[i-1], passAtemp);

should do the job.

The code in the end

for(var i:int = 0; i<hostData.length; i++){

needs to be

for(var i:int = 0; i<hostData.length - 1; i++){