IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

avec Java Discussion :

Aide pour un CHAT RMI en java


Sujet :

avec Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 11
    Par défaut Aide pour un CHAT RMI en java
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    import java.rmi.*;
    import java.io.*;
     
    public class cltEcho {
        public static void main(String arg[]){
            BufferedReader in=null;
            String msg=null;
            String reponse=null;
            interEcho serveur=null;
     
            try{
                // ouverture du flux clavier
                in=new BufferedReader(new InputStreamReader(System.in));
                // localisation du service
                serveur=(interEcho) Naming.lookup("srvEcho");
                // boucle de lecture des msg à envoyer au serveur d'écho
                System.out.print("Message : ");
                msg=in.readLine().toLowerCase().trim();
                while(! msg.equals("/quit")){
                    // envoie du msg au serveur et réception de la réponse
                    reponse=serveur.echo(msg);
                    // suivi
                    System.out.println("Réponse serveur : " +reponse);
                    // msg suivant
                        System.out.println("Message : ");
                    msg=in.readLine().toLowerCase().trim();
                }
                System.exit(0);
            }
            catch (Exception e){
                System.err.println("Erreur : " +e);
                System.exit(2);
            }
        }
    }
    Implémentation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    import java.rmi.*;
     
    // l'interface distante
    public interface interEcho extends Remote{
        public String echo(String msg) throws java.rmi.RemoteException;
        public String broadcast(String msg) throws java.rmi.RemoteException;
    }
    Côté serveur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    import java.rmi.*;
    import java.rmi.server.*;
    import java.net.*;
     
    // classe implémentant l'écho distant
    public class srvEcho extends UnicastRemoteObject implements interEcho{
        String message=null;
        int version=0;
     
        // constructeur
        public srvEcho() throws RemoteException{
            super();
        }
        //méthode réalisant l'écho
        public String echo(String msg) throws RemoteException{
            version++;
            message=msg;
            return "[" +msg+ "]";
        }
        public String broadcast(String msg) throws RemoteException{
            return message;
        }
        // création du service
        public static void main (String arg[]){
            try{
                java.rmi.registry.LocateRegistry.createRegistry(1099);
                srvEcho serveurEcho=new srvEcho();
                Naming.rebind("srvEcho",serveurEcho);
                System.out.println("Serveur d'écho prêt");
            } catch (Exception e){
                System.err.println("Erreur " + e + " lors du lancement du serveur d'écho");
            }                
        }
    }
    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.

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    pour envoyer des message du serveur -> les clients, t'as plusieurs possibilités


    1) les client demandent régulièrement (genre 5/6 fois par seconde) au serveur "y a du neuf?" et le serveur répond avec les dernier changement. Le client n'as plus qu'à identifier. Avantage, le serveur reste sur un modèle de requete / réponse. Inconvénient, faut interroger régulièrement le serveur

    2) les client passent au serveur un objet RMI qui leur est propre pour être notifié des changements. Avantage, les communication sont réduite aux moments où elles sont nécessaires. Inconvénient: le client agit alors aussi comme un serveur pour d'évènement. Le serveur "contacte" le client, la logique client/serveur est inversé et ça peut poser des problèmes en adressage privé derrière un NAT (à tester)

Discussions similaires

  1. aide pour comprendre ce petit code java
    Par hassan9090 dans le forum Débuter avec Java
    Réponses: 4
    Dernier message: 22/04/2010, 17h00
  2. demande aide pour un chat
    Par sebdu30 dans le forum Autres
    Réponses: 0
    Dernier message: 30/08/2008, 17h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo