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 :

Gestion de plusieurs clients Socket


Sujet :

C++Builder

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 17
    Points : 9
    Points
    9
    Par défaut Gestion de plusieurs clients Socket
    Bonjour a tous !
    Voila mon probleme !
    je voudrais que tous les clients puissent voir qui est connecter sur le chat !
    j'ai deja programmé ca :
    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
    void __fastcall TForm1::ServerSocket1ClientRead(TObject *Sender,
          TCustomWinSocket *Socket)
    {
      int i=0,j=0;
      AnsiString Mess,Pseudo;
      for(j=0; j<ServerSocket1->Socket->ActiveConnections; j++)
      {
        if(ServerSocket1->Socket->Connections[j]->ReceiveLength()>0)
        {
          Mess = ServerSocket1->Socket->Connections[j]->ReceiveText();
          if((Mess.c_str()[0]=='@')&&(Mess.c_str()[1]=='@')&&(Mess.c_str()[2]=='@')&&(Mess.c_str()[3])=='@')
          {
            Pseudo=Mess.SubString(5,20);
            ServerSocket1->Socket->Connections[i]->SendText(ClientsCo->Lines->Add(Pseudo));
          }
          else
          {
            for (i=0; i<ServerSocket1->Socket->ActiveConnections; i++)
            {
              if(ServerSocket1->Socket->Connections[i]->Connected)
              {
                ServerSocket1->Socket->Connections[i]->SendText(Mess);
              }
            }
          }
        }
      }
    }
    Et la, j'aimerai que le serveur envoie la liste des pseudo a tous les clients pour etre affiché dans un TMemo
    Et le petit plus serai d'enlever le pseudo une fois déconnecté mais ca, j'essairai de le résoudre une fois que j'aurai gerer les Clients
    Voila si quelqu'un a une idée ?

  2. #2
    Responsable Magazine

    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 : 39
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Points : 22 087
    Points
    22 087
    Par défaut
    Salut,
    pour cela il faut que ton serveur garde une liste des pseudo connecté et la renvoie à chaque connexion/envoie de pseudo/déconnexion
    Pour le format d'envoi, c'est à toi de le définir, comme tu la fait pour l'envoie d'un pseudo d'un client au serveur (via les @@@@).

    sinon tu peut aussi juste envoyer le seul pseudo qui vient de se connecter/modifier/déconnecté et c'est le client qui met à jour ça liste lui même.
    Quand une réponse vous a été utile, pensez à utiliser le nouveau système de notation

    Lisez le magazine de developpez.com.
    Mes tutos : http://pottiez.developpez.com

    La FAQ BCB -> 642 Questions/Réponses, si vous voulez participer, contactez moi. Aide de BCB6 en français

    N'oubliez pas que l'aide existe et est affichée sous simple pression de la touche F1 , une touche c'est plus rapide que tout un message .

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 17
    Points : 9
    Points
    9
    Par défaut
    Oui c'est ce que je voulais mais j'arrive pas a trouver le moyen de faire le stockage, l envoi aux clients ...

  4. #4
    Responsable Magazine

    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 : 39
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Points : 22 087
    Points
    22 087
    Par défaut
    Et bien pour le stockage, un simple vector de string de la stl devrais faire l'affaire, si tu ne connait pas, c'est très pratique, c'est un tableau dynamique, c'est a dire que tu peut ajouter et retirer autant de case que tu veut a tout moment (en gros)

    Pour l'envoi, il suffit d'une chaine avec un début spécial et un sparateur spécial entre chaque pseudo
    Quand une réponse vous a été utile, pensez à utiliser le nouveau système de notation

    Lisez le magazine de developpez.com.
    Mes tutos : http://pottiez.developpez.com

    La FAQ BCB -> 642 Questions/Réponses, si vous voulez participer, contactez moi. Aide de BCB6 en français

    N'oubliez pas que l'aide existe et est affichée sous simple pression de la touche F1 , une touche c'est plus rapide que tout un message .

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 17
    Points : 9
    Points
    9
    Par défaut
    Merci je vais esséyer

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 17
    Points : 9
    Points
    9
    Par défaut
    Je n'y arrive pas ...
    J'ai déclaré :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    Listeco = new TStringList;
    }
    Pour qu'il soit déclarer de partout.
    Et j'ai a peu pres trouvé le moyen de rajouter des infos :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Listeco->AddStrings(......);
    J'arrive pas trop a commencé, et ou mettre le code pour ajouté le pseudo a la listeco.

  7. #7
    Responsable Magazine

    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 : 39
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Points : 22 087
    Points
    22 087
    Par défaut
    Utilise plutot le vector :

    dans ton .h :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #include <vector>
     
    class TForm1
    ...
    private:
     std::vector<std::string> vectPseudo;
    ...
    A chaque fois que tu reçoit un pseudo (dans le .cpp à l'endroit ou tu revoit le pseudo à tout les clients dans ton premier post):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    vectPseudo.push_back(pseudo);
    lorsque tu dois supprimer un pseudo :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    vectPseudo.erase(vectPseudo.find(pseudo));
    Quand une réponse vous a été utile, pensez à utiliser le nouveau système de notation

    Lisez le magazine de developpez.com.
    Mes tutos : http://pottiez.developpez.com

    La FAQ BCB -> 642 Questions/Réponses, si vous voulez participer, contactez moi. Aide de BCB6 en français

    N'oubliez pas que l'aide existe et est affichée sous simple pression de la touche F1 , une touche c'est plus rapide que tout un message .

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 17
    Points : 9
    Points
    9
    Par défaut
    D'accord merci pour l'aide jvais esseyer !

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 17
    Points : 9
    Points
    9
    Par défaut
    A chaque fois que tu reçoit un pseudo (dans le .cpp à l'endroit ou tu revoit le pseudo à tout les clients dans ton premier post):
    Code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    vectPseudo.push_back(pseudo);
    La fonction me renvoie une erreur ...

  10. #10
    Responsable Magazine

    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 : 39
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Points : 22 087
    Points
    22 087
    Par défaut
    Salut, pour passer un AnsiString en std::string il faut faire ceci :
    ce qui donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    vectPseudo.push_back(string(pseudo.c_str()));
    Quand une réponse vous a été utile, pensez à utiliser le nouveau système de notation

    Lisez le magazine de developpez.com.
    Mes tutos : http://pottiez.developpez.com

    La FAQ BCB -> 642 Questions/Réponses, si vous voulez participer, contactez moi. Aide de BCB6 en français

    N'oubliez pas que l'aide existe et est affichée sous simple pression de la touche F1 , une touche c'est plus rapide que tout un message .

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 17
    Points : 9
    Points
    9
    Par défaut
    Désolé mais ca ne marche tjrs pas :

  12. #12
    Responsable Magazine

    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 : 39
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Points : 22 087
    Points
    22 087
    Par défaut
    C'est parce que ce n'est pas String avec un S mais string avec un s
    Quand une réponse vous a été utile, pensez à utiliser le nouveau système de notation

    Lisez le magazine de developpez.com.
    Mes tutos : http://pottiez.developpez.com

    La FAQ BCB -> 642 Questions/Réponses, si vous voulez participer, contactez moi. Aide de BCB6 en français

    N'oubliez pas que l'aide existe et est affichée sous simple pression de la touche F1 , une touche c'est plus rapide que tout un message .

  13. #13
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 17
    Points : 9
    Points
    9
    Par défaut
    Sans paraitre lourd ...
    Ca ne marche tjrs pas :/
    il me dit : E2268 Appel a une fonction non defini string
    etc ...
    il me semble qu'il manque un argument dans la fonction puisqu'il me demande un 'x' je crois que c'est la source
    mais je comprend pas laquel

  14. #14
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 17
    Points : 9
    Points
    9
    Par défaut
    Ca marche comme ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    vectPseudo.push_back(Pseudo.c_str());

  15. #15
    Responsable Magazine

    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 : 39
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Points : 22 087
    Points
    22 087
    Par défaut
    Oui ca marche aussi comme ça, en fait j'avais oublié qu'il fallait mettre std:: devant string donc normalement ceci marche aussi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    vectPseudo.push_back(std::string(pseudo.c_str()));
    Quand une réponse vous a été utile, pensez à utiliser le nouveau système de notation

    Lisez le magazine de developpez.com.
    Mes tutos : http://pottiez.developpez.com

    La FAQ BCB -> 642 Questions/Réponses, si vous voulez participer, contactez moi. Aide de BCB6 en français

    N'oubliez pas que l'aide existe et est affichée sous simple pression de la touche F1 , une touche c'est plus rapide que tout un message .

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

Discussions similaires

  1. Plusieurs client Socket sur la même serveur
    Par Jeams dans le forum NetBeans
    Réponses: 0
    Dernier message: 27/02/2011, 21h19
  2. un Tserversocket pour plusieurs clients socket?
    Par andyafrique dans le forum C++Builder
    Réponses: 2
    Dernier message: 05/10/2006, 21h02
  3. [NIO] envoie d'image à plusieurs client via socket
    Par robert_trudel dans le forum Entrée/Sortie
    Réponses: 1
    Dernier message: 01/10/2006, 23h11
  4. Réponses: 72
    Dernier message: 05/12/2005, 10h45
  5. Réponses: 9
    Dernier message: 17/04/2004, 16h32

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