TutorielsVous débutez ? C'est ici qu'on commence !
Mon compte
Recherche
Livre d'or
PublicitéVous devez être inscrit pour pouvoir poster des messages
| Page : 1 | |||||||||||
| Auteur | Message | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 visiteur sur ce sujet (1 anonyme) | |||||||||||
| Page : 1 | |||||||||||
meryazer
|
# Posté le 03/07/2008 à 15:14:33 | ||||||||||
![]() Groupe : Membres |
Bonjour
j'ai un stage dont le sujet du projet est de créer un service de messagerie instantanée en java, donc une communication client_serveur et client_client. pour l'instant je n'ai arrivé permettre aux cliens d'envoyer leurs messages qui seront ainsi recu par le serveur et les autres clients. alors que le travail demandé est encore plus compliqué (pour moi ), c'est que le serveur aussi doit avoir le droit d'envoyer des messages aux clients, il peut meme envoyé des messages privés pour quelques uns.voici les codes Client.java package chattel; import java.io.*; import java.net.*; import java.util.*; public class Client { private Socket socket; private String name; private final int PORT=36000; public Client(Socket s, String n){ this.socket=s; this.name=n; } public static void main(String[] args) { try { Socket connexion = new Socket("127.0.0.1", 36000); PrintWriter sortie = new PrintWriter(connexion.getOutputStream(), true); BufferedReader entree = new BufferedReader(new InputStreamReader(connexion.getInputStream())); BufferedReader clavier = new BufferedReader(new InputStreamReader(System.in)); Scanner sc=new Scanner(System.in); System.out.println("Saisissez votre pseudo"); String str=sc.nextLine(); sortie.println("Nouveau client "+str); boolean continu = true; new ThreadClient(connexion, str).start(); while (true) { String ligne = clavier.readLine(); if (ligne.equalsIgnoreCase("quitter")) { sortie.println("quitter"); break; } if (ligne != null) sortie.println(ligne); } } catch(IOException e) { System.out.println("Erreur : "+e); } System.out.println("Connexion terminée..."); } public String getName() { return name; } public Socket getSocket() { return socket; } public void setSocket(Socket socket) { this.socket = socket; } public void setName(String name) { this.name = name; } } ThreadClient.java package chattel; import java.net.Socket; import java.io.*; public class ThreadClient extends Thread{ private Socket connexion; private String pseudo; public ThreadClient(Socket connexion, String pseudo) { this.connexion = connexion; this.pseudo = pseudo; System.out.println("Nouveau socket : " + connexion); } public void run() { try { boolean continuer = true; while (continuer) { BufferedReader entree = new BufferedReader(new InputStreamReader( connexion.getInputStream())); PrintWriter sortie = new PrintWriter(connexion.getOutputStream(), true); String ligne = entree.readLine(); if (ligne == null) { continuer = false; } if (ligne != null) System.out.println(ligne); } connexion.close(); } catch (IOException e) { System.err.println(e); } } } Serveur.java package chattel; import java.io.*; import java.net.*; import java.util.Vector; import java.util.Iterator; public class Serveur { private static final int PORT = 36000; private static int numero = 1; public static Vector mesClients = new Vector(); private static Serveur monServeur; public void insererClient(Client client) { this.mesClients.add(client); } public void retirerClient(Client client) { this.mesClients.remove(client); } public static Serveur getInstance() { if (null == monServeur) { monServeur = new Serveur(); } return monServeur; } public static void envoieATous(String chaine) throws IOException { Iterator iterator = mesClients.iterator(); while (iterator.hasNext()) { Client ceClient=(Client)iterator.next(); PrintWriter tmpout = new PrintWriter(((ceClient).getSocket()).getOutputStream(), true); tmpout.println(chaine); } } public static void main(String[] args) throws Exception { Serveur monServeur = Serveur.getInstance(); try { ServerSocket service = new ServerSocket(PORT); while (true) { Socket connexion = service.accept(); BufferedReader entree = new BufferedReader(new InputStreamReader( connexion.getInputStream())); PrintWriter sortie = new PrintWriter(connexion.getOutputStream(), true); String ligne = entree.readLine(); if (ligne.startsWith("Nouveau client")) { String pseudo = ligne.substring(14); System.out.println("Arrivee de " + pseudo + "."); sortie.println("Bonjour et bienvenu sur le ChatTEL"); monServeur.envoieATous("Arrivee de " + pseudo + "."); Client monClient=new Client(connexion,pseudo); monServeur.insererClient(monClient); new ThreadServeur(connexion, pseudo, monClient).start(); } } } catch (IOException e) { System.out.println("Erreur : " + e); } } } ThreadServeur.java package chattel; import java.io.*; import java.net.Socket; class ThreadServeur extends Thread { private Socket connexion; private String pseudo; private Client client; public ThreadServeur(Socket connexion, String pseudo, Client monClient){ this.connexion = connexion; this.pseudo = pseudo; this.client=monClient; System.out.println("Nouveau socket : " + connexion); } public void run() { try { boolean continuer = true; while (continuer) { BufferedReader entree = new BufferedReader(new InputStreamReader( connexion.getInputStream())); PrintWriter sortie = new PrintWriter(connexion.getOutputStream(), true); String ligne = entree.readLine(); if (ligne.equalsIgnoreCase("quitter")){ Serveur.mesClients.remove(this.client); Serveur.envoieATous(pseudo+" a quitter le chat"); System.out.println(pseudo+"a quitter le chat"); break; } if (ligne == null) { continuer = false; } else { String chaine=pseudo + " > " + ligne; System.out.println(chaine); Serveur.envoieATous(chaine); } } connexion.close(); } catch (IOException e) { System.err.println(e); } } } merci d'avance je tiens à signaler que je doit faire tout ça dans une interface graphique, donc si vous avez des tutoriels pour ça merci de me les envoyer. |
||||||||||
NeoZer0
|
# Posté le 04/07/2008 à 20:43:44 | ||||||||||
Nostalgeek![]() Groupe : Membres |
j'ai pas vraiment regarder ton code parce que tu n'as pas utiliser la balise code.
mais je peux te proposer ceci http://defaut.developpez.com/tutoriel/ [...] /multithread/ ça te permettra de te faire une idée de comment partir car en survolant j'ai vu qu'il risquer d'y avoir certain soucis car par exemple ta méthode d'ajout de client n'est pas synchroniser donc risque de conflits. n'oubliez pas de ![]() Un code php commence par <?php et fini par ?> ne l'oublier pas dans le zCode |
||||||||||
daedric
|
# Posté le 05/07/2008 à 18:01:12 | ||||||||||
|
Groupe : Membres |
ne fais pas de communication inter client ... fais tout passer par le serveur
et c'est le serveur qui achemine a chaque client les messages qui leurs sont destine j'ai un code qui se balade dans mon pc mais je suis un peu reticent a te le donner "n'est pas mort ce qui semble a jamais dormir et en d'étranges temps même la mort peut mourrir" |
||||||||||
meryazer
|
# Posté le 08/07/2008 à 16:11:57 | ||||||||||
![]() Groupe : Membres |
bonjour, merci pour vos réponse, oui vous avez raison le serveur ne fait que faire communiquer les clients entre eux,pour l'instant j'ai fait l'interface de client, et le serveur envoie pren chaque message d'un client et l'envoie à tous les autres clients.
le probleme c'est que chaque client doit s'authentifier avant de se connecter et pour cela j'ai essayé de lier mon programme à ma base de donnée pour voir si le pseudo tapé existe déja ou non, et normalement aprés vérification le serveur doit donner une valeur à pseudo, cette valeur se trouve sur le TextField de la fenetre d'authentification, bon puisque je voulez juste voir si le code marche j'ai initialisé le pseudo par "Amal", mais moi je veux à chaque fois avoir un client different, désolé mon message est trés long mais j'essai de bien expliquer mon prob voici les code: Serveur.java Code : Java
ThreadServeur.java Code : Java
FenetreAuthent.java Code : Java
FenetreClient.java Code : Java
voici le code de Client.java c'est dans ce code que j'essai de faire la liaison avec la base de données normalement j'ai lancer la requette avant le click du bouton de la fenetre d'authentification, et lors du click la verification commence Code : Java
bon voila , si vous voulez essayer le code tachez de lire les commentaires pour comprendre là démarche. N.B:j'ai installer le pilote pour mysql merci pour votre patience
|
||||||||||
NeoZer0
|
# Posté le 09/07/2008 à 11:10:43 | ||||||||||
Nostalgeek![]() Groupe : Membres |
Sans regarder en profondeur le code juste en lisant ton problème, j'ai deux choses à dire:
Édité
le 09/07/2008 à 11:12:25
par NeoZer0
n'oubliez pas de ![]() Un code php commence par <?php et fini par ?> ne l'oublier pas dans le zCode |
||||||||||
meryazer
|
# Posté le 10/07/2008 à 10:43:12 | ||||||||||
![]() Groupe : Membres |
bonjour merci beaucoup pour ta réponse , tu as tout à fait raison, la liaison avec la base de données doit se faire au niveau serveur, mais je ne sait pas comment faire, pour l'instant j'ai réussi à la lier avec le client, car les requettes se font lorsqu'on click sur le bouton "connexion" de la fenetre d'authentification, comment je peux faire en sorte que le serveur sache quand est ce que le client a cliqué ce bouton? càd est ce que j'ai le serveur a droit de faire appel à des listner concernant des fenetres pour client?
j'ai pas bien compris comment je vais définir un protocole de communication? pardonne moi, je suis plus que nulle et je veux aprendre merci d'avance |
||||||||||
NeoZer0
|
# Posté le 17/07/2008 à 19:59:37 | ||||||||||
Nostalgeek![]() Groupe : Membres |
Désoler pour le retard mais j'avais pas trop de temps. J'ai essayé de chercher un code que j'avais pour te donner un exemple mais impossible de remettre la main dessus.
Documente toi sur internet sur ce qu'est un protocole de communication. Après il y en a qui existe déjà et dont tu peux t'inspirer. Je pense notamment à Jabber mais qui risque d'être un peu lourd pour ton petit projet. Désoler de pas pouvoir t'aider plus. Mais bon en même temps c'est ton projet donc faut bien que tu le fasse ;). Bon courage si tu as d'autres questions j'y répondrais. n'oubliez pas de ![]() Un code php commence par <?php et fini par ?> ne l'oublier pas dans le zCode |
||||||||||
Retour au forum "Langage Java" ou à la liste des forums
Vous devez être inscrit pour pouvoir poster des messages
Changer de design |
En savoir plus |
Plan du site |
Politique d'accessibilité |
Règles |
RSS tutoriels |
RSS news
Édité par Simple IT SARL :
Nous contacter
| Notre blog | Revue de presse | Publicité
Y'a plus rien à lire, faut remonter maintenant !
Hébergement web - Correction de tutoriels - Créer un site
Vous souhaitez apparaître ici ? Contactez-nous.
162 Zéros connectés |
8 requêtes |
0.1068s (0.0916s)
