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);
}
}
}