Omeda
Messages postés3Date d'inscriptiondimanche 17 avril 2005StatutMembreDernière intervention18 avril 2005
-
17 avril 2005 à 20:13
Omeda
Messages postés3Date d'inscriptiondimanche 17 avril 2005StatutMembreDernière intervention18 avril 2005
-
18 avril 2005 à 19:34
<!--StartFragment --> Bonjour tout le monde,
Je suis actuellement entrain de faire une application client/serveur cependant je rencontre quelques difficultés avec les threads, surtout pour leurs fermetures, j'ai bien regardé la faq et fais des recherches sur google mais il reste encore deux trois petits problèmes notement à l a fermeture d'un groude de thread. Je suis débutant et je travaille avec java 1.5.
Voici le code qui me prose problème au niveau du serveur.
J'aimerais que quand je clic sur le JButton de deconnexion du serveur il me ferme tous les threads du groupe client cependant il ne ferme rien du tout.
//Serveur Pong
//Création le 06/02/2005
//Auteur Meda
//A voir
//Processus de watchdog
//Traitement des threads de groupe
//Serveur Pong.
//géré les connexion des clients Ping
public class Pong extends JFrame
{
//Composants de l'interface graphique
JPanel conteneur;//Contient l'interface graphique
JPanel controle;//contient les différents controles du serveur. Ex : connecter
//composant du conteneur controle.
JButton connecter;//Action permet de lancer le serveur.
JButton deconnecter;//Action permet de fermer le serveur.
//autres dans conteneur.
JScrollPane ascenseur;//contient le composant texte
JTabbedPane navigation;//permet la gestion des onglets.
JTextArea texte;//Affichage des actions.
//Thread serveur
public ThreadGroup serveur=new ThreadGroup("serveur");
public ThreadGroup client=new ThreadGroup("client");
private Multi lance=new Multi(serveur,"serveur");
//permet de lancer le serveur.
public class Lance_Conex implements ActionListener
{
public void actionPerformed(ActionEvent lc)
{
lance.setDaemon(true);
lance.start();
}
}
//Permet d'arrter le serveur.
public class Stop_Conex implements ActionListener
{
public void actionPerformed(ActionEvent sc)
{
lance.ferme_multi();
}
}
//Thread permettant le multi-threading.
public class Multi extends Thread
{
private String name;
private boolean serv_connect=true;
private Client_Ping thread_client;
private int numero;
Multi(ThreadGroup serveur,String name)
{
this.name=name;
}
public void run()
{
numero=1;
try
{
ecoute =new ServerSocket(1234);
texte.append("Pong est lancé\n");
while(!this.interrupted())
{
connexion = ecoute.accept();
thread_client=new Client_Ping(client,connexion, numero++);
thread_client.start();
}
}
catch (IOException ioe)
{
texte.append("erreur du thread multi\n");
}
}
public synchronized void ferme_multi()
{
client.interrupt();
serv_connect=false;
texte.append("Fin de la connexion serveur\n");
}
}
//Thread pour chaque client Ping, il permet de faire la connexion entre le client et le serveur.
public class Client_Ping extends Thread
{
private Socket connexion;//socket de connexion au serveur
private boolean connecter=true;//le client Ping est-il encore connecté ?
private int numero;//numéro du thread.
public Client_Ping(ThreadGroup client,Socket connexion, int numero)
{
this.connexion = connexion;
this.numero = numero;
}
public void run()
{
texte.append("Un Ping est connecté\n");
while(connecter)
{
try
{
BufferedReader entree = new BufferedReader(new InputStreamReader(connexion.getInputStream()));
PrintWriter sortie = new PrintWriter(connexion.getOutputStream(),true);
sleep(18000);
sortie.println("pong");
sleep(2000);
String ligne = entree.readLine();
if(ligne.equals("ping"))
{
texte.append("ping\n");
}
else
{
ferme_client();
}
}
catch(NullPointerException npe)
{
texte.append("Ping est déconnecté\n");
connecter=false;
}
catch(Exception e)
{
texte.append("Erreur : "+e+"\n");
connecter = false;
}
}
}
public synchronized void ferme_client()
{
texte.append("fermeture du client\n");
connecter=false;
}
}
//serveur Pong
Pong()
{
init_inter();// lancement de l'interface
setVisible(true);
setResizable(false);
setTitle("Pong");
setSize(300,300);
setDefaultCloseOperation(this.EXIT_ON_CLOSE);
}
public static void main(String args[])
{
new Pong();
}
}
Si vous avez besoin de plus d'indication dites le moi.
Merci beaucoup pour votre aide.
safisoft
Messages postés489Date d'inscriptionvendredi 30 janvier 2004StatutMembreDernière intervention13 mai 20096 18 avril 2005 à 11:36
Je
voi m=pas l'interet à Multi, mai pour lancer un thread Thread_Client
par exemple dans le groupe client, faut que le constructeur de
ThreadClient contient l'appel super(client,"nouveauclient"+i); (là
"nouveauclient"+i c'est k'un exemple, tu pe appeler ton nouveau bébé
comme tu ve).
Omeda
Messages postés3Date d'inscriptiondimanche 17 avril 2005StatutMembreDernière intervention18 avril 2005 18 avril 2005 à 19:34
en fait se bout de code est une boucle infinie qui permet en cas d'une
connexion d'un nouveau client de fabriquer un thread client. Mais j'ai
du mal avec les thread donc je ne sais pas comment faire.