Serveur Indy10 avec Delphi 2009 !! cas oublié!!! [Résolu]

Signaler
Messages postés
15
Date d'inscription
dimanche 27 mai 2007
Statut
Membre
Dernière intervention
30 mars 2010
-
Messages postés
15
Date d'inscription
dimanche 27 mai 2007
Statut
Membre
Dernière intervention
30 mars 2010
-
Bonjour,
J'ai réalisé un soft (pas encore terminé) avec Delphi 2009 "et" Indy10.
Donc j'ai une partie client et une partie serveur, avec TidTCPServer et TidTCPClient.
pour ce qui est du client pas de grand problème, mais le serveur, là où est le problème, et ça intervient lorsque par exemple j'ai trois pc connecté au serveur, mais le serveur pour une raison ou pour une autre, il se déconnecte (reboot du pc ou autre), mais bien et logiquement il se reconnecte après, mais sauf que là, si les clients envoies des messages le serveur ne les reçoit pas, et le serveur ne peut pas envoyer de messages clients, car la List des AContexts du TidTCPServer est vide.

Donc comment pourrais-je reconnecter les clients? (sachat qu'aucun évènement n'est déclenché automatiquement pou faire savoir aux clients la reconnexion du serveur)
Et/ou comment le serveur pourra reconstruire la liste , sachant que je peux connaitre les "nickname" des clients et le port d'accès !!??

4 réponses


Resalut,

*Je n'ai pas les composants Indy mais il me semble qu'il y a un évènement OnDisconnect qui se déclenche quand le serveur se ferme: Si c'est le cas il suffit de l'utiliser pour signaler la déconnection du serveur aux clients.

*16 Clients pour un serveur c'est rien .

*
après la reconnexion du serveur, puis-je reconstruire "manuellement" la liste AContexts.
: Regarde ici. On peut y lire apres traduction que la classe TIdContext implémente un contexte de session représentant les connexions client à un serveur multi-thread TCP. De ce fait tu n'as donc rien à reconstruire : Tout se fera par lui meme comme pour la première connection.

Ceci-dit si tu tiens à recréer cette liste (En supposant que tu puisses le faire, ce qui n'est pas sur), hormis le fait que les IP de tes clients peuvent changer le temps que le serveur se reboote, cela ne rétabliera absolument pas les connections. ca n'a rien à voir.

Salut,

Le problème que tu rencontres est normal : Supposons que deux personnes A et B se téléphonent et que B n'a pas le numéro de A.

1) Ainsi A appelle B.
2)A se fache avec B et B débranche sa ligne téléphonique. Conséquence la communication est coupée.
3)B rebranche sa ligne téléphonique. En faisant cette opération , la communication entre A et B ne redémarre pas. Pour cela il faut que A rappelle B.


Tu es dans le même cas de figure : En reconnectant ton serveur, tu le rends disponible mais les communications ne sont pas rétablies, c'est pour cela que la liste des AContexts est vide. Pour cela il faut que les clients se reconnectent sur le serveur.

Il va donc falloir revoir ta stratégie : Il faut prévenir les clients que le serveur s'est déconnecté et qu'ils doivent essayer de se reconnecter à lui.
Messages postés
15
Date d'inscription
dimanche 27 mai 2007
Statut
Membre
Dernière intervention
30 mars 2010

Bonjour,
C'est vrai je comprend bien le cas, mais si le serveur se déconnecte parceque l'utilisateur le "ferme normalement", alors il pourrait envoyer une requête aux clients leur disant de se reconnecter dans les temps à suivre (mais déjà est-ce "bien" que les clients (16) essaient d'envoyer des reqûetes (toutes les x secondes)).
Et bien-sûr, sinon, après la reconnexion du serveur, puis-je reconstruire "manuellement" la liste AContexts.
Messages postés
15
Date d'inscription
dimanche 27 mai 2007
Statut
Membre
Dernière intervention
30 mars 2010

Bon merci.
Je pense que vais essayer ces méthodes, ou en chercher d'autres.