Chat application ne répond pas
Résolu/Fermé
GFaDd
Messages postés
2
Date d'inscription
lundi 27 février 2017
Statut
Membre
Dernière intervention
29 mars 2017
-
Modifié par KX le 27/02/2017 à 20:17
GFaDd Messages postés 2 Date d'inscription lundi 27 février 2017 Statut Membre Dernière intervention 29 mars 2017 - 29 mars 2017 à 13:52
GFaDd Messages postés 2 Date d'inscription lundi 27 février 2017 Statut Membre Dernière intervention 29 mars 2017 - 29 mars 2017 à 13:52
A voir également:
- Chat application ne répond pas
- Coco chat - Accueil - Réseaux sociaux
- Remplaçant de Coco : quelles solutions pour tchater gratuitement en ligne ? - Accueil - Réseaux sociaux
- Application mobile - Guide
- Chat coco débloquer ✓ - Forum Réseaux sociaux
- Chat hot ✓ - Forum Réseaux sociaux
2 réponses
tarek_dotzero
Messages postés
817
Date d'inscription
jeudi 19 juillet 2007
Statut
Membre
Dernière intervention
12 avril 2022
121
2 mars 2017 à 00:07
2 mars 2017 à 00:07
Bonjour,
Le code qui lance le serveur et le code qui crée la Socket client sont dans les méthodes main, cette méthode est exécutée si on exécute la classe pas si on crée une instance.
En d'autre termes, lorsque vous faites :
Vous créez la fenêtre et l'afficher, le code :
N'est jamais exécuté.
La solution : déplacer le code qui se charge de dialogue client/serveur dans le client et dans le serveur de la métode main vers le constructeur de la classe pour garantir son exécution lorsque vous créez une nouvelle instance (avec un "new").
Bon Courage.
Le code qui lance le serveur et le code qui crée la Socket client sont dans les méthodes main, cette méthode est exécutée si on exécute la classe pas si on crée une instance.
En d'autre termes, lorsque vous faites :
Client cl = new Client(); cl.setVisible(true);
Vous créez la fenêtre et l'afficher, le code :
String msgin = ""; try{ ss = new ServerSocket(80); s = ss.accept(); dun = new DataInputStream(s.getInputStream()); dout = new DataOutputStream(s.getOutputStream()); while(!msgin.equals("Exit")){ msgin = dun.readUTF(); msg_area.setText(msg_area.getText().trim()+"\n"+msgin); } }catch(Exception e){}
N'est jamais exécuté.
La solution : déplacer le code qui se charge de dialogue client/serveur dans le client et dans le serveur de la métode main vers le constructeur de la classe pour garantir son exécution lorsque vous créez une nouvelle instance (avec un "new").
Bon Courage.
GFaDd
Messages postés
2
Date d'inscription
lundi 27 février 2017
Statut
Membre
Dernière intervention
29 mars 2017
Modifié le 29 mars 2017 à 13:53
Modifié le 29 mars 2017 à 13:53
Merci tarek(même si c'est un peu retard), Le problème est résolu avec l'aide d'un professeur à l'université,les changements apportés sont tels que:
public class Client extends javax.swing.JFrame implements Runnable{
Au lieu de:
public class Client extends javax.swing.JFrame {
au niveau du main du client:
Thread th = new Thread(new Client()); th.start();
au lieu du:
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new Client().setVisible(true);
} });
try{ s = new Socket("localhost", 80);
dun = new DataInputStream(s.getInputStream());
dout = new DataOutputStream(s.getOutputStream());
String msgin = "";
while(!msgin.equals("Exit")){
msgin = dun.readUTF();
msg_area.setText(msg_area.getText().trim()+"\n serveur :\t"+msgin); } }catch(Exception e){} }
puis il a ajouté en fin ce code là:
@Override public void run() {
try {
s = new Socket("localhost", 80);
dun = new DataInputStream(s.getInputStream());
dout = new DataOutputStream(s.getOutputStream());
while (!msgin.equals("Exit")) {
msgin = dun.readLine();
msg_area.setText(msg_area.getText()+"\n"+msgin); // s.close(); }
} catch (Exception e) { System.out.println("0001"); e.printStackTrace(); }
}
}
et enfin le code du bouton dans le Jframe qui va appeler le client:
Thread th = new Thread(new Client());
th.start();
public class Client extends javax.swing.JFrame implements Runnable{
Au lieu de:
public class Client extends javax.swing.JFrame {
au niveau du main du client:
Thread th = new Thread(new Client()); th.start();
au lieu du:
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new Client().setVisible(true);
} });
try{ s = new Socket("localhost", 80);
dun = new DataInputStream(s.getInputStream());
dout = new DataOutputStream(s.getOutputStream());
String msgin = "";
while(!msgin.equals("Exit")){
msgin = dun.readUTF();
msg_area.setText(msg_area.getText().trim()+"\n serveur :\t"+msgin); } }catch(Exception e){} }
puis il a ajouté en fin ce code là:
@Override public void run() {
try {
s = new Socket("localhost", 80);
dun = new DataInputStream(s.getInputStream());
dout = new DataOutputStream(s.getOutputStream());
while (!msgin.equals("Exit")) {
msgin = dun.readLine();
msg_area.setText(msg_area.getText()+"\n"+msgin); // s.close(); }
} catch (Exception e) { System.out.println("0001"); e.printStackTrace(); }
}
}
et enfin le code du bouton dans le Jframe qui va appeler le client:
Thread th = new Thread(new Client());
th.start();