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

Entrée/Sortie Java Discussion :

Application de tchatche


Sujet :

Entrée/Sortie Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2007
    Messages
    236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Février 2007
    Messages : 236
    Par défaut Application de tchatche
    Bonjour, j'ai développer une petite application de tchatche entre un serveur et un client. Le serveur se lance en 1 er lieu pour vérifier s'il ya des demandes de connexions puis le client se lance pour se connecter au serveur. Il ya un échange de message entre les deux machines et le client peut quitter lorsqu'il tape le mot "quitter".

    Bon j'ai trouvé un problème surtout au niveau de la méthode readLine(), puisqu'elle bloque ce qui envoie le message en attendant la réponse du distinataire c a d un client ne peut pas envoyer deux messages succesives aux clients.
    Voila le code j'espère que c'est clair :


    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    import java.net.*;
    import java.io.*;
     
    /* Le code de la classe serveur */ 
    public class Serveur {
        public Serveur() {
        }
        public void dialoguer(){
            ServerSocket sEcoute = null;
            try {
                // ouverture du service
                int portEcoute = 7001;
                int maxConnexions = 1;
                sEcoute = new ServerSocket(portEcoute, maxConnexions);
                // traitement des demandes de connexion
                boolean fini = false;
                Socket sService = null;
                System.out.println("Attente de connexion...");
                sService = sEcoute.accept();
                System.out.println("Connexion établie...");
                BufferedReader in = new BufferedReader(new InputStreamReader(sService.getInputStream()));
                BufferedReader keybord = new BufferedReader(new InputStreamReader(System.in));
                PrintWriter out = new PrintWriter(sService.getOutputStream(),true);
                String demande;
                String reponse;
                while (!fini) {
                    demande = in.readLine();
                    if (demande.equals("CLIENT : quitter")||demande.equals("CLIENT : Quitter")){
                        out.println("...ok! Bye! fermeture de la connexion  ");
                        fini = true;
                        continue;
                    }
                    System.out.println(demande);
                    reponse = keybord.readLine();
                    out.println("SERVEUR : "+reponse);
                }
                // c'est fini - on clôt le service
                System.out.println("...fermeture de la connexion!");
                sEcoute.close();
                sService.close();
            } catch (Exception e) {
                // on traite l'exception
                System.out.println("Erreur !" + e);
            }
        }
        public static void main(String[] args) {
            Serveur serveur = new Serveur();
            serveur.dialoguer();
        }
    }

    /* code de la classe 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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    public class Client {
     
        public Client() {
        }
     
        public void dialoguer(){
            Socket sClient=null;
            try{
                // on se connecte au service officiant sur le port P de la machine M
                System.out.println("Demande de connexion...");
                sClient=new Socket("127.0.0.1",7001);
                System.out.println("Connexion établie...");
                // on crée les flux d'entrée-sortie de la socket client
                BufferedReader in=new BufferedReader(new InputStreamReader(sClient.getInputStream()));
                BufferedReader keybord = new BufferedReader(new InputStreamReader(System.in));
                PrintWriter out=new PrintWriter(sClient.getOutputStream(),true);
                // boucle demande - réponse
                boolean fini=false;
                String demande;
                String reponse;
                while (! fini){
                    // on prépare la demande
                    demande = keybord.readLine();
                    // on l'envoie
                    out.println("CLIENT : "+ demande);
                    // on lit la réponse
                    reponse = in.readLine();
                    // on traite la réponse
                    System.out.println(reponse);
                    if(demande.equals("quitter")||demande.equals("Quitter")) fini=true;
                }
                // c'est fini
                sClient.close();
            } catch(Exception e){
                // on gère l'exception
              System.out.println("Erreur "+e);
            }
     
        }
     
        public static void main(String[] args) {
            Client client = new Client();
            client.dialoguer();
        }
    }
    J'espere que vous m'aider, je suis bloqué.
    Merci

  2. #2
    Expert confirmé
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Par défaut
    Bonjour.
    Citation Envoyé par mimosa803 Voir le message
    Bon j'ai trouvé un problème surtout au niveau de la méthode readLine(), puisqu'elle bloque ce qui envoie le message en attendant la réponse du distinataire c a d un client ne peut pas envoyer deux messages succesives aux clients.
    Ton problème est tout à fait naturel vu que les IO standard de Java sont bloquants.
    Tu peux soit:
    - Utiliser une thread séparée par client connecté.
    - Ou utiliser un API non-bloquant, genre NIO (dur dur dur) ou Apache MINA (super génial soit dit en passant !).

    Bonne chance.

  3. #3
    Membre Expert
    Profil pro
    Fabrication GED
    Inscrit en
    Octobre 2005
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 405
    Par défaut
    +1
    une application chat nécessite un serveur et une infinité de clients effectuant des taches parallèlement (envoyer des message). Ton serveur doit être multithreadé.
    Je te conseille de faire une recherche genre "java serveur multithread", il y a énormément d'exemples et de tutos.

Discussions similaires

  1. executer une application a distance : Sockets ? RPC ? CORBA?
    Par a_hic dans le forum Développement
    Réponses: 5
    Dernier message: 30/05/2006, 13h02
  2. Accès à une application ouverte (OLE Automation ?)
    Par PascalB dans le forum C++Builder
    Réponses: 6
    Dernier message: 17/06/2002, 14h39
  3. Réponses: 1
    Dernier message: 13/05/2002, 09h19
  4. [Kylix] Execution d'une application hors de l'edi
    Par Sadam Sivaller dans le forum EDI
    Réponses: 1
    Dernier message: 20/04/2002, 23h22
  5. Réponses: 2
    Dernier message: 15/04/2002, 12h56

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