Vérifier si la connexion internet fonctionne

jx53 Messages postés 98 Date d'inscription lundi 17 novembre 2008 Statut Membre Dernière intervention 4 septembre 2012 - 8 sept. 2011 à 04:22
cs_Megafan Messages postés 389 Date d'inscription dimanche 7 avril 2002 Statut Membre Dernière intervention 23 septembre 2016 - 12 sept. 2011 à 10:29
salut, j'ai trouvé sur internet plusieurs code pour savoir si l'ordinateur est connecté a internet ou pas que j'ai ensuite modifié pour qu'il m'affiche un message quand on passe de connecté a déconnecté et de déconnecté a connecté. sauf que le programme me marque toujours comme connecté même quand je clique sur déconnecter dans ma liste de réseau et que donc je ne peut plus accéder a internet, peut importe quel code j'utilise. Je suis sur un réseau sans-fil.

Voici le code une fois modifié:


Imports System.Net

Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        Timer1.Start()
        Label1.Text = "Pas d'acces internet"

    End Sub

    Dim Connecté As Boolean

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick



        If My.Computer.Network.IsAvailable Then

            If Connecté = False Then
                Connecté = True
                Label1.Text = "Acces internet"
                MsgBox("Connexion internet Rétablie")
            End If

        Else

            If Connecté = True Then
                Connecté = False
                Label1.Text = "Pas d'acces internet"
                MsgBox("Connexion internet perdue")
            End If

        End If


    End Sub
End Class





Je pense donc que le mieux serais un code qui tente de se connecter a un serveur, si sa marche on retourne true, si sa fait une erreur ou qu'on peut pas accéder au serveur, on retourne false. c'est possible?

merci de votre temps

20 réponses

cs_Jack Messages postés 14007 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 78
8 sept. 2011 à 11:45
Salut

Network ne veut pas dire Internet, mais réseau.
Je pense donc que ce test te dit si tu fais partie d'un réseau ethernet, mais pas forcement Internet.

As-tu tapé "connexion internet" dans la recherche de code sur le site ?

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 13
8 sept. 2011 à 13:59
Salut,

voici une methode VB6/VBA qui utilise l'API InternetGetConnectedState :

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

Function ConnexionStatus() As Boolean
'Verifi l'etat de la connection reseau
Dim Status As Long
ConnexionStatus = (InternetGetConnectedState(Status, 0&) <> 0)
End Function


vois si tu peux en faire quelque chose

A+
0
cs_Jack Messages postés 14007 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 78
8 sept. 2011 à 14:41
En .Net, tu remplaceras Long par Integer
0
cs_Megafan Messages postés 389 Date d'inscription dimanche 7 avril 2002 Statut Membre Dernière intervention 23 septembre 2016 2
8 sept. 2011 à 18:21
Bonjour,
De mémoire il me semble que cette API posait des problèmes dans certains cas (je ne me rappelle plus exactement désolé). A mon humble avis, le plus simple est tout simplement d'interroger un site et de voir s'il répond (genre google pour être sur). Il existe de multiples objets pour récupérer l'objet response d'un site web.
Cordialement.



Megafan

Développeur de http://www.o10c.eu (Lien)


La nouvelle référence en matière de jeu de stratégie spatiale.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Megafan Messages postés 389 Date d'inscription dimanche 7 avril 2002 Statut Membre Dernière intervention 23 septembre 2016 2
8 sept. 2011 à 18:35
A l'arrache

Private Function TestConnexionInternet() As Boolean

Dim MonSite As New System.Uri("http://www.google.com")
Dim WebRequest As System.Net.WebRequest
WebRequest = System.Net.WebRequest.Create(MonSite)
Dim Response As System.Net.WebResponse
Try
Response = WebRequest.GetResponse
Return True
Catch ex As Exception
Return False
End Try

End Function
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 231
8 sept. 2011 à 19:02
Bonjour,
C'est marrant, car j'observe le même principe de précaution (mais un peu différemment) sous VB6
Ainsi (facilement transposable en VB.Net : juste les long à changer contre integer et le msgbox à modifier) :

Private Declare Function InternetOpen Lib "wininet" Alias "InternetOpenA" (ByVal sAgent As String, ByVal lAccessType As Long, ByVal sProxyName As String, ByVal sProxyBypass As String, ByVal lFlags As Long) As Long
Private Declare Function InternetCloseHandle Lib "wininet" (ByVal hInet As Long) As Integer
Private Declare Function InternetReadFile Lib "wininet" (ByVal hFile As Long, ByVal sBuffer As String, ByVal lNumBytesToRead As Long, lNumberOfBytesRead As Long) As Integer
Private Declare Function InternetOpenUrl Lib "wininet" Alias "InternetOpenUrlA" (ByVal hInternetSession As Long, ByVal lpszUrl As String, ByVal lpszHeaders As String, ByVal dwHeadersLength As Long, ByVal dwFlags As Long, ByVal dwContext As Long) As Long

Private Sub Command1_Click()
  MsgBox avons_nous_la_connexion
End Sub

Private Function avons_nous_la_connexion() As Boolean
    Dim ouvrons As Long, fic As Long, sBuffer As String, Ret As Long
    sBuffer = Space(1000)
    ouvrons = InternetOpen("http://www.google.com", 1, vbNullString, vbNullString, 0)
    fic = InternetOpenUrl(ouvrons, "http://www.microsoft.com/index.htm", vbNullString, ByVal 0&, &H80000000, ByVal 0&)
    InternetReadFile fic, sBuffer, 1000, Ret
    InternetCloseHandle fic
    InternetCloseHandle ouvrons
    If Trim(sBuffer) <> "" Then avons_nous_la_connexion = True
End Function



____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
jx53 Messages postés 98 Date d'inscription lundi 17 novembre 2008 Statut Membre Dernière intervention 4 septembre 2012
8 sept. 2011 à 22:52
merci pour toutes vos réponse, je vais éssailler tout sa maintenant et voir se qui fonctionne le mieu. Désolé si la réponse a été tardive mais je reste au canada et j'arrive tout juste de l'école :P
0
jx53 Messages postés 98 Date d'inscription lundi 17 novembre 2008 Statut Membre Dernière intervention 4 septembre 2012
8 sept. 2011 à 23:04
le code de bigfish_le vrai me semble le plus intéressant, le seul problème est qu'il me dit que je suis connecté même si ce n'est pas le cas lui aussi.

et ouin pour les sites sa serait plutôt en dernier recours car si le serveur du site a un prob bah mon prog ne marche plu.

voici le code de bigfish_le vrai une fois adapté a mes besoins, jai peut-etre fait une erreur:


Public Class Form1

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

    Function ConnexionStatus() As Boolean
        'Verifi l'etat de la connection reseau 
        Dim Status As Integer
        ConnexionStatus = (InternetGetConnectedState(Status, 0&) <> 0)
    End Function


    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Timer1.Start()

    End Sub

    Dim Connecté As Boolean

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick



        If ConnexionStatus() <> 0 Then

            If Connecté = False Then
                Connecté = True
                Label1.Text = "Acces internet"
                MsgBox("Connexion internet Rétablie")
            End If

        Else

            If Connecté = True Then
                Connecté = False
                Label1.Text = "Pas d'acces internet"
                MsgBox("Connexion internet perdue")
            End If

        End If


    End Sub

End Class

0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 231
9 sept. 2011 à 08:29
et ouin pour les sites sa serait plutôt en dernier recours car si le serveur du site a un prob bah mon prog ne marche plu.


Rien ne t'empêche de carrément tester avec ton FAI lui-même ==>> je viens de le faire (avec mon code VB6) ===>> pas de problème !

Private Declare Function InternetOpen Lib "wininet" Alias "InternetOpenA" (ByVal sAgent As String, ByVal lAccessType As Long, ByVal sProxyName As String, ByVal sProxyBypass As String, ByVal lFlags As Long) As Long
Private Declare Function InternetCloseHandle Lib "wininet" (ByVal hInet As Long) As Integer
Private Declare Function InternetReadFile Lib "wininet" (ByVal hFile As Long, ByVal sBuffer As String, ByVal lNumBytesToRead As Long, lNumberOfBytesRead As Long) As Integer
Private Declare Function InternetOpenUrl Lib "wininet" Alias "InternetOpenUrlA" (ByVal hInternetSession As Long, ByVal lpszUrl As String, ByVal lpszHeaders As String, ByVal dwHeadersLength As Long, ByVal dwFlags As Long, ByVal dwContext As Long) As Long

Private Sub Command1_Click()
  MsgBox avons_nous_la_connexion
End Sub

Private Function avons_nous_la_connexion() As Boolean
    Dim ouvrons As Long, fic As Long, sBuffer As String, Ret As Long
    sBuffer = Space(1000)
    ouvrons = InternetOpen("http://www.orange.fr", 1, vbNullString, vbNullString, 0)
    fic = InternetOpenUrl(ouvrons, "http://www.orange.fr", vbNullString, ByVal 0&, &H80000000, ByVal 0&)
    InternetReadFile fic, sBuffer, 1000, Ret
    InternetCloseHandle fic
    InternetCloseHandle ouvrons
    If Trim(sBuffer) <> "" Then avons_nous_la_connexion = True
End Function


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
jx53 Messages postés 98 Date d'inscription lundi 17 novembre 2008 Statut Membre Dernière intervention 4 septembre 2012
9 sept. 2011 à 22:45
seul probleme, les byval ne marchent pas en vb.net a se que je vois, quelqun as une idée pour les remplacer?
0
jx53 Messages postés 98 Date d'inscription lundi 17 novembre 2008 Statut Membre Dernière intervention 4 septembre 2012
9 sept. 2011 à 22:49
Bon, j'ai seimplement enlevé les byval en laissant les valeur qui les suivaient et le code semble retourner false en permanance... et au fait, je connais pas orange du-tout, on a pas ça au canada si c'est un fournisseur d’accès internet, mais c'est sans importance.
0
cs_Jack Messages postés 14007 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 78
10 sept. 2011 à 10:28
WinInet peut posséder un buffer et s'il te répond qu'il est connecté, c'est qu'il doit faire appel à la dernière requète qui justement est le même, donc il ne doit pas requestionner réellement.
A approfondir

Je pencherais plutôt pour le côté API, en essayant de trouver des exemples .Net avec ces APIs, ça doit bien exister.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 231
10 sept. 2011 à 11:23
Je ne vois personnellement pas pourquoi les ByVal ne seraient pas utilisables en VB.Net.
As-tu fait ce que je t'ai dit : changer (dans mon code pour VB6) tous les "Long" en "Integer" ?

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
jx53 Messages postés 98 Date d'inscription lundi 17 novembre 2008 Statut Membre Dernière intervention 4 septembre 2012
10 sept. 2011 à 20:10
oui j'ai changé tout les long par des integer mais tes byvals sont souligné et une erreur mes dite.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 231
10 sept. 2011 à 21:20
Montre donc ton code, déclarations incluses.

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
jx53 Messages postés 98 Date d'inscription lundi 17 novembre 2008 Statut Membre Dernière intervention 4 septembre 2012
10 sept. 2011 à 22:02
Public Class Form1
    Private Declare Function InternetOpen Lib "wininet" Alias "InternetOpenA" (ByVal sAgent As String, ByVal lAccessType As Integer, ByVal sProxyName As String, ByVal sProxyBypass As String, ByVal lFlags As Integer) As Integer
    Private Declare Function InternetCloseHandle Lib "wininet" (ByVal hInet As Integer) As Integer
    Private Declare Function InternetReadFile Lib "wininet" (ByVal hFile As Integer, ByVal sBuffer As String, ByVal lNumBytesToRead As Integer, ByVal lNumberOfBytesRead As Integer) As Integer
    Private Declare Function InternetOpenUrl Lib "wininet" Alias "InternetOpenUrlA" (ByVal hInternetSession As Integer, ByVal lpszUrl As String, ByVal lpszHeaders As String, ByVal dwHeadersLength As Integer, ByVal dwFlags As Integer, ByVal dwContext As Integer) Integer



    Private Function avons_nous_la_connexion() As Boolean
        Dim ouvrons As Integer, fic As Integer, sBuffer As String, Ret As Integer
        sBuffer = Space(1000)
        ouvrons = InternetOpen("http://www.orange.fr", 1, vbNullString, vbNullString, 0)
    fic = InternetOpenUrl(ouvrons, "http://www.orange.fr", vbNullString, ByVal 0&, &H80000000, ByVal 0&)
        InternetReadFile(fic, sBuffer, 1000, Ret)
        InternetCloseHandle(fic)
        InternetCloseHandle(ouvrons)
        If Trim(sBuffer) <> "" Then avons_nous_la_connexion = True
    End Function

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        MsgBox(avons_nous_la_connexion)
    End Sub
End Class


si je fait juste adapter ton code au .net sa donne sa et se sont les byval dans la fonction "avons_nous_la_connexion" qui dont souligné. et vb me dit "expression attendu"
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 231
11 sept. 2011 à 07:15
Il te manque un As (As Integer) à la fiun de cette ligne :
  Private Declare Function InternetOpenUrl Lib "wininet" Alias "InternetOpenUrlA" (ByVal hInternetSession As Integer, ByVal lpszUrl As String, ByVal lpszHeaders As String, ByVal dwHeadersLength As Integer, ByVal dwFlags As Integer, ByVal dwContext As Integer) Integer

Dans cette ligne-ci :
fic = InternetOpenUrl(ouvrons, "http://www.orange.fr", vbNullString, ByVal 0&, &H80000000, ByVal 0&)

le suffixe & type les 0 en long ! Transforme ainsi :
fic = InternetOpenUrl(ouvrons, "http://www.orange.fr", vbNullString, ByVal 0, &H80000000, ByVal 0)


Commence par ces modifs.
Essaye

PS : puisque tu développes sous VB.Net, il y a une autre manière der faire une messagebox, plus "VB.Netiste", je crois, non ? (mais moins important).

Je ne suis pas VBNetiste et ne peux donc aller au-delà dans mes suggestions. Un autre forumeur VBNetiste passant par là trouvera éventuellement une autre correction à apporter à ta transposition?
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 231
11 sept. 2011 à 07:24
Ah oui : également (peut-être)

J'ignore si vbNullString est compris en VBNet.
Transforme au besoin tous les vbNullString par des ""

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
jx53 Messages postés 98 Date d'inscription lundi 17 novembre 2008 Statut Membre Dernière intervention 4 septembre 2012
11 sept. 2011 à 17:20
Aucun changement au niveau des erreurs obtenues :(
0
cs_Megafan Messages postés 389 Date d'inscription dimanche 7 avril 2002 Statut Membre Dernière intervention 23 septembre 2016 2
12 sept. 2011 à 10:29
Je ne comprends toujours pas votre intérêt à utiliser toutes ces API, alors que VB.NET gère cela en natif...

Megafan

Développeur de http://www.o10c.eu (Lien)


La nouvelle référence en matière de jeu de stratégie spatiale.
0