Aide pour un chat RMI en Java

Aide pour un chat RMI en Java - Java - Programmation

Marsh Posté le 06-11-2008 à 17:16:40    

Bonjour,
 
Je suis débutant en programmation java et j'ai pour projet la réalisation d'un chat en utilisant les RMI.
 
Le problème qui se pose c'est que n'arrive pas à envoyer le message aux autres clients connectés.
 
Voici le code source des classes :
 
Côté client :

Code :
  1. import java.rmi.*;
  2. import java.io.*;
  3. public class cltEcho {
  4.     public static void main(String arg[]){
  5.         BufferedReader in=null;
  6.         String msg=null;
  7.         String reponse=null;
  8.         interEcho serveur=null;
  9.        
  10.         try{
  11.             // ouverture du flux clavier
  12.             in=new BufferedReader(new InputStreamReader(System.in));
  13.             // localisation du service
  14.             serveur=(interEcho) Naming.lookup("srvEcho" );
  15.             // boucle de lecture des msg à envoyer au serveur d'écho
  16.             System.out.print("Message : " );
  17.             msg=in.readLine().toLowerCase().trim();
  18.             while(! msg.equals("/quit" )){
  19.                 // envoie du msg au serveur et réception de la réponse
  20.                 reponse=serveur.echo(msg);
  21.                 // suivi
  22.                 System.out.println("Réponse serveur : " +reponse);
  23.                 // msg suivant
  24.                     System.out.println("Message : " );
  25.                 msg=in.readLine().toLowerCase().trim();
  26.             }
  27.             System.exit(0);
  28.         }
  29.         catch (Exception e){
  30.             System.err.println("Erreur : " +e);
  31.             System.exit(2);
  32.         }
  33.     }
  34. }


 
Implémentation :

Code :
  1. import java.rmi.*;
  2. // l'interface distante
  3. public interface interEcho extends Remote{
  4.     public String echo(String msg) throws java.rmi.RemoteException;
  5.     public String broadcast(String msg) throws java.rmi.RemoteException;
  6. }


 
Côté serveur :

Code :
  1. import java.rmi.*;
  2. import java.rmi.server.*;
  3. import java.net.*;
  4. // classe implémentant l'écho distant
  5. public class srvEcho extends UnicastRemoteObject implements interEcho{
  6.     String message=null;
  7.     int version=0;
  8.    
  9.     // constructeur
  10.     public srvEcho() throws RemoteException{
  11.         super();
  12.     }
  13.     //méthode réalisant l'écho
  14.     public String echo(String msg) throws RemoteException{
  15.         version++;
  16.         message=msg;
  17.         return "[" +msg+ "]";
  18.     }
  19.     public String broadcast(String msg) throws RemoteException{
  20.         return message;
  21.     }
  22.     // création du service
  23.     public static void main (String arg[]){
  24.         try{
  25.             java.rmi.registry.LocateRegistry.createRegistry(1099);
  26.             srvEcho serveurEcho=new srvEcho();
  27.             Naming.rebind("srvEcho",serveurEcho);
  28.             System.out.println("Serveur d'écho prêt" );
  29.         } catch (Exception e){
  30.             System.err.println("Erreur " + e + " lors du lancement du serveur d'écho" );
  31.         }               
  32.     }
  33. }


 
Je dois avouer que je suis perdu dans ce langage... Si vous pouvez m'éclairer et expliquer simplement j'en serais ravis.
 
Merci d'avance pour votre aide.

Reply

Marsh Posté le 06-11-2008 à 17:16:40   

Reply

Marsh Posté le 07-11-2008 à 02:40:11    

up

Reply

Marsh Posté le 07-11-2008 à 14:33:05    

Quelle est ton erreur ?


---------------
Light is right
Reply

Marsh Posté le 07-11-2008 à 14:56:57    

Je n'ais pas d'erreur, mais je ne sait pas comment faire pour que tout les clients recoivent le message, comme un vrai chat.

Reply

Marsh Posté le 07-11-2008 à 16:14:37    

Est-ce que tu as lu la doc
 http://java.sun.com/j2se/1.5.0/docs/guide/rmi/


---------------
Light is right
Reply

Marsh Posté le 07-11-2008 à 16:36:32    

...
 
Si tu ne veux pas m'aider ne me répond pas.
 
Je sais que le RMI n'est normalement pas fais pour répondre aux clients, c'est à eux de demander au serveur si il y a des nouveaux messages à recevoir... Seulement je ne sais pas comment coder celà.

Reply

Marsh Posté le 07-11-2008 à 16:47:12    

c'est pas juste un chat entre un client et un serveur ton exercice là ?


---------------
HFR - Mes sujets pour Chrome - Firefox - vérifie les nouveaux posts des topics suivis/favoris
Reply

Marsh Posté le 07-11-2008 à 17:50:05    

Côté algo, il te faut un processus qui va boucler (ne pas utiliser de timer, si ça n'a pas changé, en java l'exécution des timer est faite dans le processus principal de l'application) avec une pause à chaque tour de boucle (pour ne pas prendre bêtement 100% du temps processeur) et qui va demander au serveur la liste des messages reçu récemment.
 
Après pour le reste, c'est de l'algo classique alors je pense que quelque soit ton niveau t'arriveras à t'en sortir.

Reply

Marsh Posté le 07-11-2008 à 21:58:52    

Bien le but est d'un avoir un chat entre un serveur et des clients bien sûr, sans utiliser de threads.

Reply

Marsh Posté le 08-11-2008 à 18:40:18    

Et si tes clients s'enregistrent auprès du serveur pour être notifies des messages ? Comme un bête listener ?


---------------
Light is right
Reply

Marsh Posté le 08-11-2008 à 18:40:18   

Reply

Marsh Posté le 09-11-2008 à 18:19:26    

Peut être... mais je suis débutant en java et je ne sait pas comment coder ça xD


Message édité par dtom le 09-11-2008 à 18:19:36
Reply

Marsh Posté le 10-11-2008 à 10:31:04    

T'es débutant en Java et tu fait direct du RMI ? :o
 
Déjà clairement le RMI n'est pas vraiment fait pour faire un Chat au sens en direct, mais ca ne reste pas trop sorcier...
 
3/4 method coté serveur et après c'est au client de faire tout le boulot.
 
coté serveur il te faudrait la methode "connexion" qui renvois un ID unique, la methode "deconnexion", la methode "envoyerMessage" et la methode "recupererMessage".
 
Après bah coté serveur t'as un cache des n derniers message. Avec une classe Message qui contient par ex, l'horodatage, l'ID de l'envoyer et le contenu.  
 
Et tu renvois ces messages formater correctement au client quand ils te le demande.


---------------
| AMD Ryzen 7 7700X 8C/16T @ 4.5-5.4GHz - 64GB DDR5-6000 30-40-40 1T - AMD Radeon RX 7900 XTX 24GB @ 2680MHz/20Gbps |
Reply

Marsh Posté le 11-11-2008 à 18:19:14    

Merci MEI je pense que ça va m'aider ;)
 
Sinon oui je suis débutant, on as commencé a faire brièvement du java... c'est la licence pro, on doit aller vite^^

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed