Vérifier si la connexion internet fonctionne

Signaler
Messages postés
98
Date d'inscription
lundi 17 novembre 2008
Statut
Membre
Dernière intervention
4 septembre 2012
-
Messages postés
389
Date d'inscription
dimanche 7 avril 2002
Statut
Membre
Dernière intervention
23 septembre 2016
-
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

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
81
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)
Messages postés
1835
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
11
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+
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
81
En .Net, tu remplaceras Long par Integer
Messages postés
389
Date d'inscription
dimanche 7 avril 2002
Statut
Membre
Dernière intervention
23 septembre 2016
2
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.
Messages postés
389
Date d'inscription
dimanche 7 avril 2002
Statut
Membre
Dernière intervention
23 septembre 2016
2
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
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
240
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
Messages postés
98
Date d'inscription
lundi 17 novembre 2008
Statut
Membre
Dernière intervention
4 septembre 2012

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
Messages postés
98
Date d'inscription
lundi 17 novembre 2008
Statut
Membre
Dernière intervention
4 septembre 2012

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

Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
240
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
Messages postés
98
Date d'inscription
lundi 17 novembre 2008
Statut
Membre
Dernière intervention
4 septembre 2012

seul probleme, les byval ne marchent pas en vb.net a se que je vois, quelqun as une idée pour les remplacer?
Messages postés
98
Date d'inscription
lundi 17 novembre 2008
Statut
Membre
Dernière intervention
4 septembre 2012

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.
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
81
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.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
240
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
Messages postés
98
Date d'inscription
lundi 17 novembre 2008
Statut
Membre
Dernière intervention
4 septembre 2012

oui j'ai changé tout les long par des integer mais tes byvals sont souligné et une erreur mes dite.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
240
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
Messages postés
98
Date d'inscription
lundi 17 novembre 2008
Statut
Membre
Dernière intervention
4 septembre 2012

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"
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
240
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
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
240
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
Messages postés
98
Date d'inscription
lundi 17 novembre 2008
Statut
Membre
Dernière intervention
4 septembre 2012

Aucun changement au niveau des erreurs obtenues :(
Messages postés
389
Date d'inscription
dimanche 7 avril 2002
Statut
Membre
Dernière intervention
23 septembre 2016
2
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.