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 :

Comment gérer une auto-connection continue avec IdTCPClient ?


Sujet :

Web & réseau Delphi

  1. #1
    Membre éprouvé
    Homme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Octobre 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Paramétreur de progiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 970
    Par défaut Comment gérer une auto-connection continue avec IdTCPClient ?
    Bonjour,

    Voici mon code :
    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
     
    procedure TMain.Timer1Timer(Sender: TObject);
    begin
         Timer1.Enabled := false;
         if IdTCPClient1.Connected then
         begin
     
         end
         else
         begin
              Log(Format('Tentative de connexion au serveur TCP : %s/%d (TimeOut : %d)',[IdTCPClient1.Host, IdTCPClient1.Port, IdTCPClient1.ConnectTimeout]));
              try
                   IdTCPClient1.Connect;
              except
                   on E : Exception do
                   begin
                        Log(E.Message);
                   end;
              end;
         end;
         Timer1.Enabled := true;
    end;
    Le problème, c'est qu'au bout de quelques tentatives, il m'affiche un message d'erreur :
    Socket Error # 10060
    Connection timed out.
    Savez-vous comment faire pour ne pas avoir le message d'erreur et continuer à essayer de se connecter indéfiniment ?

    Merci,
    ZiP

  2. #2
    Membre Expert

    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 935
    Par défaut
    Salut

    Tu pourrais essayer en UDP. Comme ca, si tu recois une réponse, c'est que le serveur est connecté et tu peux donc te connecter en TCP ... J'ai déja testé et ca marche bien ^^

    Bonne chance !

  3. #3
    Membre éprouvé
    Homme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Octobre 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Paramétreur de progiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 970
    Par défaut
    Bonjour,

    Il n'y a pas une autre méthode, plus simple ?

    En fait, il me provoque une exception que je n'arrive pas à gérer et qui me provoque l'ouverture d'une fenêtre d'erreur.

    Je souhaiterai si on n'est pas connecté, effectuer une tentative de connexion qui si elle échoue est relancée jusqu'à ce qu'elle soit à nouveau établie et ceci en permanence.

    C'est ce qu'est censé faire mon bout de code dans mon premier post mais celui-ci ne semble pas fonctionner...

    J'ai peut-être fait une erreur mais je ne la vois pas !

    Merci,
    ZiP

  4. #4
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 982
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    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 982
    Par défaut
    Personnellement, j'utilise TTcpClient (pas celui de Indy), je n'ai aucun soucis de connexion (ou de reconnexion auto, j'en ai fait une aussi)

    Si il échoue, cela renvoie False, tout simplement

    J'ai utilisé aussi le TIdTcpClient, il y a bien longtemps (D6 je crois), il ne me semblait pas qu'il affichait des Messages mais bien des Exeptions, as-tu activé "l'arrêt sur les exceptions" dans le Déboggueur Delphi ?

    J'avais une version en français, c'est quelle version de Indy, cela joue bcp, ils se sont amusés parfois, ... c'est un message du TIdStack Global !

    Essaye de différencer les EIdSocketError et les Exceptions !
    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

  5. #5
    Membre éprouvé
    Homme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Octobre 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Paramétreur de progiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 970
    Par défaut
    Bonjour,

    Je crois que c'est parce que j'avais mis le TimeOut à -1 !

    ZiP

  6. #6
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 982
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    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 982
    Par défaut
    Euh, valeur par défaut c'est -1 justement (IdTimeoutDefault)

    Regarde ce que vaut TIdAntiFreezeBase.ShouldUse
    En fonction de cette valeur,
    True: -1 = 120000
    False: le TimeOut par défaut de WinSock !
    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

  7. #7
    Membre éprouvé
    Homme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Octobre 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Paramétreur de progiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 970
    Par défaut
    Chez moi, le ConnectTimeout est par défaut à 0 pour le TIdTCPClient.

    ZiP

Discussions similaires

  1. Comment gérer une scrollBar vertical, avec un bouton?
    Par wolverine1987 dans le forum MFC
    Réponses: 6
    Dernier message: 06/05/2009, 11h43
  2. Comment gérer une temporalité avec une base ACCESS ?
    Par vincent.le dans le forum Requêtes et SQL.
    Réponses: 12
    Dernier message: 04/03/2009, 12h46
  3. Réponses: 3
    Dernier message: 16/12/2006, 12h59
  4. Réponses: 1
    Dernier message: 26/02/2005, 12h55
  5. Comment faire une division par 5 avec les decalages
    Par Zaion dans le forum Assembleur
    Réponses: 7
    Dernier message: 05/11/2004, 17h33

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