IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Web & réseau Delphi Discussion :

[Indy] TCPclient-TCPserver : Identifier un client, lui envoyer des données, le déconnecter, ect


Sujet :

Web & réseau Delphi

  1. #1
    Débutant
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    886
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 886
    Points : 330
    Points
    330
    Par défaut [Indy] TCPclient-TCPserver : Identifier un client, lui envoyer des données, le déconnecter, ect
    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

  2. #2
    Membre expérimenté
    Avatar de Gouyon
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 076
    Points : 1 521
    Points
    1 521
    Billets dans le blog
    5
    Par défaut
    Pour moi la réponse est un peu dans la question.
    Pour envoyer à un seul client il faut d'abord le sélectionner dans la liste puis se servir du TIDContext de ce client pour lui envoyer le message
    Il y a des jours où j'éprouve une haine profonde envers microsoft et Apple c'est pas mieux
    Mon modeste site et mes modestes oeuvres sont
    Rémi

  3. #3
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 447
    Points : 24 849
    Points
    24 849
    Par défaut
    Tu devrais étudier la démo complète de MICK605 du Défi Pascal utilisant un TIdTcpServer
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

Discussions similaires

  1. Réponses: 1
    Dernier message: 23/05/2019, 09h30
  2. [Serveur/Client] ObjectInputStream -> Lire des données envoyés
    Par moithibault dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 13/06/2011, 17h15
  3. Réponses: 3
    Dernier message: 14/07/2010, 14h27
  4. est ce que client peut envoyer des mail en php ?
    Par piloupi dans le forum Langage
    Réponses: 4
    Dernier message: 12/07/2009, 00h03
  5. Envoyer des données du client au serveur
    Par thetraveller dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 8
    Dernier message: 13/07/2006, 22h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo