Mam do napisania serwer wielowątkowy, który obsługuje kilki klientów. Koncepcja jest taka: serwer ma ID klientów, które w jakiś sposób przekazuje klientowi podłączonemu. Następnie klient pisze do serwera jakieś wiadomości, w postaci: ID_klienta + wiadomość. Serwer utrzymuje jakąś mapę : <ID_klienta, ListArray<wiadomości_klienta>>.

Teraz pytnie: jak to zrealizować? Są jakieś kody w sieci? Cokolwiek napiszę, to nie działa tak, jakbym chciał - największy problem mam z przekazywaniem klientowi jego ID przydzielonego przer serwer ...

Jak uworzyć coś takiego, żeby mieć tablicę klientów, i wysyłać wszystkim wiadomości? Proszę o odpowiedź, doradzenie, bo coś mi to nie wychodzim napisałem to, co poniżej, korzystając z kodów w Internecie, ale chyba jednak to nie to...

public class Server {

    static Map<Integer, ArrayList<String>> mapa = new TreeMap<Integer, ArrayList<String>>();
    static int numer = 0;

    public static void main(String argv[]) throws IOException {

        ServerSocket ss = new ServerSocket(1234);
        System.out.println("starting...");

        while (true) {

            new ServerConnection(ss.accept(), Server.numer).start();
            Server.numer++;
            System.out.println("new connection");
        }
    }
}

class ServerConnection extends Thread {

    private DataOutputStream dout = null;
    private DataInputStream din = null;
    private int id;
    Socket client;
    Osoba o = null;

    ServerConnection(Socket client, int numer) throws SocketException {
        this.client = client;
        this.id = numer;
        setPriority(NORM_PRIORITY - 1);
    }

    @Override
    public void run() {

        boolean connection = true; // connection tester for current client

        try {
            while (connection) {


                dout = new DataOutputStream(client.getOutputStream());
                din = new DataInputStream(client.getInputStream());

                while (1 == 1) {
                    String wiadomosc = din.readUTF();
                    wiadomosc = wiadomosc.trim();

                    if (s.startsWith("EXIT")) {

                        Server.mapa.remove(new Integer(id));

                    } else if (s.startsWith("ADD")) {

                        Server.mapa.put(id, wiadomosc);

                    }
                }
            }

        } catch (IOException e) {
            System.out.println("I/O error " + e);
        }
    }
}