bonjour
je mettais juré de ne plus les toucher je me vois contraint de m'y replonger, vu que ce sont les seuls composant TPC IP qui sont compatible Android
j'aimerais savoir comment identifier un client en particulier
lors de la connexion je log dans une listbox les clients :
AContext.Binding.PeerIP = est l'ip 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
20
21
22
23
24
25 procedure TForm1.IdTCPServer1Connect(AContext: TIdContext); var List : TIdContextList; begin ListBox1.Items.BeginUpdate; try ListBox1.Items.Add(AContext.Binding.PeerIP +':'+ AContext.Binding.PeerPort.ToString); finally ListBox1.Items.EndUpdate; end; if IdTCPServer1.Active then begin List := IdTCPServer1.Contexts.LockList; try Form1.Caption := 'Server - Client : ' + List.Count.ToString; finally IdTCPServer1.Contexts.UnlockList; end; end; end;
AContext.Binding.PeerPort.ToString = est le socket qu'ouvre le server pour communiquer avec le client, il est donc unique et c'est lui que je dois prendre en référence, mais comment l'utiliser ?
pour répondre à un client qui envoie des données, c'est facile, dans l’événement On_Execute, on fat :
et pour envoyer à tout le monde depuis un bouton :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 AContext.Connection.IOHandler.WriteLn('reponse_uniquement_au_client_sollicé');
mais comment décide d'envoyer à un seul client ? ou lister les n° de socket de chaque 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 var ListeContext : TList; i : integer; begin ListeContext := IdTCPServer1.Contexts.LockList; for i:=0 to ListeContext.Count-1 do begin TIdContext(ListeContext.Items[i]).Connection.IOHandler.WriteLn('msg à tous les clients'); end; IdTCPServer1.Contexts.UnlockList; end;
sinon je vois qu'ils n'ont toujours pas changé le principe de la réception de donnée chez le client : aucun Evènement ! je trouve tellement pratique d'avoir un évènement du style de On_Execute afin de recevoir les données du serveur, parce que là, on est obligé de créer un thread qui s'occupe de vérifier si un message a été reçu
si depuis le temps ils l'ont gardé ainsi, c'est que ça doit plaire à certaines personnes ...
merci pour vos réponses
Partager