Bonjour,

J'ai un exercices que je n'arrive pas à résoudre et j'aimerais bien que quelqu'un m'aide pour trouver une bonne solution. Et merci d'avance.

Pour ce petit projet (Chat en Intranet). J'ai 4 classes :
1- la classe Serveur
2- la classe ServeurThread
3- la classe Client
4- la classe ClientApplet

Et une petite page HTML : Discussion.HTML

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
import java.io.*;
import java.util.*;
import java.net.*;
 
public class Serveur {
    private ServerSocket ss;
    private Hashtable FluxClients = new Hashtable();
    public Serveur(int port){
        ecouter(port);
    }
    public void ecouter(int port){
        try{
        ss=new ServerSocket(port);
        System.out.println("On écoute sur" + ss);
            while(true)
                {
                 Socket s=ss.accept();
                 System.out.println("Connexion de :" + s);
                 DataOutputStream dout= new DataOutputStream (s.getOutputStream());
                 FluxClients.put(s,dout);
                 //new ServerThread(this,s);      
                }
        }catch(Exception ex){
        System.out.println("Erreur" + ex);
        }
    }
 
    Enumeration getFluxClients(){
        return FluxClients.elements();        
    }
 
    public void SendToAll(String msg){
        synchronized(FluxClients)
        {
        for(Enumeration e=getFluxClients();e.hasMoreElements();)
            {
            DataOutputStream dout=(DataOutputStream)e.nextElement();
            try {dout.writeUTF(msg);}
            catch(IOException ex)
                {
                System.out.println("Erreur de diffusion" + ex);}     
                }
        }            
    }
 
    public void supprimer(Socket s){
        synchronized(FluxClients){
        System.out.println("Deconnexion de" + s);
        FluxClients.remove(s);
        try{
            s.close();
        }
        catch(IOException ex){
            System.out.println("Erreur" + ex);
        }
    }}
 
    public static void main(String []args){
       try{ 
        int port=Integer.parseInt(args[0]);
        new Serveur(port);}
       catch(Exception ex){
       System.out.println("Erreur" + ex);   
       }
    }
 
}
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import java.io.*;
import java.net.*;
 
public class ServeurThread extends Thread{
    private Serveur serveur;
    private Socket s;
 
    public ServeurThread(Serveur svr,Socket skt){
        serveur=svr;
        s=skt;
        start();
    }
 
    public void run(){
        try{
 
            System.out.println("aaaaaaaa");
            DataInputStream din=new DataInputStream(s.getInputStream());
            while(true)
                {
 
 
                String msg = din.readUTF();
                System.out.println("Envoi de :" + msg);
                serveur.SendToAll(msg);
                }
           }
        catch(IOException ex)
        {
            System.out.println("Erreur réseau" + ex);
        }
        finally
        {
            serveur.supprimer(s);
        }
    }
 
}
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import java.net.*;
 
public class Client extends Panel implements Runnable{
    private TextField tf = new TextField();
    private TextArea ta = new TextArea();
    private Socket s;
    DataOutputStream dout;
    DataInputStream din;
 
    public Client(String host,int port){
        setLayout(new BorderLayout());
        add("North",tf);
        add("Center",ta);
        tf.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent ev)
            {
                //Traitermsg(tf.getText());
                Traitermsg(ev.getActionCommand());
            }
        });
        try{
            s=new Socket(host,port);
            din=new DataInputStream(s.getInputStream());
            dout=new DataOutputStream(s.getOutputStream());
            new Thread(this).start();
           }
        catch(Exception ex){
            System.out.println("Erreur" + ex);
        }
    }
 
    public void Traitermsg(String msg){
        try{
            dout.writeUTF(msg);
            tf.setText("");
           }
        catch(IOException ex){
            System.out.println("Erreur" + ex);
        }
    }
 
    public void run(){
        try{
            while(true){
                String msg = din.readUTF();
                ta.append(msg + "\n"); 
 
            }
           }
        catch(IOException e){
        System.out.println("Erreur" + e);
        }
 
    }
 
}
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
import java.awt.*;
import java.applet.*;
 
 
public class ClientApplet extends Applet {
    public void init(){
        String host=getParameter("host");
        int port=Integer.parseInt(getParameter("port"));
        setLayout(new BorderLayout());
        //add(new Client(host,port));
        add(BorderLayout.CENTER,new Client(host,port));
    }
}
Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
 
<html> 
  <head> 
    <title>Application de chat avec JAVA</title> 
  </head> 
  <body> 
    <applet code="ClientApplet.class" height="700" width="700"> 
      <param name="host" value=""> 
      <param name="port" value=""> 
    </applet> 
  </body> 
</html>


Dans ce projet je peux envoyer des messages en réseau local, et ça marche bien.

Mais mon problème est que je doit ajouté un panel pour l'identification sans mot de passe et afficher tous les utilisateurs dans une liste et les messages comme ceci : login : message.