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 :

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.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 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
  AContext.Connection.IOHandler.WriteLn('reponse_uniquement_au_client_sollicé');
et pour envoyer à tout le monde depuis un bouton :

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;
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