public void run() {
		String messageFromClient; // das was der client einem gesendet hat.

		System.out.println("Chat Server Thread " + threadId
				+ " is running on TCP Port " + ChatServer.PORT_NUMBER
				+ " until BYE is recieved!");

		try {
			/*
			 * inputstream vom socket in inputreader und bufferedreader
			 * verpacken, weil es bequemer ist. Das Manuell angelieferte 
			 * Charset beim InputStreamReader sorgt dafür, dass der 
			 * InputStream sich bei speziellen zeichenfolgen mit sonderzeichen 
			 * ( z.B. "tü" oder "╚" ) nicht aufhängt. 
			 */
			inFromClient = new BufferedReader(new InputStreamReader(
					workingSocket.getInputStream(),REQUIRED_CHARSET));
			// Bei outToClient brauchen wir zumindest einen DataOutputStream
			outToClient = new DataOutputStream(workingSocket.getOutputStream());

			while (serviceRequested) {
				messageFromClient = readFromClient();

				if(messageFromClient != null) {
					String[] messageParts = messageFromClient.split(" "); // zwischen
					// den
					// teilen
					// der
					// nachricht
					// sind
					// leerzeichen
					String command = messageParts[0]; // der erste teil der message
					// zeigt an, ob es NEW, INFO
					// oder BYE ist.

					switch (command) {
					case ChatServer.INFO:
						doInfo();
						break;
					case ChatServer.BYE:
						doBye(messageParts);
						break;
					case ChatServer.NEW:
						doNew(messageParts, workingSocket.getInetAddress());
						break;
					default:
						sendError(UNKNOWN_MSG_TO_SRV);
					}
				}else{
					serviceRequested = false;
				}

			}

			workingSocket.close();


		} catch (IOException e) {
			e.printStackTrace(System.err);
		}
		ChatServer.activeThreads--;
	}