import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; import java.util.Vector; class Serveur { int port = 8080; ServerSocket socketServeur; Vector idClients; Vector socketsClients; public Serveur() throws Exception { socketServeur = new ServerSocket(port); idClients = new Vector(); socketsClients = new Vector(); while (true) { Socket socketClient = socketServeur.accept(); new GestionnaireClient(socketClient); } } public static void main(String args[]) throws Exception { new Serveur(); } class GestionnaireClient extends Thread { Socket socket; BufferedReader entree; PrintWriter sortie; String id; String message; int position; int i; PrintWriter diffusion; public GestionnaireClient(Socket socketClient) throws Exception { socket = socketClient; socket.setKeepAlive(true); entree = new BufferedReader(new InputStreamReader(socket.getInputStream())); sortie = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()))); start(); } public void run() { try { while (true) { id = entree.readLine(); message = entree.readLine(); if (message.equals("NOUVEAU_CLIENT")) { if (idClients.contains(id)) { ///////////////////////////////////////////////////////////// System.out.println("Demande de connexion rejetée, le client '" + id + "' est déjà connecté."); ///////////////////////////////////////////////////////////// sortie.println("CLIENT_EXISTE_DEJA"); sortie.flush(); break; } else { ///////////////////////////////////////////////////////////// System.out.println("Demande de connexion acceptée, le client '" + id + "' est maintenant connecté."); ///////////////////////////////////////////////////////////// idClients.add(id); socketsClients.add(socket); sortie.println("CLIENT_ACCEPTE"); sortie.flush(); } } else if (message.equals("DECONNECTER_CLIENT")) { ///////////////////////////////////////////////////////////// System.out.println("Demande de déconnexion acceptée, le client '" + id + "' est maintenant déconnecté."); ///////////////////////////////////////////////////////////// position = idClients.indexOf(id); idClients.removeElementAt(position); socketsClients.removeElementAt(position); sortie.println("DECONNECTER_CLIENT"); sortie.flush(); break; } else if (message.equals("MESSAGE_CLIENT")) { message = entree.readLine(); message = id + " : " + message; ///////////////////////////////////////////////////////////// System.out.println(message); ///////////////////////////////////////////////////////////// for (i = 0; i < socketsClients.size(); i ++) { diffusion = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socketsClients.elementAt(i).getOutputStream()))); diffusion.println("DIFFUSION_MESSAGE"); diffusion.println(message); diffusion.flush(); diffusion.close(); } ///////////////////////////////////////////////////////////// System.out.println("Message diffusé à " + socketsClients.size() + " client(s)."); ///////////////////////////////////////////////////////////// } } entree.close(); sortie.close(); socket.close(); } catch(Exception exception) { exception.printStackTrace(); } } } }