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

API, COM et SDKs Delphi Discussion :

Detecter si l'on a toujours la synchro sur son modem [Archives]


Sujet :

API, COM et SDKs Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de yoghisan
    Profil pro
    Inscrit en
    Février 2004
    Messages
    172
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 172
    Par défaut Detecter si l'on a toujours la synchro sur son modem
    Salut,

    Je viens de m'abonner chez Free et c'est la catas...
    J'aimerai savoir durant mon absent (devant mon ordi) si mon modem se déconnecte régulièrement, à quelle fréquence, etc...

    Je pose ici la question car je ne connais absolument à ce domaine...

    Comment faire pour savoir si son modem est toujours synchronisé ?

    Il faut que je fasse une fonction avec un retour boolean du style :
    function TesteSynchro: boolean;

    Merci de votre aide, David.

  2. #2
    Membre éclairé Avatar de declencher
    Inscrit en
    Mai 2003
    Messages
    441
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 441
    Par défaut
    Bonjour,

    Si tu as une machine que tu peux sur laquelle faire un ping, tu peux le faire à intervalle régulier, mais je doute que ce soit la méthode la propre.

  3. #3
    Membre Expert
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Par défaut


    http://delphi.developpez.com/faq/?pa...ctionconnexion


    Lien tout en bas à gauche de cette fenêtre

  4. #4
    Membre confirmé Avatar de yoghisan
    Profil pro
    Inscrit en
    Février 2004
    Messages
    172
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 172
    Par défaut
    Merci sub0 mais ce code ne convient pas car il ne permet pas de savoir si le modem est desynchronisé.

    Si tu as une inactivité d'un certain temps, le connexion internet est inactive alors que j'ai toujours la synchro...

    Quand je perds ma synchro alors que je serfais, le code dit que je suis toujours connecté...

    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
    unit Unit1;
     
    interface
     
    uses
      Windows, SysUtils, Forms, ExtCtrls, StdCtrls, Classes, Controls;
     
    type
      TForm1 = class(TForm)
        Timer1: TTimer;
        Label1: TLabel;
        Label2: TLabel;
        procedure FormCreate(Sender: TObject);
        procedure Timer1Timer(Sender: TObject);
      private
      public
        Instant: TDateTime;
        NbrDeconnection: integer;
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.DFM}
     
    Uses WinInet;
     
    function DetectionConnexion: boolean;
    var
      dwFlags: DWORD;
    begin
      dwFlags := INTERNET_CONNECTION_MODEM +
                 INTERNET_CONNECTION_LAN   +
                 INTERNET_CONNECTION_PROXY ;
      RESULT := InternetGetConnectedState(@dwFlags,0);
    end;
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      Instant := Now;
      NbrDeconnection := 0;
    end;
     
    procedure TForm1.Timer1Timer(Sender: TObject);
    var
      Compteur: integer;
    begin
      if DetectionConnexion
        then begin
          Label1.Caption := 'Connection active';
        end
        else begin
          Inc( NbrDeconnection );
          Label1.Caption := 'Connection désactivée';
        end;
     
      if NbrDeconnection<2
        then Label2.Caption := 'Il y a eu '+IntToStr(NbrDeconnection)+' déconnexion'
        else Label2.Caption := 'Il y a eu '+IntToStr(NbrDeconnection)+' déconnexions';
     
      Caption := FormatDateTime('hh"h "nn"min "ss"s "zzz"ms', Instant-Now)
    end;
     
    end.

  5. #5
    Membre Expert
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Par défaut
    Dans ce cas, essaye ça et dis-moi ce que tu obtiens :

    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
    //**************************************************
    //* test de connection Internet par Sébastien GENOS*
    //* http://www.perrysoft.org                       *
    //**************************************************
     
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, registry, ExtCtrls, StdCtrls;
     
    type
      TForm1 = class(TForm)
        Timer1: TTimer;
        Label1: TLabel;
        procedure Timer1Timer(Sender: TObject);
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.DFM}
    // Detec V1.01
    Function Detection_Connexion : Boolean;
    Var
     Reg: Treginifile;
     buff : integer;
    Begin
     Reg:=TreginiFile.Create('');
     Reg.rootkey:=HKEY_LOCAL_MACHINE;
     Reg.OpenKey('System\CurrentControlSet\Services\RemoteAccess', False) ;
     Reg.ReadBinaryData('Remote Connection',buff,16);
     if buff = 1 then  Detection_Connexion:=True else
        Detection_Connexion:=False;
     Reg.CloseKey;
     Reg.Free;
    End;
     
    procedure TForm1.Timer1Timer(Sender: TObject);
    begin
     if Detection_Connexion then Form1.Label1.Caption:='Connexion'
      Else Form1.Label1.Caption:='Pas de Connexion';
    end;
     
    end.
    Sinon, je possède une autre méthode de détection de connexion un peu plus complexe...

    Autrement, regarde cette page si tu trouves bonheur,
    à+

  6. #6
    Membre confirmé Avatar de yoghisan
    Profil pro
    Inscrit en
    Février 2004
    Messages
    172
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 172
    Par défaut
    Avec ton code, il me dit que je ne suis pas connecté alors que j'ai la synchro.

    Pour l'autre page, je suis entrain de regarder et rien de satisfaisant

    Je vais regarder un peu de coté ping comme le suggere "declencher".

  7. #7
    Membre Expert
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Par défaut
    Essaye ce dernier code alors et tiens moi au courant :

    http://sub0.developpez.com/delphi/netcheck.zip

    J'espère au moins que l'état de cette synchro est bien envoyé au système car si ton modem n'envoit pas cette info, tu ne risques pas de pouvoir obtenir son état... Sinon, je suis pas sûr, mais peut-être qu'il faudra chercher du côté des fonctions WMI...

  8. #8
    Membre confirmé Avatar de yoghisan
    Profil pro
    Inscrit en
    Février 2004
    Messages
    172
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 172
    Par défaut
    Ben non plus dommage mais c'est plus plus précis que le reste

  9. #9
    Membre Expert
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Par défaut
    Je crois que cela signifie que la méthode consiste à tester une url (avec un ping) dont on est certain de l'éxistence du serveur. Si on arrive pas à se connecter à ce serveur, c'est que le réseau est coupé (plutot la communication serveur client). Ci-dessous, voici une fonction Delphi qui permet d'éxécuter une url. Si tu ne reçois rien au retour, c'est que tu n'es plus connecté. En réalité, si le serveur cible est out (ce qui est quand même très rare avec certain), tu obtiendras le même résultat. La solution dans ce cas est de tester une autre url, tout simplement. Par exemple, effectue le test de connexion d'une page sur ton propre serveur, puis à la page d'acceuil de Google.com... Si possible, utilise une page web qui s'éxécute rapidement car l'inconvéniant de cette méthode est sa lenteur je crois et n'est pas prévue pour fonctionner dans un timer trop rapide...

    http://www.developpez.net/forums/vie...753885#1753885

    Cela te convient-il ?

  10. #10
    tintin22
    Invité(e)
    Par défaut
    j'ai une méthode mais c'est du bricolage, à laisser en dernier recours je crois que l'appli du modem possede une icone dans le systray de couleur verte, jaune, ou rouge selon l'etat de la synchro. L'idée c'est de tester la couleur, un genre de GetColor(X,Y), faut aussi connaitre la position de l'icone... voila voila

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 184
    Par défaut
    Perso, j'utilise la méthode du ping sur un site dont l'uptime est reconnu comme étant très élevé (pas besoin de vous dire que c'est pas "torry.net" hehe) afin de détecter la connexion à Internet. C'est pas parfait mais c'est proche.

    Tous les autres codes de vérifs ne sont pas fiables à 100% de toutes façons. Certains fonctionnent avec un modem standard mais pas avec adsl(PPOE) ou modem cable, etc. Bref , le ping est fiable dans un grosse proportion même si imparfait.

  12. #12
    Membre confirmé Avatar de yoghisan
    Profil pro
    Inscrit en
    Février 2004
    Messages
    172
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 172
    Par défaut
    Merci Sub0, j'ai essayé la dernière proposition que tu m'as fait. C'est celle qui me donne le plus de satisfaction comme le dit sfpx.

    Je ne pige pas grand chose au code tu as écrit mais juste assez pour arriver à mes fins.
    En cas de connexion, le retour de l'erreur HTTP est un peu long (20s), il faut donc un timer assez long sinon ca va.
    Comme ca, je pourrais donner à Free de stat sur mes déconnexions !

    Encore merci beaucoup Sub0 pour t'etre rendre aussi disponible et courtois pour moi. J'ai beaucoup apprécié tes gestes.

    Pour ilyes
    Avec Free, il n'y a rien dans la barre des taches.

  13. #13
    Membre Expert
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Par défaut
    Il doit y avoir moyen d'optimiser mon code car ce qui t'intérresse en fait, ce n'est pas le retour de la page web, mais simplement vérifier que la communication à internet soit dispo. Regarde dans le code source de la fonction GetHTML(), on vérifie d'abord si on accède au réseau avant d'effectuer la requête... cela peut suffir je pense. Déjà, pour commencer, tu peux simplifier le code comme ceci :
    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
    Uses Wininet;
     
    {----------------------------------------------------------------}
    Function IsConnect: Boolean;
    Var
      hSession, hfile: hInternet;
    Begin
      Result := False;
      hSession := InternetOpen('InetURL:/1.0',
        INTERNET_OPEN_TYPE_PRECONFIG, Nil, Nil, 0);
      If (Assigned(hsession)) Then Begin
        hfile := InternetOpenUrl(hsession,
          PChar('http://google.com/index.html'),
          Nil, 0, INTERNET_FLAG_RELOAD, 0);
        If (Assigned(hfile)) Then Begin
          Result := True;
          InternetCloseHandle(hfile);
        End;
      End;
      InternetCloseHandle(hsession);
    End;
     
    {----------------------------------------------------------------}
    Procedure TForm1.Timer1Timer(Sender: TObject);
    Begin
      If (IsConnect) Then Label1.Caption := 'Connecté'
      Else Label1.Caption := 'Déconnecté';
    End;

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 184
    Par défaut
    Avec Indy
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    ...
     pinger: TIdIcmpClient;
    ...
     
    pinger.Host:='100.100.100.100';//adresse fictive,mets celle que tu veux
    pinger.Ping;
    if pinger.ReplyStatus.ReplyStatusType=rsTimeOut then ...
    La propriété ReceiveTimeout de mon pinger est à 2500 c'est à dire que j'attend un maximum de 2.5 secondes pour recevoir la réponse.

  15. #15
    Membre confirmé Avatar de yoghisan
    Profil pro
    Inscrit en
    Février 2004
    Messages
    172
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 172
    Par défaut
    il y a les composant indy en version perso ?

  16. #16
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 184
    Par défaut
    http://www.indyproject.org/Sockets/Download/Borland.en.iwp

  17. #17
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Billets dans le blog
    1
    Par défaut
    je suppose que ce type de modem à un firmware ?
    est-il possible de l'interroger, comme un modem analogique, avec les commandes hayes ?
    Wanadoo dans son soft propose un test de mire pour informer le support si le modem répond bien.
    T'es-tu renseigné auprès de ton provider et/ou du fabricant du modem pour ce problème ?

  18. #18
    Membre confirmé Avatar de yoghisan
    Profil pro
    Inscrit en
    Février 2004
    Messages
    172
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 172
    Par défaut
    Non, j'ai accès à rien sur le modem lui-meme et ca depasse largement mes compétences de programmateur du dimanche.

    Afin d'essayer le truc de sfpx : Comment je fais pour trouver l'adresse ip de "www.google.fr" par exemple ?

  19. #19
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 184
    Par défaut
    L'ip de www.google.fr est 64.233.161.147
    mais tu peux affecter directement 'www.google.fr' à la valeur host

  20. #20
    Membre confirmé Avatar de yoghisan
    Profil pro
    Inscrit en
    Février 2004
    Messages
    172
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 172
    Par défaut
    Vous pourriez me dire pourquoi il me dit que je suis déconnecté alors que je ne le suis pas. Ou plutot pourquoi le ping plante...

    En fait, le ping de cette adresse ip est en moyenne de 71ms.
    J'ai un "ReceiveTimeout" de 3000, ca devrait etre largement suffisant... ben non !

    Où est-ce que je me plante ?

    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
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    unit Unit1;
     
    interface
     
    uses
      Windows, SysUtils, Graphics, Forms, Controls, Classes, StdCtrls, ExtCtrls, ShellApi,
      IdBaseComponent, IdComponent, IdRawBase, IdRawClient, IdIcmpClient;
     
    type
      TDonnee = record
        DateTime: TDateTime;
        Connexion: Boolean;
      end;
      TForm1 = class(TForm)
        pinger: TIdIcmpClient;
        Timer1: TTimer;
        Label1: TLabel;
        Shape1: TShape;
        LabelConnexion: TLabel;
        Label2: TLabel;
        LabelMesure: TLabel;
        Memo1: TMemo;
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
        procedure FormCreate(Sender: TObject);
        procedure Timer1Timer(Sender: TObject);
        procedure Afficher;
        procedure AjouterLigneMemo(Value: TDonnee);
      private
        Donnees: array[0..10000] of TDonnee;
        Mesure: integer;
      public
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.dfm}
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      pinger.Host := '66.102.11.104'; // google --> http://www.webrankinfo.com/google/data-centers.php
      pinger.ReceiveTimeout := 3000;
      Timer1.Interval := pinger.ReceiveTimeout + 2000;
     
      Memo1.Clear;
      Mesure := 0;
     
      Donnees[Mesure].DateTime := Now;
      pinger.Ping;
      Donnees[Mesure].Connexion := not (pinger.ReplyStatus.ReplyStatusType=rsTimeOut);
      AjouterLigneMemo(Donnees[Mesure]);
     
      Afficher;
    end;
     
    procedure TForm1.Timer1Timer(Sender: TObject);
    var Donnee: TDonnee;
    begin
      Caption := 'Test en cours...';
     
      Donnee.DateTime  := Now;
      pinger.Ping;
      Donnee.Connexion := not (pinger.ReplyStatus.ReplyStatusType=rsTimeOut);
     
      if not (Donnees[Mesure].Connexion=Donnee.Connexion)
        then begin
          Inc(Mesure);
          Donnees[Mesure] := Donnee;
          AjouterLigneMemo(Donnees[Mesure]);
        end;
     
      Afficher;
    end;
     
    procedure TForm1.Afficher;
    begin
      Caption := 'En attente du prochain test';
     
      LabelMesure.Caption := IntToStr(Mesure);
     
      if Donnees[Mesure].Connexion
        then begin
          LabelConnexion.Caption := 'Connecté';
          Shape1.Brush.Color := ClGreen;
        end
        else begin
          LabelConnexion.Caption := 'Déconnecté';
          Shape1.Brush.Color := ClRed;
        end;
    end;
     
    procedure TForm1.AjouterLigneMemo(Value: TDonnee);
    var TexteConnexion: string;
    begin
      if Value.Connexion
        then TexteConnexion := 'Connecté'
        else TexteConnexion := 'Déconnecté';
      Memo1.Lines.Strings[Mesure] := DateTimeToStr(Value.DateTime)+#9+TexteConnexion;
      Memo1.Lines.Add('');
    end;
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      ShellExecute(0, 'Open', Pchar('http://'+pinger.Host), nil, nil, SW_SHOW);
    end;
     
    end.
    Je peux toujours me debrouiller pour retirant les déconnexions qui sont inférieurs au temps de resynchronisation du modem (25s) mais bon, c'est pas très propre comme méthode.

Discussions similaires

  1. Réponses: 2
    Dernier message: 15/06/2010, 10h07
  2. [Exchange 2003] Synchro sur iphone ou HTC
    Par momottede12 dans le forum Exchange Server
    Réponses: 4
    Dernier message: 30/10/2009, 08h21
  3. Toujours des problèmes sur IReport
    Par yaya0057 dans le forum iReport
    Réponses: 1
    Dernier message: 15/07/2008, 13h36
  4. Detection d'un texte ou d'une couleur sur 2 cellules
    Par benjiprog dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 12/07/2007, 14h50

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