C'est pourtant bien simple.
Ton serveur multithred doit posséder comme vous le disiez tout à l'heure un petit protocole afin de différencier le chat des commande de l'administrateur donc toi.
De plus lorsqu'une personne se connecte avec un nom à ton serveur multithread, celui-ci stocke le server fils dans une liste du serveur maitre genre :
/* Constructeur de la classe ServeurTCP */
public ServeurMain(int p, ThreadPasserelle pass) {
port = p;
this.passerelle = pass;
try {
service = new ServerSocket(p);
}
catch (NotSerializableException e) {
System.out.println("> SERVER : la classe a envoyer n'est pas sérialisable!" );
this.setLog("Serversocket failed port "+this.port, "error : " );
}
catch(IOException e) {
this.setLog("Serversocket failed port "+this.port, "error : " );
}
this.t = new Thread(this);
//this.threadLTM = new Thread(manager);
//this.threadLTM.start();
System.out.println("Création Manager" );
//time.start();
}
public void start() {
t.start();
}
public void stop() {
t.stop();
}
/* Méthode de lancement du Thread serveur TCP */
public void run() {
time.start();
while(true) {
try {
connexion = service.accept(); //System.out.println("> SERVER service : "+connexion+" - "+service.isBound());
if (connexion != null) {
this.thread_s = new Server(connexion, 0, false);
this.thread_s.start();
this.thread_s.addObserver(this);
this.listThreads.add(this.thread_s);
System.out.println("> SERVER : Nouveau client" );
this.passerelle.frame.jLabel3.setText("> SERVER : Nouveau client" );
}
}
catch(IOException e) {
System.out.println("> SERVER : l'acceptation de la socket cliente a échouée!" );
this.setLog("Accepted Client socket failed", "error : " );
this.setChanged();
this.notifyObservers(this);
}
}
}
.......
Après, lors de l'envoi d'un message, tu met un filtre de redirection tout simple (si privé alors destinataire contenu dans le coprs du message)