[Indy9] Gérer plusiseurs clients

Résolu
DjKill77 Messages postés 18 Date d'inscription jeudi 18 novembre 2004 Statut Membre Dernière intervention 17 septembre 2008 - 28 janv. 2008 à 21:45
OcHre Messages postés 44 Date d'inscription mercredi 23 mars 2005 Statut Membre Dernière intervention 26 avril 2008 - 2 févr. 2008 à 10:36
Bonsoir à toutes et à tous,

Je suis en train de coder une application qui connecte des clients à un unique serveur.
Mais je n'arrive pas à diiférencier les différents clients. J'imagine qu'il faut utiliser une TList, mais je n'arrive pas à voir comment l'implémenter et m'en servir.

En fait pour l'instant mon client se connecte à mon serveur, envoit des informations le concernant (pour l'identifier) et le serveur affiche tout cela dans une TStringGrid, et j'aimerais par la suite pouvoir sélectionner un client (dans ma TStringGrid) pour se "connecter" à celui ci.

Si quelqu'un pouvait éclairer ma lanterne ça serait super.
D'avance merci.

@+

17 réponses

OcHre Messages postés 44 Date d'inscription mercredi 23 mars 2005 Statut Membre Dernière intervention 26 avril 2008
31 janv. 2008 à 12:56
Salut, pour accéder à tes clients connectés tu n'as qu'à créer un
tableau de Tidpeerthread dans lequel tu places le thread créé à chaques
fois qu'un client se connecte. Avec ce système il est tres simple de
broadcaster un message à tous les clients.  Pour ce qui est
d"écouter" coté client le fait que les composants indy soient
bloquant  pose effectivement problème. Ce que je fais pour pallier
ça c'est de créer mon client dans un thread qui écoute en boucle.

Rions un peu en attendant la mort.
3
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
29 janv. 2008 à 10:32
Pourrais-tu nous en dire un peu plus sur les infos qui s'affichent dans ton grid
car entre les connectés, les dé-connectés et ceux qui ne sont pas là ??

cantador
0
DjKill77 Messages postés 18 Date d'inscription jeudi 18 novembre 2004 Statut Membre Dernière intervention 17 septembre 2008
29 janv. 2008 à 11:14
En fait, quand le client se connecte il envoi une chaine de caractères, avec son IP et son nom (au cas ou il y aurait par exemple 2 clients sur un même réseau LAN, qui auront par conséquent la même IP internet).
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
29 janv. 2008 à 11:56
Oui, mais tu ne réponds pas à la question suggérée..

Que deviennent ceux qui se déconnectent ?
Et ceux qui ne se sont pas connectés (les nouveaux par exemple)
Ceux là tu ne les vois donc pas ?

cantador
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
DjKill77 Messages postés 18 Date d'inscription jeudi 18 novembre 2004 Statut Membre Dernière intervention 17 septembre 2008
29 janv. 2008 à 12:02
Ah OK j'avais pas compris la question en fait, et bien ceux qui se déconnectent envoi un message au serveur pour lui dire "aurevoir" et les infos du client s'efface de la grid.

Quand il y en a un qui se connecte il dit "bonjour" et ses infos sont ajoutés dans la grid. Donc effectivement je ne vois pas les clients qui pourraient se connecter.

De plus, j'ai créée une classe Infoclt pour stocker toutes les informations du client, et j'ai mis dans une TList l'objet à chaque fois qu'il est créée, mais je n'arrive toujours pas à choisir un client pour intéragir avec celui ci...
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
29 janv. 2008 à 12:18
Donc, ton grid se rafraîchit au fur et à mesure des connect et des disconnect..
Mais à, la limite, ce n'est pas important..
Ce qu'il faut c'est la table des clients avec leurs infos de connexion  (visibles ou pas)  dans un conteneur et sur un doucle-clic sur la sélection de l'un d'entre eux tu exécutes la connexion (sur un poste en client/serveur) bien entendu si tu veux pouvoir en lancer plusieurs en même temps.

Et evidemment, il faut être admin...

cantador
0
DjKill77 Messages postés 18 Date d'inscription jeudi 18 novembre 2004 Statut Membre Dernière intervention 17 septembre 2008
29 janv. 2008 à 13:06
En fait je ne veux pas me connecter à tous les clients en même temps, je veux juste en choisir un seul travailler avec celui ci, le fermer, et en reprendre un autre....

De plus j'ai omis de précisier que je ne veux pas inverser la connexion, pour éviter les problèmes de firewall, routeur car les clients ne seront pas forcément des admins réseaux.
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
29 janv. 2008 à 20:46
"je veux juste en choisir un seul travailler avec celui ci, le fermer, et en reprendre un autre...."

Oui, oui en fait c'est tout à fait çà..

eh bien, c'est pas trop difficile, donc au boulot,
stockage des cliens dans un conteneur (Une TListBox par exemple)
et un petite procédure évenementielle sur le double-clic etc etc..

cà y est déjà terminé !
Whaouhhhhh !

cantador
0
DjKill77 Messages postés 18 Date d'inscription jeudi 18 novembre 2004 Statut Membre Dernière intervention 17 septembre 2008
29 janv. 2008 à 22:24
Ok, mais ce que je n'arrive pas à saisir c'est comment dire à au serveur tu parle à ce client là .... je ne peux pas le faire avec l'IP car il faudrait réouvrir une nouvelle connexion, je pense que c'est plutot du côté du Thread mais je n'arrive pas vraiment à saisir ce que c'est et comment m'en servir....
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
30 janv. 2008 à 09:19
"je ne peux pas le faire avec l'IP.. "
pas l'IP, mais le login et le password...pour une connexion client c'est suffisant..

cantador
0
DjKill77 Messages postés 18 Date d'inscription jeudi 18 novembre 2004 Statut Membre Dernière intervention 17 septembre 2008
30 janv. 2008 à 12:07
...Mais je n'ai jamais parlé de login/password ; les clients se connectent tout seul au serveur et ensuite C le serveur qui en choisit un.

J'ai regardé sur le manuel d'Indy9, et j'ai vu une procédure pour envoyer un message à tous les clients (avec un Locklist), ca serait presque ça sauf que je veux choisir à qui envoyer les messages....mais là je sèche....
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
30 janv. 2008 à 14:02
Ah mais tu n'évoquais la possibilité d'envoyer des messages...
Sur ce souci, on est dans le même bateau.
Voir ma question sur le forum !

cantador
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
30 janv. 2008 à 18:33
0
DjKill77 Messages postés 18 Date d'inscription jeudi 18 novembre 2004 Statut Membre Dernière intervention 17 septembre 2008
30 janv. 2008 à 23:10
Oui je vais creuser dessus, mais une question me viens à l'esprit, comment faire pour qu'un client attende un message provenant du serveur?

Avec le serveur on a un AThread dans le OnExecute, mais quand je fais un ReadLn sur le client OnWork j'ai l'impression qu'il écoute rien du tout.....est ce normal et si oui comment contourner ce problème? (je précise qu'avant le ReadLn il n'y a pas de WriteLn, il attend juste qu'on lui dise de faire quelque chose)
0
OcHre Messages postés 44 Date d'inscription mercredi 23 mars 2005 Statut Membre Dernière intervention 26 avril 2008
31 janv. 2008 à 16:58
Pour le disconnect je ne pense pas que cela influe sur la libération du
serveur. Concernant client il est normal d'avoir des erreurs , tu peux
les prendre en compte (générer un message d'erreur spécifique suivant
les erreurs) ou pas puisque étant dans un bloc Try elles n'apparaîtront
pas. Ceci-dit je ne suis pas convaincu que de baser la boucle sur
l'etat du thread soit une bonne idée, il me semble en effet que le
client génère forcement un message d'erreur de type Timeout même si il
est mis à -1. Je testerai plutot si il est connecté ou pas (ce qui me
parait d'autant plus logique que la raison d'être ce thread est
d'écouter avec le client).

Rions un peu en attendant la mort.
0
DjKill77 Messages postés 18 Date d'inscription jeudi 18 novembre 2004 Statut Membre Dernière intervention 17 septembre 2008
1 févr. 2008 à 15:36
Pour ce qui est du Try, j'ai quand même des erreurs qui s'affichent...Il n'y a pas un moyen pour ne pas afficher les erreurs??

Et j'ai été obligé de faire la boucle comme je l'avais posté avant (while not terminated do) car si je la met sur le fait qu'il soit connecté ou non ça plante dès la connexion....
0
OcHre Messages postés 44 Date d'inscription mercredi 23 mars 2005 Statut Membre Dernière intervention 26 avril 2008
2 févr. 2008 à 10:36
Désolé j'ai pas été trés clair dans mon précédent post, ce que je
voulais dire c'est qu'il est normal d'avoir des messages d'erreurs en
mode debug mais ils ne devraient pas apparaitre  lors d'une
execution normale, du moins c'est ce que j'ai toujours constaté.

Rions un peu en attendant la mort.
0
Rejoignez-nous