[Indy] TCPclient-TCPserver : Identifier un client, lui envoyer des données, le déconnecter, ect
bonjour
je mettais juré de ne plus les toucher :mrgreen: je me vois contraint de m'y replonger, vu que ce sont les seuls composant TPC IP qui sont compatible Android :calim2:
j'aimerais savoir comment identifier un client en particulier
lors de la connexion je log dans une listbox les clients :
Code:
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.PeerIP = est l'ip du client
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 :
Code:
1 2
|
AContext.Connection.IOHandler.WriteLn('reponse_uniquement_au_client_sollicé'); |
et pour envoyer à tout le monde depuis un bouton :
Code:
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; |
mais comment décide d'envoyer à un seul client ? ou lister les n° de socket de chaque client ?
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 ;)