/* **** Chat multiclient - M1I 2008 ***** * Server.java * */ // Packages à inclure import java.net.*; import java.io.*; import java.util.Vector; public class Server implements Runnable { // Déclaration des attributs de la classe private int listenPort ; private InetAddress inetAddress ; private ServerSocket ss; private Thread _t; Socket _s ; private String[] logins = new String[20]; Vector clients = new Vector(); int nbClients = 0; // Déclaration des méthodes /** Constructeur de la classe Serveur */ public Server() { } /** Méthode permettant d'introduire le numéro de port du serveur */ private void setListenPort(int _listenPort) { this.listenPort = _listenPort ; } /** Méthode permettant de retourner le numéro de port du serveur */ public int getPort() { return listenPort ; } /** Méthode permettant de lancer le serveur * @throws IOException */ private void launch() throws IOException { // 1. Créer la socket du serveur : ServerSocket(int _port) //int _port = getPort() ; ss = new ServerSocket (listenPort); System.out.println("Serveur en execution..."); try { while(true) { // 2. Appeler la méthode 'accept()' du ServerSocket créée en 1. _s = ss.accept (); // 3. Ajouter la nouvelle connexion dans un vecteur (ou tableau) contenant toutes les connexions nbClients++ ; clients.addElement(_s) ; // ou clients.add(_s) // 4. Appeler la méthode _t.start() permettant de lancer run() (run() : permet de traiter les connexions des clients) _t = new Thread(this); _t.start(); } } catch(Exception e) { System.out.println("Erreur socket ...."+e); System.exit(0); } } public void run() { try { // 1. Retirer la dernière socket du vecteur Socket sck=(Socket)clients.lastElement(); // 2. Récupérer le flux d'entrée de la socket (méthode getInputStream() de la classe Socket) InputStream is = sck.getInputStream (); ObjectInputStream ois = new ObjectInputStream (is); Object obj; // 3. Lire le premier message envoyé par le client (méthode bloquante, par exemple : readObject()), il s'agit du login de l'utilisateur obj = ois.readObject(); logins[nbClients-1]=(String) obj; // 4. Imprimer le message System.out.println(logins[nbClients-1]); // 5. Lire le message envoyé par le client (méthode bloquante) do { //InputStream is2 = sck.getInputStream (); //ObjectInputStream ois2 = new ObjectInputStream (is2); Object obj2 = ois.readObject(); String msg=(String) obj2; // 6. Imprimer le message System.out.println(msg); ois.close(); //System.out.println("Salut ca va ??); // 7. Envoyer le message lu à tous les autres clients, le précéder par le login de l'utilisateur concerné // Utilisation de getOutputStream() et writeObject. msg = logins[nbClients-1] + " : " + msg; System.out.println(nbClients); for (int i=0 ; i