Here the quick and dirty of multi-user chat bro.
Classes 
  * Main server socket -- creates client socket, client thread, and holds the maps of the chatter
  * Client thread Runnable - prompt you to welcome, broadcast message to chatters
Usage:
1) Complie and run it
2) run 'telnet localhost 5000'  at least 2 instances
I know there are problems but i think it's good enough for you to start. Let me know if you have more question.
	Code:
	package chat;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
/**
 * 
 * @author kamsky
 *
 */
public class ChatServer {
	private ServerSocket serverSocket;
	final int PORT = 5000;
	// holds the value of the chatters
	private Map<String, Client> clients = new HashMap<String, Client>();
	public ChatServer() {
		try {
			System.out.println("Starting server listening at port: " + PORT);
			serverSocket = new ServerSocket(PORT);
			Socket socket = null;
			while ((socket = serverSocket.accept()) != null) {
				// creates a thread for every client
				Client client = new Client(socket, clients);
				Thread clientThread = new Thread(client);
				clientThread.start();
			}
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (serverSocket != null) {
				try {
					serverSocket.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}
	public static void main(String[] args) {
		new ChatServer();
		Thread.currentThread().setDaemon(true);
	}
}
/**
 * 
 * @author kamsky
 *
 */
class Client implements Runnable {
	private Socket socket;
	private String name;
	private Map<String, Client> clients;
	/*
	 * Client's socket and the party
	 */
	public Client(Socket socket, Map<String, Client> clients) {
		this.socket = socket;
		this.clients = clients;
	}
	/**
	 * 
	 * @return
	 */
	public Socket getSocket() {
		return this.socket;
	}
	@Override
	public void run() {
		try {
			// welcome message or authentication
			System.out.println("Conneting " + socket);
			OutputStreamWriter writer;
			try {
				writer = new OutputStreamWriter(socket.getOutputStream());
				writer.write("Welcome! Enter your name: ");
				writer.flush();
				InputStreamReader isReader = new InputStreamReader(
						socket.getInputStream());
				BufferedReader reader = new BufferedReader(isReader);
				String name = reader.readLine();
				if (clients.get(name) == null) {
					this.name = name;
					clients.put(name, this);
					broadcastMessage(name + " has joined ");
				} else {
					writer.write("Name " + name
							+ " is taken. Please try again. Goodbye!");
					writer.flush();
					socket.close();
				}
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			// the exchanging of messages here
			InputStreamReader isReader = new InputStreamReader(
					socket.getInputStream());
			BufferedReader reader = new BufferedReader(isReader);
			String line = null;
			while ((line = reader.readLine()) != null) {
				// name : <message>
				broadcastMessage("<" + this.name + "> : " + line);
			}
		} catch (IOException e) {
			System.out.println("Connection closed ...");
		}
	}
	/**
	 *  simplified message 
	 */
	private void broadcastMessage(String message) throws IOException {
		System.out.println("Message: " + message);
		Set<String> clientsName = clients.keySet();
		for (String name : clientsName) {
			if (!this.name.equals(name)) {
				// get the reader
				Socket clientSocket = clients.get(name).getSocket();
				OutputStreamWriter writer = new OutputStreamWriter(
						clientSocket.getOutputStream());
				writer.write(message);
				writer.write("\r\n");
				writer.flush();
			}
		}
		// add prompt
		OutputStreamWriter writer = new OutputStreamWriter(
				socket.getOutputStream());
		writer.write(">>");
		writer.flush();
	}
}