Tester une connection internet - ping

Soyez le premier à donner votre avis sur cette source.

Snippet vu 48 658 fois - Téléchargée 35 fois

Contenu du snippet

Pour tester une connection internet, on peut pinger une adresse du Net, telle que google.fr
Cette classe .Net permet de gerer tout ca simplement, meme si ce n'est pas trop rapide

Appel de la classe (par thread, c'est beaucoup mieux !):
Dim classePing As PingOK = New PingOK
classePing.AdresseIp = "adresse a pinger comme www.google.fr"
Dim monProcess As New System.Threading.Thread(AddressOf classePing.LancePing)
monProcess.Start()
monProcess.Join()
Application.DoEvents()

Verification :
if classePing.IsConnected then ...

Source / Exemple :


'Classe Ping Capuccino_fr

'Appel : 
'   Dim NomProc As PingOK = New PingOK
'   NomProc.AdresseIp = "adresse a pinger" 'exemple : www.google.fr
'   
'   Dim monProcess As New System.Threading.Thread(AddressOf tmp.LancePing)
'   monProcess.Start()
'   monProcess.Join()
'  
'
'Verification :
'   NomProc.IsConnected = "True" ou "False" 'correspond à la réponse du ping
'   if NomProc.IsConnected then ...

Imports System.IO

Public Class PingOK
#Region " Propriétés"

    Private _AdresseIP As String
    Private _IsConnected As Boolean
    Public Property AdresseIp()
        Get
            Return _AdresseIP
        End Get
        Set(ByVal Value)
            _AdresseIP = Value
        End Set
    End Property
    Public ReadOnly Property IsConnected()
        Get
            Return ConnecteAInternet()
        End Get
    End Property
#End Region
#Region " Fonctions"
    Public Sub LancePing()
        If _AdresseIP = "" Then
            MsgBox("Aucune adresse IP decidee" & vbCrLf & "Par défaut, nous prendrons www.google.fr", MsgBoxStyle.OKOnly)
            _AdresseIP = "www.google.fr"
        End If
        Try
            'If Dir("c:\testPing.txt") <> "" Then
            '    File.Delete("c:\testPing.txt")
            'End If
            Dim tmp As FileStream = File.Create("c:\testping.txt")
            tmp.Close()
            Wait(5)
            Shell(Environment.GetEnvironmentVariable("comspec") & " /c ping " & _AdresseIP & " > c:\testping.txt", AppWinStyle.Hide)
            Wait(6000)
        Catch ex As Exception
            MsgBox("Erreur dans la connection à Internet (Au lancement du ping) : " & vbCrLf & ex.Message)
        End Try
    End Sub
    Public Function ConnecteAInternet() As Boolean
        Dim buffer As String
        Dim canal As Integer = FreeFile()
        Dim testsPing As Integer = 0
        Try
ouverture:  testsPing += 1
            If File.Exists("c:\testping.txt") Then
                Wait(testsPing * 100)
                FileOpen(canal, "c:\testping.txt", OpenMode.Input)
                Wait(5)
            Else
                LancePing()
                GoTo ouverture
            End If
        Catch ex As Exception
            If testsPing < 5 Then
                GoTo ouverture
            Else
                MsgBox("Impossible de se connecter au serveur (Apres Ping, lors du test de connexion)." & vbCrLf & ex.Message, MsgBoxStyle.OKOnly)
                Exit Function
            End If
        End Try

        Do While Not EOF(canal)
            buffer = LineInput(canal)
            If InStr(buffer, "ponse de") Then
                _IsConnected = True
                FileClose(canal)
                GoTo retour
            End If
        Loop
        FileClose(canal)
        File.Delete("c:\testping.txt")
        _IsConnected = False
retour: Return _IsConnected
    End Function
    Public Sub Wait(ByVal n As Integer)
        For i As Integer = 1 To n
            System.Threading.Thread.Sleep(1)
            Application.DoEvents()
        Next
    End Sub
#End Region
End Class

Conclusion :


Finalement, la solution d'ouverture d'une socket est BEAUCOUP plus rapide, donc voici le tout petit bout de code qui permet de savoir si on est connecté:

'ouverture d'une socket sur le port 21 au serveur FTP
Try
Dim client As New System.Net.Sockets.TcpClient("adresse_du_serveur_ftp", 21)
Catch e As System.Net.Sockets.SocketException
MsgBox("Impossible de se connecter : " & vbCrLf & e.Message)
End Try

A voir également

Ajouter un commentaire

Commentaires

cs_CanisLupus
Messages postés
3758
Date d'inscription
mardi 23 septembre 2003
Statut
Modérateur
Dernière intervention
13 mars 2006
6 -
Pas mal ton truc, mais j'en ai un autre qui marche bien et qui est plus simple :

Ds projets/composants :
Microsoft internet Transfert Control 6.0 (SP6)
et un controle Inet sur une form

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

Acces_Internet = "KO"

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

Explication :
On essaie de télécharger le header de crosoft (ou le site web de ton choix). Si tu arrives à lire les infos de ce header, c que tu a un accès internet.
Avantage : si ds ta boite tu as un intranet mais pas de cnx vers l'internet (extérieur) ça te dit "KO" pas d'internet.

Je pense qu'en VB.NET ça doit marcher aussi mais faut tester.

Cordialement

CanisLupus
Scalpweb
Messages postés
1468
Date d'inscription
samedi 13 mars 2004
Statut
Membre
Dernière intervention
5 mai 2010
-
Oui oui, ça fonctionne aussi, et c'est rapide... Mais bon, c'est tout de même une bonne source.
cs_CanisLupus
Messages postés
3758
Date d'inscription
mardi 23 septembre 2003
Statut
Modérateur
Dernière intervention
13 mars 2006
6 -
Sûr, c pourquoi g mis un 10 pour encourager la recherche.
capuccino_fr
Messages postés
113
Date d'inscription
vendredi 5 mars 2004
Statut
Membre
Dernière intervention
11 février 2008
-
Merci beaucoup des encouragements, apres quelques mois de pratique, je me dis que le .Net a vraiment ses charmes... :D
mais tout est si compliqué a trouver, que l'on se créé ses propres astuces, alors si ca peut servir

@+
Capuccino_fr
cs_jipef
Messages postés
56
Date d'inscription
lundi 23 août 2004
Statut
Membre
Dernière intervention
1 août 2008
-
à CanisLupus c'est effectivement simple et fonctionnel
note 11/10 !!!

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.