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

Delphi Discussion :

TIdHTTP récupération de la première ligne du serveur avec gestion des socket error


Sujet :

Delphi

  1. #1
    Membre habitué
    Homme Profil pro
    Owner
    Inscrit en
    Décembre 2004
    Messages
    466
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Owner
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2004
    Messages : 466
    Points : 137
    Points
    137
    Par défaut TIdHTTP récupération de la première ligne du serveur avec gestion des socket error
    Bonjour,
    J'ai créé des petits serveurs Web/Wifi équipés de sondes de température.
    A l'appel de l'IP, ceux-ci m'affichent une ligne indiquant la température.
    J'ai écris une petite appli qui scanne les différentes IP pour récupérer les températures de chaque serveur.
    Cela fonctionne bien, mais je n'arrive pas à gérer l'exception socket error quand un serveur n'est pas disponible
    J'ai testé plusieurs variantes mais sans résultat...
    Voici le
    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
     
    procedure DownloadHTTP(const AUrl : string; out DestStream: TStream);
    begin
      with TIdHTTP.Create(Application) do
      try
        try
          Get(AUrl, DestStream);
        except
          on e: Exception do
            MessageDlg(Format('Erreur : %s',[e.Message]), mtInformation, [mbOK], 0);
        end;
      finally
        Free;
      end;
    end;
     
    procedure TForm1.Timer1Timer(Sender: TObject);
    var
      Fs : TFileStream;
      F : textfile;
    begin
      for I := 1 to NProbe do
      begin
     
           Fs := TFileStream.Create('temp.log', fmCreate);
            try
              DownloadHTTP('http://'+IPProbe[i-1], TStream(Fs));    //
     {          except
        ShowMessage(intToStr(IdHTTP.Response.ResponseCode));
              end;
              }
            finally
              Fs.Free;
              Memo1.Lines.loadfromfile('temp.log');
              Memo2.Lines.append( DateTimetoStr(now)+' '+ Memo1.Lines[0]);//,length(Memo1.Lines[0]-7,length(Memo1.Lines[0]-1)))  );
              LogGrid.Cells[0,logGrid.rowcount]:= DateTimetoStr(now);
            //  LogGrid.Cells[1,logGrid.rowcount]:= NameProbe[i-1];
              LogGrid.Cells[i,logGrid.rowcount]:= copy(Memo1.Lines[0],length(Memo1.Lines[0])-7,5) ;
              Memo1.Clear;
            end;
      end;
      LogGrid.rowcount:= LogGrid.rowcount+1;
    end;
    Ce que je souhaite en final c'est que l'erreur ne soit pas bloquante, mais que l'erreur s'affiche dans la table...

    Merci pour vos conseils
    PhilLu

  2. #2
    Membre habitué
    Homme Profil pro
    Owner
    Inscrit en
    Décembre 2004
    Messages
    466
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Owner
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2004
    Messages : 466
    Points : 137
    Points
    137
    Par défaut
    Voici la solution:
    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
     
    procedure DownloadHTTP(const AUrl : string; out DestStream: TStream);
    begin
      with TIdHTTP.Create(Application) do
      try
        try
          Get(AUrl, DestStream);
        except
          on e: Exception do
          if e.Message='Erreur de socket n°10060' then
         MessageDlg(Format('Erreur : %s',[e.Message]), mtInformation, [mbOK], 0);
        end;
      finally
        Free;
      end;
    end;
     
     
    procedure TForm1.Timer1Timer(Sender: TObject);
    var
      Fs : TFileStream;
      F : textfile;
    begin
      for I := 1 to NProbe do
      begin
           Fs := TFileStream.Create('temp.log', fmCreate);
            try
              DownloadHTTP('http://'+IPProbe[i-1], TStream(Fs));    //
               except
        ShowMessage(intToStr(IdHTTP.Response.ResponseCode));
              end;
     
              Fs.Free;
     
              Memo1.Lines.loadfromfile('temp.log');
              Memo2.Lines.append( DateTimetoStr(now)+' '+ Memo1.Lines[0]);
              LogGrid.Cells[0,logGrid.rowcount-1]:= DateTimetoStr(now);
              LogGrid.Cells[i,logGrid.rowcount-1]:= copy(Memo1.Lines[0],length(Memo1.Lines[0])-6,5) ;
              Memo1.Clear;
       end;

  3. #3
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 450
    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 450
    Points : 24 858
    Points
    24 858
    Par défaut
    je le compléterais ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
      except
        on EHTTPError: EIdHTTPProtocolException do
        begin
          MessageDlg(Format('Erreur HTTP : %s [%d]', [EHTTPError.ErrorMessage, EHTTPError.ErrorCode]), mtInformation, [mbOK], 0);      
        end;
        on ESockedError: EIdSocketError do // unit IdStack
        begin
          if ESocketError.LastError = 10060 then
            MessageDlg(Format('Erreur TCP : %s [%d]', [ESocketError.Message, ESocketError.LastError]), mtInformation, [mbOK], 0);
         end;
      end;
    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

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

Discussions similaires

  1. Sécuriser serveur multithread utilisant des socket tcp
    Par matthieu637 dans le forum Sécurité
    Réponses: 1
    Dernier message: 16/03/2009, 23h41
  2. Récupération première ligne de chaque groupe
    Par iza76 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 14/01/2008, 10h07
  3. [Serveur][Configuration] gestion des pseudos
    Par kivan666 dans le forum IRC / mIRC
    Réponses: 12
    Dernier message: 24/07/2006, 17h51
  4. Réponses: 2
    Dernier message: 12/10/2004, 13h04

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