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 :

[Client/Serveur] Envoie entre plusieurs clients


Sujet :

avec Java

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Informatique
    Inscrit en
    Octobre 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2016
    Messages : 7
    Points : 7
    Points
    7
    Par défaut [Client/Serveur] Envoie entre plusieurs clients
    Bonjour / Bonsoir,


    Je suis entrain de réaliser une application Client/Serveur utilisant les sockets.

    Lorsque le client n°1 ce connecte au serveur et qu'il envoie un message, le message est envoyer au serveur qui lui, doit renvoyer le message au client. Pour le moment, cela marche très bien.

    Mais lorsque le client n°1 et le client n°2 ce connecte au serveur et que le client n°1 envoie un message, il n'est envoyer qu'a lui et non aux autres client (ce qui veut dire que le client n°2 ne reçoit rien).

    Je voudrais donc savoir, ce que je doit changer dans le code si dessous pour que lorsque le serveur envoie le message d'un client, il soit envoyer a tous les clients et pas qu'à un seul.

    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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    package ServeurThread;
     
    import java.io.BufferedReader;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.OutputStream;
    import java.io.PrintWriter;
    import java.net.Socket;
    import java.text.SimpleDateFormat;
    import java.util.*;
     
    public class ServiceTh extends Thread {
     
        private final Socket socket;
        private final int Client_Count;
     
        String temps;
     
        ArrayList<String> liste = new ArrayList<>();
     
        public ServiceTh(Socket socket, int Client_Count){
            super();
            this.socket = socket;
            this.Client_Count = Client_Count;
        }
     
        @Override
        public void run() {
     
            try{
     
                InputStream is = socket.getInputStream();
    	    InputStreamReader isr = new InputStreamReader(is);
    	    BufferedReader br = new BufferedReader(isr);
    	    OutputStream os = socket.getOutputStream();
    	    PrintWriter pw = new PrintWriter(os, true);
     
                //pw.println("Connexion au serveur réussi !");
                temps = new SimpleDateFormat("HH:mm:ss").format(new Date(System.currentTimeMillis()));
                System.out.println("\n["+temps+"] Connexion du client: "+socket.getRemoteSocketAddress()+".  Etat: Accepter");
                System.out.println("           Client n°"+Client_Count+" depuis le démarrage du serveur.\n");
     
                while(true){
     
                    if(!br.ready()){
                        System.err.println("Erreur: BufferedReader non 'ready' !");
                    } else{
                        String req = br.readLine(); //enregistrement du message du client dans la variable "req" (type String)
                        temps = new SimpleDateFormat("HH:mm:ss").format(new Date(System.currentTimeMillis())); //Utilisation du temps
                        System.out.println("["+temps+"] Envoie d'un message par: "+req); //Envoie d'une notification dans la console
                        pw.println(req); //Envoie du message
     
                        /* Je pense qu le probleme viens de la ligne "pw.println(req);" 
                        qui envoie le message a un seul client et non aux autres*/
     
                    }
                }
     
            }catch(Exception e){
                e.printStackTrace();
            }
     
        }
     
     
    }

    Merci.

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Hello,

    pour commencer il faudrait que le serveur se garde une liste des clients qui se sont connectés.
    Puis quand tu renvoies le message d'un client, il faudrait plutôt faire une boucle sur tous les clients qui se sont connectés et renvoyer le message à chacun d'eux.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Informatique
    Inscrit en
    Octobre 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2016
    Messages : 7
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Hello,

    pour commencer il faudrait que le serveur se garde une liste des clients qui se sont connectés.
    Puis quand tu renvoies le message d'un client, il faudrait plutôt faire une boucle sur tous les clients qui se sont connectés et renvoyer le message à chacun d'eux.
    Merci pour toutes ces informations,

    J'avais déjà envisager de créer une ArrayList qui puisse stocker toutes les Ips des clients.

    Mais le problème c'est qu'eu je ne sais pas comment envoyer un message au client contenue dans une ArrayList.

    Donc si quelqu'un sais comment faire, je suis preneur.

    Merci.

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Avec le PrintWriter de ce client.

    Le mieux serait de définir une classe Client ou Peer ou un truc comme ça, et d'en construire un pour chaque client connecté et l'ajouter à la List<Client>
    Cette classe contiendrait le PrintWriter du client, et proposerait une méthode envoyerMessage(String) qui s'occupe d'envoyer un message à ce client-là. En se basant sur le PrintWriter susmentionné.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Informatique
    Inscrit en
    Octobre 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2016
    Messages : 7
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Avec le PrintWriter de ce client.

    Le mieux serait de définir une classe Client ou Peer ou un truc comme ça, et d'en construire un pour chaque client connecté et l'ajouter à la List<Client>
    Cette classe contiendrait le PrintWriter du client, et proposerait une méthode envoyerMessage(String) qui s'occupe d'envoyer un message à ce client-là. En se basant sur le PrintWriter susmentionné.
    Merci pour ta réponse, je vais essayer.

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

Discussions similaires

  1. archi client serveur: envoi d'une image (java python)
    Par samantha93 dans le forum Général Python
    Réponses: 0
    Dernier message: 19/02/2014, 14h53
  2. envoie des fichier client/serveur
    Par yassin123441 dans le forum C#
    Réponses: 0
    Dernier message: 08/03/2011, 15h56
  3. Serveur envoie image et client l'affiche
    Par salmoucha dans le forum Services Web
    Réponses: 0
    Dernier message: 23/02/2010, 19h42
  4. [C#]envoi des images client/serveur
    Par DavidPAY dans le forum C#
    Réponses: 1
    Dernier message: 18/12/2007, 16h26
  5. Réponses: 72
    Dernier message: 05/12/2005, 10h45

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