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 :

TCP Login et executer des commandes.


Sujet :

Web & réseau Delphi

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Juillet 2015
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Juillet 2015
    Messages : 64
    Points : 35
    Points
    35
    Par défaut TCP Login et executer des commandes.
    Bonjour,

    Je suis vraiment débutant et completement neuf ici au forum.

    J´ai un probléme avec une connection TCP.

    Je dois me connecter a un TCP port, puis envoyer une séquence pour le login, d´aprés que le login est ok je recoit un string de retour.
    Jusque la tout fonctionne.

    Mais maintenant mon probléme, je dois rester connecté avec mon login et mot de passe, est dans cette session je dois continuer an envoyer des sequences par ex. port1on ou port1off.

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    procedure TForm4.Button1Click(Sender: TObject);
    Var
      Result, Login, port1on, port1off: string;
     
    begin
      // IdTCPClient1.Host := 'localhost';
      // IdTCPClient1.Port := 6354;
      // IdTCPClient1.ConnectTimeout := 2000;
     
      Login := #$01#$02#$55#$53#$45#$52#$3a#$61#$64#$6d#$69#$6e#$20#$20#$20#$20#$20#$20#$20#$20#$20#$20#$20#$20#$20#$20#$20#$20#$50#$57#$44#$3a#$61#$64#$6d#$69#$6e#$20#$20#$20#$20#$20#$20#$20#$20#$20#$20#$20#$20#$20#$20#$20#$20#$20#$01#$00;
      port1on :=
        #$04#$01#$02#$2#$3c#$00#$0a#$01#$ff#$00#$00#$00#$00#$00#$00#$00#$fe;
      port1off :=
        #$04#$01#$02#$2#$3c#$00#$0a#$01#$00#$00#$00#$00#$00#$00#$00#$00#$fe;
     
      if IdTCPClient1.Connected = False then
        IdTCPClient1.Connect
      else
      begin
        try
     
          IdTCPClient1.IOHandler.Write(Login);
          repeat
          until not IdTCPClient1.IOHandler.CheckForDataOnSource(5000);
     
          // return whatever was actually read
          Result := IdTCPClient1.IOHandler.InputBufferAsString;
          Memo1.Lines.Add(Result);
        finally
          IdTCPClient1.Disconnect;
        end;
      end;
    end;

  2. #2
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 430
    Points
    28 430
    Par défaut
    il suffit de séparer la connexion, la lecture/écriture et la déconnexion

    Button1 -> IdTCPClient1.Connect + envoi du Login
    Button2 -> envoi port1on ou off
    Button3 -> IdTCPClient1.Disconnect;

    tout cela avec une gestion d'erreur pour gérer l'état Enabled des boutons
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Juillet 2015
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Juillet 2015
    Messages : 64
    Points : 35
    Points
    35
    Par défaut
    Citation Envoyé par Paul TOTH Voir le message
    il suffit de séparer la connexion, la lecture/écriture et la déconnexion

    Button1 -> IdTCPClient1.Connect + envoi du Login
    Button2 -> envoi port1on ou off
    Button3 -> IdTCPClient1.Disconnect;

    tout cela avec une gestion d'erreur pour gérer l'état Enabled des boutons
    Tout d´abort merci pour la réponse.

    Puuh, savez-vous ou je peut trouver un example, pour séparer tout cela?
    Bon j´ai essayé mais...
    La connection fonctionne, le login aussi,
    La lecture "semble" fonctionner séparément avec un timer. Mais a l´envoi du "port1on" rien ne bouge, la tramme n´est méme pas envoyé.

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
     
    procedure TForm4.LoginClick(Sender: TObject);
     
    begin
      // IdTCPClient1.Host := 'localhost';
      // IdTCPClient1.Port := 6354;
      // IdTCPClient1.ConnectTimeout := 2000;
     
      Login1 := #$01#$02#$55#$53#$45#$52#$3a#$61#$64#$6d#$69#$6e#$20#$20#$20#$20#$20#$20#$20#$20#$20#$20#$20#$20#$20#$20#$20#$20#$50#$57#$44#$3a#$61#$64#$6d#$69#$6e#$20#$20#$20#$20#$20#$20#$20#$20#$20#$20#$20#$20#$20#$20#$20#$20#$20#$01#$00;
      IdTCPClient1.IOHandler.Write(Login1);
      Timer1.Enabled := True;
     end;
     
    procedure TForm4.Timer1Timer(Sender: TObject);
    Begin
      Try
         repeat
           until not IdTCPClient1.IOHandler.CheckForDataOnSource(500);
           // return whatever was actually read
          Result := IdTCPClient1.IOHandler.InputBufferAsString;
          Memo1.Lines.Add(Result);
         finally
     
       end;
    end;
     
    procedure TForm4.Button1Click(Sender: TObject);
    begin
     
       port1on :=
        #$04#$01#$02#$2#$3c#$00#$0a#$01#$ff#$00#$00#$00#$00#$00#$00#$00#$fe;
     
       //if IdTCPClient1.Connected = False then
       // IdTCPClient1.Connect
       //   else
          IdTCPClient1.IOHandler.Write(port1on);
    end;
     
    procedure TForm4.Button2Click(Sender: TObject);
    begin
    port1off := #$04#$01#$02#$2#$3c#$00#$0a#$01#$00#$00#$00#$00#$00#$00#$00#$00#$fe;
     
      // if IdTCPClient1.Connected = False then
      //  IdTCPClient1.Connect
      //else
     
          IdTCPClient1.IOHandler.Write(port1off);
     
    end;
     
    procedure TForm4.ConnectClick(Sender: TObject);
    begin
         IdTCPClient1.Host := 'localhost';
         IdTCPClient1.Port := 55006;
         IdTCPClient1.ConnectTimeout := 2000;
     
         IdTCPClient1.Connect;
         Memo1.lines.add(Format('Connexion au serveur TCP : %s/%d (TimeOut : %d)',[IdTCPClient1.Host, IdTCPClient1.Port, IdTCPClient1.ConnectTimeout]));
    end;
     
    procedure TForm4.IdTCPClient1Status(ASender: TObject; const AStatus: TIdStatus;
      const AStatusText: string);
     
    begin
      Memo1.Lines.Add(AStatusText);
    end;

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Juillet 2015
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Juillet 2015
    Messages : 64
    Points : 35
    Points
    35
    Par défaut
    Hmm, personne peut m´aider?

  5. #5
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 430
    Points
    28 430
    Par défaut
    sujet largement abordé déjà

    ici par exemple
    http://www.developpez.net/forums/d10...t-idtcpclient/
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Juillet 2015
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Juillet 2015
    Messages : 64
    Points : 35
    Points
    35
    Par défaut
    Citation Envoyé par Paul TOTH Voir le message
    sujet largement abordé déjà

    ici par exemple
    http://www.developpez.net/forums/d10...t-idtcpclient/
    Hmm, ok merci pour l´info!

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Juillet 2015
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Juillet 2015
    Messages : 64
    Points : 35
    Points
    35
    Par défaut
    Bonjour a tous,

    Je viens de tester avec un code demo de chat,
    le login fonktionne, mais mon module n'aktionne pas.
    J'ai une application (packetsender) avec la quelle j'arrive à actionner le module, mais seulement en persistent TCP mode.

    Ici des screens:
    Screen1:
    Si je coche a droite "persistent TCP", et j'envoi la séquence TCP-Login2, il y a un popup qui s'ouvre. (screen-2)
    Screen2:Nom : screen-1.jpg
Affichages : 468
Taille : 278,7 Ko
    La réponse de TCP-Login2 est "V056" qui me dis que je suis connecté.
    Maintenant dans cette fenetre je lance la séquence TCP-EXO1-Port1-On, et mon module actionne port 1!

    Si je sélectionne pas ce mode "persistent TCP" il me fait le login et je recoit aussi la réponse "V056" qui me dis que je sui connecté,
    mais après ca il n'actionne pas le ou les ports.
    Images attachées Images attachées  

  8. #8
    Membre confirmé
    Avatar de alheuredudejeuner
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2005
    Messages : 376
    Points : 632
    Points
    632
    Billets dans le blog
    4
    Par défaut peux-tu nous donner le lien du code démo
    Bonjour

    Je te recommande vivement la Faq sur Indy, en particulier http://delphi.developpez.com/faq/?pa...-sur-un-client

    Si tu peux nous donner le lien de ta démo, je testerai.

    Cordialement

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Juillet 2015
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Juillet 2015
    Messages : 64
    Points : 35
    Points
    35
    Par défaut
    Citation Envoyé par alheuredudejeuner Voir le message
    Si tu peux nous donner le lien de ta démo, je testerai.

    Cordialement
    Tu as reçu du courrier

    a+
    Jeng

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Juillet 2015
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Juillet 2015
    Messages : 64
    Points : 35
    Points
    35
    Par défaut
    rebonjour,
    j´ai fait quelques tests et voici ce que je ne comprends pas.

    Avec le compo. socket ca fonctionne!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    procedure TfrmMain.Button2Click(Sender: TObject);
      var
        Data: AnsiString;
    begin
      Data := #$04#$01#$02#$23#$3c#$00#$0a#$01#$ff#$00#$00#$00#$00#$00#$00#$00#$fe; // Nachricht zusammenbauen, z.B. schalten
      Memo1.Lines.Add('Send2: '+Str2Hex(Data));
      ClientSocket1.Socket.SendText(Data);
    end;
    mais avec TIdTCPClient ca fonntionne pas!

    1er essai:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    procedure TfrmMain.Button2Click(Sender: TObject);
    Var
      port1on: string;
    begin
      port1on := #$04#$01#$02#$23#$3c#$00#$0a#$01#$ff#$00#$00#$00#$00#$00#$00#$00#$fe;
      IdTCPClient1.IOHandler.Write(port1on);
    end;
    2e essai:
    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
    26
    27
    28
     
    Procedure  TfrmMain.Button2Click(Sender: TObject);
    Var
        buf: TidBytes;
     
    begin
      SetLength(Buf, 17);
      FillBytes(Buf, 17, 0);
      Buf[0] := $04;
      Buf[1] := $01;
      Buf[2] := $02;
      Buf[3] := $23;
      Buf[4] := $3c; // para1; //Exo1
      Buf[5] := $00;
      Buf[6] := $0a;
      Buf[7] := $01;
      Buf[8] := $ff;//port1;
      Buf[9] := $00;//port2;
      Buf[10] := $00;//port3;
      Buf[11] := $00;//port4;
      Buf[12] := $00;//port5;
      Buf[13] := $00;//port6;
      Buf[14] := $00;//port7;
      Buf[15] := $00;//port8;
      Buf[16] := $fe;//para3;
     
      //IdTCPClient1.IOHandler.Write(Buf); <---- fonctionne pas
      IdTCPClient1.Socket.Write(buf); <---- fonctionne pas non plus
    je sais plus mais...

  11. #11
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 037
    Points : 40 941
    Points
    40 941
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    j'ai juste lu en diagonale mais pour l'essai 1 : port1on ne devrait pas être plutôt un AnsiString ?
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  12. #12
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 430
    Points
    28 430
    Par défaut
    c'est pas plutôt idTCPClient.WriteBuffer ou une fonction similaire ?
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  13. #13
    Nouveau membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Juillet 2015
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Juillet 2015
    Messages : 64
    Points : 35
    Points
    35
    Par défaut
    Je vous remercie tous pour votre support!
    Mais j'ai du abandoner la solution Indy aprés plus de 4 semaines sans solution!
    J´ai migré vers synapse, qui a fonctionné directement au premmier essai!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 28/11/2007, 23h07
  2. executer des commandes DOS à partir un fichier *.bat
    Par younek dans le forum Scripts/Batch
    Réponses: 3
    Dernier message: 21/10/2007, 12h21
  3. Exécution des commandes à distance
    Par diamonds dans le forum Général Conception Web
    Réponses: 6
    Dernier message: 07/12/2006, 13h46
  4. executer des commandes
    Par hawaks dans le forum Général Python
    Réponses: 3
    Dernier message: 17/12/2005, 12h41
  5. Réponses: 3
    Dernier message: 02/09/2002, 18h49

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