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

C++Builder Discussion :

Réponse d'un serveur à plusieurs clients


Sujet :

C++Builder

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mai 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mai 2006
    Messages : 20
    Par défaut Réponse d'un serveur à plusieurs clients
    Bonjour,
    j'ai crée une application client/serveur. Le serveur accepte la connexion de plusieurs clients sans problème.
    Par contre j'aimerais que lorsque je reçois une requête d'un client, le serveur réponde à l'ensemble de clients connectés et pas seulement à l'emetteur de la requête. C'est possible ? Merci.

  2. #2
    Expert confirmé

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Par défaut
    Quels composant utilise tu ?
    Si c'est des composants TServerSocket et TClientSocket, la solution est la suivante :
    Dans l'evenement OnClientRead du composant TServerSocket tu met ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int i ;
    AnsiString texte = Socket->ReceiveText() ;
    for(i=0;i<ServerSocket1->Socket->ActiveConnections;i++){
      ServerSocket1->Socket->Connections[i]->SendText("Le texte à envoyer") ;
    }
    Voila
    A plus

  3. #3
    Membre averti
    Inscrit en
    Mai 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mai 2006
    Messages : 20
    Par défaut
    Merci beaucoup de ta réponse.

    Le principe recherché :
    Le client demande à jouer un son à l'appui d'une touche.
    Le serveur récupère le nom du fichier à jouer et l'envoi à tous les clients afin qu'ils lancent la lecture de ce son.

    J'ai testé le code que tu m'a donné.
    Maintenant quand j'appuis sur une touche, il n'y a qu'un pc qui joue les sons même quand on les demande d'un autre pc. Il ne doit surement pas manquer grand chose pour que la lecture se fasse en simultané sur tous les clients...

    Code serveur - méthode de réception :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     AnsiString recept;
            int i ;
     
            recept = Socket->ReceiveText();
            StatusBar1->SimpleText = "Requête cliente reçue";
            Memo1->Lines->Add(recept);
     
            for(i=0; i<ServerSocket1->Socket->ActiveConnections; i++)
            {
                    ServerSocket1->Socket->Connections[i]->SendText(recept);
            }
    COde client - méthode de réception :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    AnsiString recept;
            recept = Socket->ReceiveText();
     
            if (recept == "excellent")
                    PlaySound("Audio\\excellent.wav", NULL, SND_SYNC);
            if (recept == "benny")
                    PlaySound("Audio\\benny.wav", NULL, SND_SYNC);
    Normalement avec ton code, le nom du wav est envoyé à chaque client puis lu. Mais ça n'a pas l'air de marcher puisque la lecture ne se fait que chez un client.

  4. #4
    Membre Expert
    Avatar de DjmSoftware
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Mars 2002
    Messages
    1 044
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Responsable de compte
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 044
    Billets dans le blog
    1
    Par défaut
    bonjour
    il n'est pas nécessaire d'utiliser la propriété connection pour recevoir et répondre a des requètes sur les socket
    je joins un exemple pour t'en convaincre
    cordialement
    Fichiers attachés Fichiers attachés
    vous trouverez mes tutoriels à l'adresse suivante: http://djmsoftware.developpez.com/
    je vous en souhaite une excellente lecture ...

    A lire : Les règles du forum

  5. #5
    Expert confirmé

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Par défaut
    Citation Envoyé par Reven777
    Merci beaucoup de ta réponse.

    Le principe recherché :
    Le client demande à jouer un son à l'appui d'une touche.
    Le serveur récupère le nom du fichier à jouer et l'envoi à tous les clients afin qu'ils lancent la lecture de ce son.

    J'ai testé le code que tu m'a donné.
    Maintenant quand j'appuis sur une touche, il n'y a qu'un pc qui joue les sons même quand on les demande d'un autre pc. Il ne doit surement pas manquer grand chose pour que la lecture se fasse en simultané sur tous les clients...

    Code serveur - méthode de réception :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     AnsiString recept;
            int i ;
     
            recept = Socket->ReceiveText();
            StatusBar1->SimpleText = "Requête cliente reçue";
            Memo1->Lines->Add(recept);
     
            for(i=0; i<ServerSocket1->Socket->ActiveConnections; i++)
            {
                    ServerSocket1->Socket->Connections[i]->SendText(recept);
            }
    COde client - méthode de réception :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    AnsiString recept;
            recept = Socket->ReceiveText();
     
            if (recept == "excellent")
                    PlaySound("Audio\\excellent.wav", NULL, SND_SYNC);
            if (recept == "benny")
                    PlaySound("Audio\\benny.wav", NULL, SND_SYNC);
    Normalement avec ton code, le nom du wav est envoyé à chaque client puis lu. Mais ça n'a pas l'air de marcher puisque la lecture ne se fait que chez un client.
    Essaye de mettre plusieurs client en débugage pour voir si ils recoive bien la trame du serveur ou non, si tu ne peut pas, alors met un TLabel sur ta Form et affiche toute les requetes recu par le client dedans, comme ca tu vera si il recoit bien la trame ou non.

  6. #6
    Membre averti
    Inscrit en
    Mai 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mai 2006
    Messages : 20
    Par défaut
    Je test le débug demain, merki.

    Tous mes clients reçoivent bien la réponse du serveur (c'est déjà ça).
    Mais... il n'y a qu'un client qui joue le fichier son !
    Est-ce dû à une mauvaise utilisation de la fonction PlaySound() ??
    A quoi correspondent les paramètres de la fonction SND_SYNC, SND_ASYNC, SND_NOSTOP, etc... ?? J'ai laissé par défaut, SND_SYNC.
    Merci.

  7. #7
    Expert confirmé

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Par défaut
    A tu bien les fichiers son sur chaque postes?
    Si tes fichier son sont enregistré dans le répertoire Audio, qui lui se trouve dans le même repertoire que ton .exe alors il faut mettre ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PlaySound(Application->ExeName + "\\..\\audio\\nomDuFichierWav.wav",NULL, SND_SYNC);

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

Discussions similaires

  1. un serveur /plusieurs clients
    Par Bathou dans le forum Réseau
    Réponses: 43
    Dernier message: 20/11/2012, 17h37
  2. réponse d'un serveur à un client
    Par GerardJ dans le forum Web & réseau
    Réponses: 3
    Dernier message: 11/11/2008, 14h21
  3. Script serveur , plusieurs clients
    Par youcef81 dans le forum Programmation et administration système
    Réponses: 0
    Dernier message: 06/11/2007, 15h04
  4. Réponses: 72
    Dernier message: 05/12/2005, 10h45
  5. Plusieurs clients et un serveur
    Par mzt.insat dans le forum Développement
    Réponses: 2
    Dernier message: 13/10/2005, 15h01

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