TESTER SI UNE CONNECTION INTERNET EXISTE

cs_jipef Messages postés 55 Date d'inscription lundi 23 août 2004 Statut Membre Dernière intervention 1 août 2008 - 28 août 2004 à 13:44
nquere Messages postés 17 Date d'inscription mercredi 10 mars 2004 Statut Membre Dernière intervention 21 mars 2006 - 10 sept. 2004 à 10:11
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/25759-tester-si-une-connection-internet-existe

nquere Messages postés 17 Date d'inscription mercredi 10 mars 2004 Statut Membre Dernière intervention 21 mars 2006
10 sept. 2004 à 10:11
Moi ta source ne me sert pas, mais j'aime bien ton style d'écriture. C'est clair, ya des "pouets-pouets" pour faire jolie et aérré le code, pis ya pas mal de commentaire.

Pour ça, chte met 8 !
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 20
2 sept. 2004 à 20:46
Merci pour le lien, jipef, j'ai peut-être survolé sans m'y arrêter mais maintenant, je vais étudier la question à fond, des fois que ça me facilite la vie !
cs_jipef Messages postés 55 Date d'inscription lundi 23 août 2004 Statut Membre Dernière intervention 1 août 2008
2 sept. 2004 à 12:53
logedu Messages postés 33 Date d'inscription mercredi 26 mars 2003 Statut Membre Dernière intervention 1 mars 2005
2 sept. 2004 à 10:50
L'envoi d'un email-test par CDO est intéressante : ça marche avec n'importe quels nom de serveur, adresses expéditeur et destinataires bidons !!!!
Et le temps de réponse me semble plus rapide que de tester un lien URL.
Mais question : comment fonctionne ce composant CDO ?
--> La propriété "cdoSMTPServer" de l'objet CDO.Configuration est
http://schemas.microsoft.com/cdo/configuration/smtpserver
--> on lui donne une valeur n'importe laquelle
--> qu'est-ce que bricole alors microsoft ????
Ze_Dam Messages postés 340 Date d'inscription lundi 8 mars 2004 Statut Membre Dernière intervention 7 juillet 2005
31 août 2004 à 10:25
petite correction dans la formule que je donne If InternetGetConnectedState(0&, 0&) etc (voir plus haut), eh ben certain ont une erreur de compilation sur cette formule, il faut dans ce cas supprimer (0&, 0&) pour régler le problème
cs_virtual Messages postés 9 Date d'inscription dimanche 15 octobre 2000 Statut Membre Dernière intervention 31 août 2004
31 août 2004 à 06:46
J'ai vraiment fait fort dans le source (des Scies-Dément ;)

Vraiment Désolé je reposte un X ièmes fois:
'******************
Public Function Acces_Internet() As Boolean
Dim ret As String
On Error Resume Next

With frmBrowser.Inet1

.AccessType = icUseDefault
.OpenURL "http://www.google.com"
ret = .GetHeader("Server")
.Cancel

If InStr(1, ret, "GWS", 1) Then
Acces_Internet = True

Else
.AccessType = icUseDefault
.OpenURL "http://www.microsoft.com"
ret = .GetHeader("Server")
.Cancel

If InStr(1, ret, "Microsoft", 1) Then
Acces_Internet = True
Else
Acces_Internet = False
End If

End If
End With
End Function
'**********************
cs_virtual Messages postés 9 Date d'inscription dimanche 15 octobre 2000 Statut Membre Dernière intervention 31 août 2004
31 août 2004 à 05:42
Désolé Je reprens la première phrase :

J'ai remarqué que le temps de latence de google est plus court et repose sur serveur propriétaire GWS 2.1.
Sinon, Remplacé google.com par un site moins stable mais avec un court temps de latence ,Votre ISP par example! Au pire ont verifie microsoft.com (plus long)
cs_virtual Messages postés 9 Date d'inscription dimanche 15 octobre 2000 Statut Membre Dernière intervention 31 août 2004
31 août 2004 à 05:37
Juste une sugestion !

j'ai remarqué que le temps de latence de google est plus court et le repose sur serveur propriétaire GWS 2.1
ou remplacé par un site moin stable mais avec un court temps de latence ,Votre ISP par example au pire ont verifie microsoft.com (plus long)



'*************************************
Public Function Acces_Internet() As Boolean
Dim ret As String

On Error Resume Next

With frmBrowser.Inet1

.AccessType = icUseDefault
.OpenURL "http://www.google.com"
.Inet1.GetHeader ("Server")
.Inet1.Cancel

If InStr(1, ret, "GWS", 1) Then
Acces_Internet = True

Else
.Inet1.AccessType = icUseDefault
.OpenURL "http://www.microsoft.com"
.Inet1.GetHeader ("Server")
.Inet1.Cancel

If InStr(1, ret, "Microsoft", 1) Then
Acces_Internet = True
Else
Acces_Internet = False
End If

End If
End With
End Function
'************************************

PS.:
Pouquoi utilisé un long, ou pire un string ou un variant comme réponse à une fonction Booléenne(oui/non=Boolean), c'est une habitude que je remarque de plus en plus ici , juste un petit rappel Sans être casse-pied:

Type Stockage

Byte 1 octet
Integer 2 octets
Boolean 2 octets
Long 4 octets
Single 4 octets
Double 8 octets
Currency 8 octets
Date 8 octets
Decimal 12 octets
String (fixe) Long. de chaîne
String (variable) Long. + 10 octets
Variant (numérique) 16 octets
Variant (texte) Long. + 22 octets

On est pas obligé d'être aussi gourmand que microsoft ;-)
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 20
30 août 2004 à 19:36
Pour AOL, je ne sais pas les nouvelles versions mais au moins jusqu'à la version 7 (ils sont à 9 maintenant ?) leur interface reposait sur IE. Perso, j'ai laissé tomber AOL depuis le flop du RTC pseudo illimité à 99FF. Maintenant, essaie quand même le code avec le composant inet, ç'est indépendant du navigateur donc ça devrait fonctionner.
Sinon, en cherchant bien, ici ou avec google, tu devrais trouver facilement des spés d'AOL.
Ze_Dam Messages postés 340 Date d'inscription lundi 8 mars 2004 Statut Membre Dernière intervention 7 juillet 2005
30 août 2004 à 11:13
ben c que le code de CanisLupus est très bien aussi, sauf qu'il n'a pas besion de timer, de flag, mais juste le composant Inet et c très bien comme ca
kimmelf2 Messages postés 267 Date d'inscription lundi 22 septembre 2003 Statut Membre Dernière intervention 27 novembre 2005
29 août 2004 à 23:37
pourquoi ne pas se contenter d'un oscket, un timer et un flag ??

supposons que l'element declencheur soit un bouton :
sub boutonclick()
flag=false
sck.connect "www.microsoft.com"
start_timer
end sub

sck_connect()
flag=true
sck.close
end sub

timer_timer()
if flag=true then msgbox"connecte"
else msgbox "deconnecte"
end sub


voila pour les grandes lignes ....


perso je cherche un code pour faire la meme chose, mais special AOL, alors si quelqu'un sait i il y a une possibilite de chopper l'etat de connection du soft d'aol .... :-)
kimmelf2 Messages postés 267 Date d'inscription lundi 22 septembre 2003 Statut Membre Dernière intervention 27 novembre 2005
29 août 2004 à 23:37
pourquoi ne pas se contenter d'un oscket, un timer et un flag ??

supposons que l'element declencheur soit un bouton :
sub boutonclick()
flag=false
sck.connect "www.microsoft.com"
start_timer
end sub

sck_connect()
flag=true
sck.close
end sub

timer_timer()
if flag=true then msgbox"connecte"
else msgbox "deconnecte"
end sub


voila pour les grandes lignes ....


perso je cherche un code pour faire la meme chose, mais special AOL, alors si quelqu'un sait i il y a une possibilite de chopper l'etat de connection du soft d'aol .... :-)
Ze_Dam Messages postés 340 Date d'inscription lundi 8 mars 2004 Statut Membre Dernière intervention 7 juillet 2005
28 août 2004 à 19:12
ok CanisLupus, merci pour les infos
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 20
28 août 2004 à 19:05
Ben non, Ze_Dam, tu ne te gourres pas. L'essentiel est que le site ne change pas trop souvent d'hébergeur et qu'il ait un bon temps de réponse. Cela n'est pas forcément lié à l'importance du site et/ou à sa fréquentation mais plutôt avec sa capacité à gérer un grand nombre de connexions simultanées. C'est pourquoi j'ai choisi microsoft.com mais tu peux choisir un des principaux FAI ou n'importe quel autre hébergeur.
En cas de problème, on peut même insérer un test au cas où le header du serveur change.
Comme ce code fonctionne depuis déjà un bon moment avec succès (près de 4 ans), je n'ai pas jugé utile de trouver une autre solution. Mais, j'imagine qu'une adaptation du PING (sous dos) peut être envisageable.
Ze_Dam Messages postés 340 Date d'inscription lundi 8 mars 2004 Statut Membre Dernière intervention 7 juillet 2005
28 août 2004 à 18:22
dans ces cas là oui, en effet, l'API que j'utilise n'a aucune utilité. Mais pour un particulier, pas de réseau, d'intranet, l'API fonctionne très bien et se fait aussi très discrette dans le code. Mais une petite question, ne serait-ce pas mieux de pointer sur un site Web moins occupé, mais dont ôn est sûr qu'il reste là pourtant. Je m'explique, se connecter sur un site plus charger (tel vbfrance) serait ptet plus lent que de se connecter sur un plus petit site ??? ou je me goure complètement ???
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 20
28 août 2004 à 18:14
Sauf qu'en entreprise, Ze_Dam, InternetGetConnectedState te renvoie vrai même si tu n'as qu'un intranet sans accès réel internet. J'ai testé chez moi et, même avec la freebox débranchée, ton API me dit que je suis connecté à Internet (faut dire aussi que j'ai un réseau local).
Autre exemple, dans ma boîte, tout le monde a une adresse e-mail ouverte sur l'extérieur et a accès à l'intranet mais seuls quelques uns ont un véritable accès Internet (c à d vers l'extérieur de la boîte). C'est le proxy qui gère ça. Donc, pour savoir si un PC peut se connecter ou non à l'Internet, j'avais trouvé le code suivant avec un composant Inet.

' ----------------------------------
' DETECTION SI ACCES INTERNET VALIDE
' ----------------------------------
Function Acces_Internet() As String
Dim ret

Acces_Internet = "KO"

On Error Resume Next

Form1.Inet1.AccessType = icUseDefault
Form1.Inet1.OpenURL "http://www.microsoft.com"
ret = Form1.Inet1.GetHeader("Server")
Form1.Inet1.Cancel

If InStr(1, ret, "Microsoft", 1) Then
Acces_Internet = "OK"
End If

End Function

Je pense que c'est de ça dont s'est inspiré jipef. Le principe est simple, on tente de lire le header d'un site Internet (tu peux prendre autre chose que Microsoft, par ex vbfrance, quoiqu'il faut savoir ce qu'il y a dans le header). C'est tout bête, si le serveur te répond tu as un accès à ce serveur sinon tu es unplug. Ca fait 2/3 lignes de code de plus que l'API mais c'est plus fiable.

Tiens, je mets un 10, pas parce que jipef m'a cité mais parce qu'il en a trouvé une utilisation intéressante.
Ze_Dam Messages postés 340 Date d'inscription lundi 8 mars 2004 Statut Membre Dernière intervention 7 juillet 2005
28 août 2004 à 14:40
nom de dieu mais quel code de fous pour tester si on est connecté à internet ou pas. il faut utiliser la bonne api et tout va bien les gars

Private Declare Function InternetGetConnectedState Lib "wininet.dll" (ByRef lpdwFlags As Long, ByVal dwReserved As Long) As Long

If InternetGetConnectedState(0&, 0&) Then
MsgBox "Vous êtes connecté à Internet" Else
MsgBox "Vous n'êtes pas connecté à Internet"

Et voilà elle est pas plus belle la vie ??????
cs_jipef Messages postés 55 Date d'inscription lundi 23 août 2004 Statut Membre Dernière intervention 1 août 2008
28 août 2004 à 13:44
je viens de trouver le code de CaniLupus c'est excellent et je l'ai intégré de suite
je cherche un moyen simple de tester si j'ai des messages qui sont arrivés avec un sujet de mon choix
actuellement je fais avec WinDev mais çca ne me plait pas dans la mesure où mon applic est en VB6

a vous lire
Rejoignez-nous