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 :

D�connecter proprement un client


Sujet :

C++Builder

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre confirm�
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    162
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 162
    Par d�faut D�connecter proprement un client
    Bonjours,
    J'ai cr�e un serveur avec borland, qui permet de r�ceptionner des messages venant de diff�rents clients, cependant je me trouve devant un probl�me / erreur lorsqu'un client se d�connecte ou lorsque que je souhaite stopp� l'�coute de mon serveur :

    - Le code fonctionne pour 1 client mais quand j'ai 2 client en simultan� et que j'arr�te mon serveur j'ai l'erreur suivante :

    EListeError indice hors limite (1)

    Fonction pour stopper l'�coute du serveur
    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::Arrter1Click(TObject *Sender)
    {
    TListItem * LI ;
    int nbClients = Server1->Socket->ActiveConnections-1;
    ShowMessage("Nbclients : " +IntToStr(nbClients));
     
     for(int i =0;i<=nbClients;i++) 
     {
     
            //On récup la socket a fermé en fonction du client
            //Client 1 : Connections[0]  = 408
            //Client 2 : Connections[1]  = 412
            int SocketClients = Server1->Socket->Connections[i]->SocketHandle;
            Server1->Socket->Connections[i]->SendText("quit");
            //message de test
            ShowMessage("Fermeture SocketHandle : " +IntToStr(SocketClients)+" connection[" + IntToStr(Server1->Socket->Connections[i])+"]");
     
            //effacer la ligne correspondant au client déconnecté
            LI = ListView1->FindCaption(0,IntToStr(SocketClients),false,true,false);
            LI->Delete();
           //deconnecter le client en fonction de sa socket
            Server1->Socket->Connections[i]->Disconnect(SocketClients);
     }
     
    Server1->Socket->Close();
    Server1->Active = false;
    Form2->FlagListen = false;
    StatusBar1->Panels->Items[3]->Text = "Status : innactif ";
    Fonction d�connexion du 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
    void __fastcall TForm1::Server1ClientDisconnect(TObject *Sender,
          TCustomWinSocket *Socket)
    {
     TListItem * LI;
     int SocketClient = Socket->SocketHandle;
     //affichage test
     ShowMessage("Fermeture SocketHandle : " +IntToStr(SocketClient));
     
    //On ferme la socket ouverte
    Socket->CleanupInstance();
    Socket->Free();
    Socket->Disconnect(SocketClient);
     //Server1->Socket->Close();
     
     //effacer la ligne du Listview correspondant au cleint déconnecté
     LI = ListView1->FindCaption(0,IntToStr(SocketClient),false,true,false);
     LI->Delete();
     
    }

  2. #2
    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
    Hello
    il me semble que :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    int nbClients = Server1->Socket->ActiveConnections-1;
    est mis a jour par le composant donc quand dans ta boucle
    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
     
    for(int i =0;i<=nbClients;i++) 
     {
     
            //On récup la socket a fermé en fonction du client
            //Client 1 : Connections[0]  = 408
            //Client 2 : Connections[1]  = 412
            int SocketClients = Server1->Socket->Connections[i]->SocketHandle;
            Server1->Socket->Connections[i]->SendText("quit");
            //message de test
            ShowMessage("Fermeture SocketHandle : " +IntToStr(SocketClients)+" connection[" + IntToStr(Server1->Socket->Connections[i])+"]");
     
            //effacer la ligne correspondant au client déconnecté
            LI = ListView1->FindCaption(0,IntToStr(SocketClients),false,true,false);
            LI->Delete();
           //deconnecter le client en fonction de sa socket
            Server1->Socket->Connections[i]->Disconnect(SocketClients);
     }
    lors de la disconnection du socket la propri�t� ActiveConnections a �t� d�cr�ment�e de 1 --> Erreur lors de la boucle
    j'utiliserais plut�t une boucle du type while
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    while (ServerSocket1->Socket->ActiveConnections>0) {
    TCustomWinSocket*  SocketClient = ServerSocket1->Socket->Connections[0];
    ServerSocket1->Socket->Connections[0]->Close();
    try
     {
      delete SocketClient;  //ne pas oublier la destruction du socket 
     }
     catch(Exception &E)
     {
     }
    cdlt
    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

Discussions similaires

  1. [XL-2000] "l'objet invoqu� s'est d�connect� de ses clients"
    Par Noe06 dans le forum Macros et VBA Excel
    R�ponses: 0
    Dernier message: 18/07/2012, 09h54
  2. [XL-2010] L'objet invoqu� s'est d�connect� de ses clients
    Par kesimon63 dans le forum Macros et VBA Excel
    R�ponses: 7
    Dernier message: 13/06/2012, 14h44
  3. R�ponses: 16
    Dernier message: 09/12/2011, 16h17
  4. L'objet invoqu� s'est d�connect� de ses clients.
    Par Sigmax dans le forum IGN API G�oportail
    R�ponses: 0
    Dernier message: 29/06/2011, 15h50
  5. [XL-2002] erreur automation. L'objet �voqu� s'est d�connect� de ses clients
    Par marcelisa2 dans le forum Macros et VBA Excel
    R�ponses: 0
    Dernier message: 18/01/2011, 10h04

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