je mets aussi les 2 classes en entier si ca peut aider...
 
 
import java.net.*;
import java.io.*;
 
public class Chatserveur extends Thread {
 
    private ServerSocket serveur;
    private Socket socketVersClient = null;
    private static int port=5412;
    private static int nbConnexions=10;
    private int erreur=0;
    private int connecte=0;
    private PrintWriter out;
    private BufferedReader in;
    private InputStreamReader socket_in;
     
    public void envoyerTexte(String texte)
     {
     if (this.connecte==1)
     {
         this.out.println(texte);
         this.out.flush();
     }
     }
     
     
    public String readTexte()
    {
    String texte = new String();
    boolean testLecture=false;
    if (this.connecte==1)
    {
     try {
     testLecture=this.in.ready();
     } catch(IOException err)
     { }
 }
    if (testLecture==true)
    {    
    try {
    texte=this.in.readLine();  
    texte=texte + "\n";
    } catch(IOException err)
    { }
 }
 return texte;
    }
     
    public int getErreur()
    {
    return this.erreur;    
    }
     
    public void stopServeur()
    {
if (this.connecte==1)
{
try {  
        this.serveur.close();  
        } catch(IOException err)
        {
    }
}
}
     
    public Chatserveur() {
     try {    
         this.serveur = new ServerSocket(this.port,this.nbConnexions);
         this.socketVersClient = (Socket)null;
         this.start() ;    
             
     } catch(IOException err)
        {
        this.erreur=1;
     }
    if (this.erreur==0)
    {
    this.connecte=1;    
    }
    }
 
    public void run() {  
     
       try {  
        while(true) {
        this.socketVersClient = this.serveur.accept();            
        this.out = new PrintWriter ( socketVersClient.getOutputStream());
   
 	this.socket_in = new InputStreamReader( socketVersClient.getInputStream());
 	this.in = new BufferedReader ( socket_in);
 
        }
        } catch(IOException err)
        {
        //this.erreur=1;
     }
    }
     
}
 
 
 
 
 
 
 
import javax.swing.*;
import javax.swing.border.*;
import java.awt.event.*;
import java.awt.*;
import java.net.*;
 
public class Chatinterface extends JFrame {
     
    //l'objet Chatserveur
    private Chatserveur connexionServeur;
    //l'objet Chatclient
    private Chatclient connexionClient;
    //le thread qui fait tourner la boucle pour recuperer les messages
    private Thread threadMessage= null;
 
 //la classe runnable qui lit les messages
 //je l'est mise ici pour pouvoir acceder aux methodes de Chatinterface
private class Chattimertexte implements Runnable {
 
 public void run() {  
 while (true)
 {
 //System.out.println("coucou" );
 getMessageTexte();
 }
 }
 
 public Chattimertexte () {
   
 }
 
 }
 
    //tous les elements de l'interface graphique
    private String titreFenetre;
    private JLabel labelInfos;
    private JLabel labelTexteInfos;
    private JTextField fieldMessage;
    private JLabel labelIP;
    private JLabel labelNom;
    private JTextField fieldIP;
    private JTextField fieldNom;
    private JButton buttonConnecter;
    private JButton buttonTest;
    private JTextArea textareaDialogue;
    private JScrollPane scrollDialogue;
     
    //diverses variables...
    //1 si en serveur
    //2 si en client
    private int etat=1;
     
     
    //methode qui lance la boucle de reception des messages
    private void startMessageLoop()
    {
    this.threadMessage = new Thread (new Chattimertexte());  
    this.threadMessage.start();  
    }
     
    //methode qui stoppe la boucle de reception des messages
    private void stopMessageLoop()
    {
    this.threadMessage.stop();  
    }
     
    //methode pour modifier le texte d'information
    private void setTexteInfos(String texte)
    {
    this.labelInfos.setText(texte);    
    }
     
    //change la variable etat du chat
    private void setEtat(int etat)
    {
    this.etat=etat;    
    }
     
    //stoppe la partie serveur du chat
    private void arreterServeur()
    {
     this.connexionServeur.stopServeur();    
    }
     
    //stoppe la partie client du chat
    private void arreterClient()
    {
     this.connexionClient.stopClient();    
    }
     
    //renvoie l'état du chat
    private int getEtat()
    {
    return this.etat;    
    }
     
    //modifie le contenu du bouton connexion/deconnexion
    private void setBoutonConnexion(String texte)
    {
    this.buttonConnecter.setText(texte);    
    }
     
    //methode pour modifier le texte de la barre de titre
    public void setTitreFenetre(String texte)
    {
    setTitle(texte);    
    }
     
    //methode qui envoie le message
    //quand l'utilisateur appuie sur entree
    public void envoyerMessage()
    {
    if(this.fieldMessage.getText()!=null)
    {
        this.textareaDialogue.append(this.fieldNom.getText() + " : " + this.fieldMessage.getText() + "\n" );
        if(this.getEtat()==2)
        {
        this.connexionClient.envoyerTexte(this.fieldNom.getText() + " : " +  this.fieldMessage.getText() + "\n" );
        }
        else
        {
        this.connexionServeur.envoyerTexte(this.fieldNom.getText() + " : " +  this.fieldMessage.getText() + "\n" );    
        }
        this.fieldMessage.setText("" );
    }
    }
     
    //renvoie l'adresse contenu dans le textfield ip
    public String getAdresseIP()
    {
    return this.fieldIP.getText();    
    }
     
    //renvoie le pseudo contenu dans le textfield nom
    public String getNom()
    {
    return this.fieldNom.getText();    
    }
     
    //pour lancer la partie serveur de la connection
    private int creerConnexionServeur()
    {
    this.connexionServeur= new Chatserveur();
    return this.connexionServeur.getErreur();
    }
     
     
    //methode qui recupere le texte recue
    //et l'affiche
    private void getMessageTexte()
    {
    if (getEtat()==1)
        {
        String testTexte;
        testTexte=connexionServeur.readTexte();
        if (testTexte.length()>1)
        {
        textareaDialogue.append(testTexte);    
     }
     }
     else
     {
     String testTexte;
     testTexte=connexionClient.readTexte();
     if (testTexte.length()>1)
        {
        textareaDialogue.append(testTexte);    
     }
     }  
    }
     
    //pour lancer la partie client de la connection
    private int creerConnexionClient()
    {
    this.connexionClient= new Chatclient(getAdresseIP());
    return this.connexionClient.getErreur();
    }
     
    //methode qui cree tout les elements de l'interface
    private void creerElements()
    {
    setTitreFenetre("Fenetre de chat" );
    //on cree tous les éléments visuels (boutons, labels, etc...)
    labelInfos = new JLabel("Infos ..." );
    fieldMessage = new JTextField();
    fieldNom = new JTextField();
    labelIP = new JLabel("Adresse IP" );
    labelNom = new JLabel("Pseudo" );
    fieldIP = new JTextField();
    buttonConnecter = new JButton("Se connecter" );
    buttonTest = new JButton("Test" );
    textareaDialogue = new JTextArea();
    scrollDialogue = new JScrollPane();
    //on cree le layout
    getContentPane().setLayout(null);
    setTitle(titreFenetre);
    //si on ferme la fenetre, le programme quitte
    addWindowListener(new WindowAdapter()
        {
        public void windowClosing(WindowEvent evt)
        {
            arreterServeur();
            System.exit(0);
        }
        });
    //on ajoute tous les elements visuels au layout
    getContentPane().add(labelInfos);  
    labelInfos.setBounds(10, 0, 430, 17);
    getContentPane().add(fieldMessage);
    fieldMessage.setBounds(0, 290, 450, 21);
    //evenement quand l'utilisateur appuie sur entree    
    fieldMessage.addKeyListener(new KeyAdapter() {
        public void keyPressed(KeyEvent evt) {
            if (evt.getKeyCode()==evt.VK_ENTER)
            {
            envoyerMessage();
            }
        }
    });
    getContentPane().add(labelIP);
    labelIP.setBounds(10, 20, 65, 20);
    getContentPane().add(labelNom);
    labelNom.setBounds(10, 40, 65, 20);
    getContentPane().add(fieldIP);
    fieldIP.setBounds(80, 20, 100, 21);
    getContentPane().add(fieldNom);
    fieldNom.setBounds(80, 40, 100, 21);
    getContentPane().add(buttonConnecter);
    buttonConnecter.setBounds(190, 20, 110, 20);
     
    buttonConnecter.addMouseListener(new MouseAdapter() {
        public void mouseClicked(MouseEvent evt) {
         //cas ou le chat est en mode serveur
         //on stoppe donc le cote serveur et on  
         //lance la partie client
         if(getEtat()==1)
         {
         arreterServeur();    
         setTexteInfos("Arret du composant serveur." );
         if(creerConnexionClient()==0)
         {
         setTexteInfos("Composant client initialisé." );
         setBoutonConnexion("Deconnecter" );
         setEtat(2);  
         }
         }    
         //cas ou le chat est en client
         //on se deconnecte et on relance la partie serveur
         else
         {
         arreterClient();    
         setTexteInfos("Arret du composant client." );
         if(creerConnexionServeur()==0)
         {
         setTexteInfos("Composant serveur initialisé." );
         }      
         setEtat(1);    
         setBoutonConnexion("Se connecter" );  
         }    
        }
    });
     
     
     
    getContentPane().add(buttonTest);
    buttonTest.setBounds(190, 40, 110, 20);
     
    buttonTest.addMouseListener(new MouseAdapter() {
        public void mouseClicked(MouseEvent evt) {    
        getMessageTexte();
        }
    });
     
     
    textareaDialogue.setBounds(0, 90, 450, 190);
    textareaDialogue.setEnabled(false);
    scrollDialogue.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
    scrollDialogue.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
    scrollDialogue.setBounds(0, 70, 450, 210);
    scrollDialogue.setViewportView(textareaDialogue);
    getContentPane().add(scrollDialogue);
     
    //on definie la taille de la fenetre, puis on l'affiche.
    setSize(460,340);
    show();
   
    }
    //constructeur
    public Chatinterface() {
     creerElements();
     setTexteInfos("Interface initialisée." );
     if(creerConnexionServeur()==0)
        {
        setTexteInfos("Composant serveur initialisé." );
        setEtat(1);    
        }
    startMessageLoop();
    }
}