public Server(int port) throws Exception
	{
		//setup JFrame
		super("Server");
		initGui();
		
		//Run Server
		printMessage("Server Starting...");
		serverSocket = new ServerSocket(port);
		printMessage("Server Online");
		//this loop waits for a connection attempt
		while(true) {
			socket = serverSocket.accept();
			printMessage("Connection from: "+ socket.getInetAddress());
			//upon receiving connection request, finds first available user id
			//and sets up an instance of user in that slot
			for (int i = 0; i < MAX_USERS; i++)
			{
				printMessage("Attempting to assign User["+i+"]");
				out = new DataOutputStream(socket.getOutputStream());
				in = new DataInputStream(socket.getInputStream());
				if (user[i] == null)
				{
					printMessage("Connection Assigned to User["+i+"]");
					//generates new users base stats
					int[] stats = new int[3];
					switch(Math.abs(random.nextInt()) % 3) {
					case 0:
						stats[0] = 10;
						break;
					case 1:
						stats[1] = 10;
						break;
					default:
						stats[2] = 10;
					}
					user[i] = new Users(out, in, user, this, i, stats);
					/* Users are threads that run simultaneously with the main thread.
					 * While the main thread listens for connection requests, User threads
					 * handle communication with clients */
					Thread thread = new Thread(user[i]);
					thread.start();
					break;
				}
			}
		}
	}