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

Java Discussion :

Conception petit tchat


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    327
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 327
    Par défaut Conception petit tchat
    Bonjour,

    Alors voila mon problème est le suivant. J'ai fait un petit tchat multiclient mais j'ai un problème pour la conception du client. Je m'explique, je cherche un moyen de faire un client qui me permette en même temps d'afficher les phrases des autres et les miennes mais aussi en même temps que je puisse en envoyer aussi. Tout ceci en mode console.
    Je m'explique, je voudrais quelque chose qui fasse à peut près comme ceci sur l'écran des clients:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    1er client: hello
    2ème client: lut
    moi: yep
    écrire: (ici ce trouve le message que je voudrais envoyer)
    Parce que la j'ai un client qui me permet que d'écouter les autres:

    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.io.*;
    import java.net.*;
     
    public class Client {
        public static void main(String[] args) throws IOException {
     
            Socket socket = null;
            BufferedReader in = null;
     
            try {
                socket = new Socket("local-PC", 1234);
                in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            } catch (UnknownHostException e) {
                System.err.println("impossible de joindre l'hote");
                System.exit(1);
            } catch (IOException e) {
                System.err.println("probleme de I/O avec l'hote");
                System.exit(1);
            }
     
            String serveur;
     
            while (true) {
            	serveur = in.readLine();
            	System.out.println(serveur);
                if (serveur.equals("quit")) {
                	break;
                }
            }
     
            System.out.println ("++");
            in.close();
            socket.close();
        }
    }
    Et un autre qui me permet que d'envoyer des messages:

    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
    import java.io.*;
    import java.net.*;
     
    public class Client {
        public static void main(String[] args) throws IOException {
     
            Socketsocket = null;
            PrintWriter out = null;
     
            try {
                socket = new Socket("local-PC", 1234);
                out = new PrintWriter(socket.getOutputStream(), true);
            } catch (UnknownHostException e) {
                System.err.println("impossible de joindre l'hote");
                System.exit(1);
            } catch (IOException e) {
                System.err.println("probleme de I/O avec l'hote");
                System.exit(1);
            }
     
            BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));
     
            String client;
     
            while (true) {
            	client = stdIn.readLine();
            	out.println (client);
            	if (client.equals("quitter")) {
            		break;
            	}
            }
     
            System.out.println ("++");
            out.close();
            stdIn.close();
            socket.close();
        }
    }
    Et j'aimerai trouver une conception qui me permette de faire les deux en même temps. Si quelqu'un a une idée je lui en serait reconnaissant^^ Merci d'avance

  2. #2
    Membre très actif
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2009
    Messages : 182
    Par défaut
    Citation Envoyé par scary Voir le message
    Et j'aimerai trouver une conception qui me permette de faire les deux en même temps.

    Tu n'as qu'a utiliser un thread supplémentaire et y insérer ta boucle while(true) de reception ou d'envoi.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    327
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 327
    Par défaut
    Ok donc si je fais un thread (une classe) pour ecouter et un autre pour parler et que j'active les deux dans un main sa peut marcher comme je le souhaite ?

  4. #4
    Membre très actif
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2009
    Messages : 182
    Par défaut
    Citation Envoyé par scary Voir le message
    Ok donc si je fais un thread (une classe) pour ecouter et un autre pour parler et que j'active les deux dans un main sa peut marcher comme je le souhaite ?
    En faites tu n'a qu'a faire hériter ta classe de "Thread" et override la method run().

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public class Client extends Thread  {
     
     @Override
     public void run() {
      while (true) {
      //envoie ou reception au choix
      }
     }
    }
    pour lancer le thread: this.start();

    alors tu aura deux fils d'executions, ton main thread exemple qui va soccuper de recevoir, et ton autre thread dans run() qui va s'occuper exemple des envoies.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    327
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 327
    Par défaut
    Donc si j'ai bien compris je fais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public class Client extends Threads {
               public void run () {
                      //code pour ecouter
               }
               public void parler () {
                      //code pour parler
               }
    }
    et dans le main je fais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public class main {
               public static void main (String[] args) {
                      Client client = new Client ();
                      client.start ();
                      client.parler ();
               }
    }
    C'est bon ?

  6. #6
    Membre très actif
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2009
    Messages : 182
    Par défaut
    ce que je voulais dire c'est:

    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
     
    public class Client extends Thread {
     
         public static void main (String[] args) {
     
          Client cl = new Client();  
     
          }
     
        Client(){
           this.start();
           envoie();       
           }
     
     
               public void envoie(){
                  while(true){
                  //envoie
                  }                 
               }
     
     
               @Override
               public void run () {
                  while(true){
                  //reception
                  }
               }
          }
    pas besoin de deux classes.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Un petit tchat avec l'assistance de Free
    Par Oliv'83 dans le forum Humour Informatique
    Réponses: 41
    Dernier message: 29/07/2010, 16h27
  2. [Conception] Petites interrogations pour un portail évènementiel
    Par Him dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 15/12/2007, 13h32
  3. [Conception]petit soucis de conception.
    Par le_niak dans le forum Modélisation
    Réponses: 5
    Dernier message: 14/03/2007, 15h48
  4. [Conception] Petit problème de code de confirmation.
    Par lorry1993 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 30/08/2006, 13h18
  5. Réponses: 3
    Dernier message: 11/06/2006, 12h09

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