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();
}
}