/* **** Chat multiclient - M1I 2008 ***** * Client.java * */ // Packages à inclure import java.net.*; import java.io.*; public class Client implements Runnable { // Déclaration des attributs de la classe private int port ; private String host; private InetAddress inetAddress ; Thread t ; Socket s ; String login ; // Déclaration des méthodes /** Constructeur de la classe Client */ public Client (/*int port*/) //throws IOException { //port=getPort(); //s = new Socket (host,port); } /** Méthode déclenchée après appel de 't.start()', son rôle consiste à lire et afficher les messages envoyés par le serveur*/ //Il s'agit principalement des messages envoyés par les autres utilisateurs (clients) */ public void run() { try { while(true) { // 1. Récupérer le flux d'entrée de la socket s (méthode getInputStream() de la classe Socket) InputStream is = s.getInputStream (); ObjectInputStream ois = new ObjectInputStream (is); //obj = (Object) msg ; // 2. Lire le message envoyé par le serveur (méthode bloquante, par exemple : readObject()) Object obj = ois.readObject(); // 3. Convertir l'objet ('Object') reçu en une chaine de caractères ('String') String msg = (String) obj; // 4. Afficher la chaine de caractères System.out.println(msg); } } catch(Exception e) { System.out.println(e); } } /** Méthode permettant de lire une chaine de caractères depuis la ligne de commandes */ public String readMessage()throws IOException { String s=""; char c; while ((c=(char)System.in.read())!='\n') s=s+c; return s; } /** Méthode permettant de se connecter au serveur, de lire les chaines de caractères depuis une ligne de commandes et de les envoyer au serveur. La chaine 'Bye' doit mettre fin à la connexion*/ public void launch() { try { String msg; // 1. Créer la socket System.out.println("Connexion au serveur..."); s = new Socket(getInetAddress(),getPort()); // 2. Lancer le Thread (méthode 'start') permettant de recevoir les réponses du serveur t = new Thread(this); t.start(); OutputStream os ; ObjectOutputStream oos ; os = s.getOutputStream(); oos = new ObjectOutputStream(os); oos.writeObject(login); // 3. Récupérer le flux de sortie de la socket (méthode getOutputStream() de la classe Socket) do { //OutputStream os = s.getOutputStream(); //ObjectOutputStream oos = new ObjectOutputStream(os); //String msg = "Message du Client"; msg=Lire.S(); System.out.println("Réception des messages en cours... \n"); //Object obj=(Object) msg; // 4. Ecrire le message sur le flux de sortie de la socket (méthode writeObject()); oos.writeObject(msg); } // 5. Mettre fin à la connexion si le message envoyé est 'Bye' while(!msg.equals("Bye")); s.close(); System.out.println("Vous êtes deconnecté du serveur"); } catch(IOException e) { System.out.println("Erreur de sérialisation "+e); } } /** Méthode permettant d'introduire le numéro de port surveillé par le serveur */ public void setPort(int p) { if(p >0) { port=p; } } /** Méthode permettant de retourner le numéro de port du serveur */ public int getPort() { return port; } /** Méthode permettant de retourner l'adresse IP du serveur */ public InetAddress getInetAddress() { return this.inetAddress;//this->pour une variable globale qui aurait le même nom que le paramètre (ici on peut ne pas le mettre) } /** Méthode permettant d'introduire le nom ou l'IP du serveur * @throws UnknownHostException */ public void setInetAddress (String machineName/*InetAddress inetAddress*/) throws UnknownHostException { // 'if(inetAddress!='NULL') // { try { inetAddress=InetAddress.getByName(machineName); } catch(Exception e) { } //inetAddress=InetAddress.getLocalHost(); //récupérer l'adresse IP de la machine // } } /** Méthode permettant d'introduire le login de l'utilisateur */ public void getLogin() throws IOException { System.out.print("Entrer votre login SVP : "); this.login=readMessage(); } public void setLogin(String _login){ this.login=_login; } ////////////////////////////////////////////////////////////////////////////////////////////// // Méthode principale : 'main' // // Le programme prendra 2 paramètres : une adresse ou un nom de serveur, un numéro de port. // ////////////////////////////////////////////////////////////////////////////////////////////// public static void main(String[] arg) throws UnknownHostException, IOException { Client em = new Client(); em.setInetAddress("localhost"); em.setPort(9999); em.getLogin(); em.launch(); } }