public void startServer(int port) throws CouldNotStartServerException {
		logger.fine("Starting server on port " + port + "...");
		synchronized(CONNECTION_LOCK) {
			if(isRunning) {
				logger.fine("Server is already started!");
				throw new ServerAlreadyStartedException();
			}
			try {
				socket = new DatagramSocket(port);
				receivePacketThread = new ReceivePacketThread(this, socket);
				receivePacketThread.start();
				timeoutThread = new ServerTimeoutThread(this, Server.CLIENT_TIMEOUT);
				timeoutThread.start();
				isRunning = true;
				logger.fine("Server is open and receiving connections!");
			} catch (SocketException e) {
				closeConnection();
				logger.fine("Could not start server due to SocketException: " + e.getMessage());
				throw new CouldNotOpenServerSocketException(e, port);
			}
		}
	}