Prüfen ob Internetverbindung verfügbar

  • VB.NET

Es gibt 23 Antworten in diesem Thema. Der letzte Beitrag () ist von Krkodil.

    Prüfen ob Internetverbindung verfügbar

    Hi!
    Auf diese Art und weise prüfe ich ob eine Verbindung zum Internet besteht:

    VB.NET-Quellcode

    1. Dim siteResponds As Boolean = False
    2. Try
    3. siteResponds = My.Computer.Network.Ping("www.google.com")
    4. Catch
    5. siteResponds = False
    6. End Try
    7. If siteResponds = True Then
    8. online.ToolTipText = "Es besteht eine Verbindung zu Google"
    9. End If


    Leider verursacht diese Methode bei nicht vorhandener Verbindung sehr lange ladezeiten (Bei der verwendung einer ständigen prüfung - Timer zB stürtzt dan mein Programm ab)

    Gibts ne möglichkeit zu prüfen ob obe eine Verbindung zum Internet besteht die nicht so träge ist?
    Erstmal Danke für die Antwort!

    Aber beide links wollen bei mir nicht funktionieren!?

    Ich bin echt verwirrt! Mich wundert es das so eine scheinbar simple sache so kompliziert sein kann!

    Hatt jeamnd netterweise einen code für mich? :whistling:

    hamog schrieb:

    INTEGER

    Nee geht leider nicht!

    Visul Basic spuckt folgenden Fehler beim Debugen aus:
    PInvokeStackImbalance wurde erkannt.
    Message: Ein Aufruf an die PInvoke-Funktion "Hydrantmanager2!WindowsApplication1.Form1::InternetGetConnectedState" hat das Gleichgewicht des Stapels gestört. Wahrscheinlich stimmt die verwaltete PInvoke-Signatur nicht mit der nicht verwalteten Zielsignatur überein. Überprüfen Sie, ob die Aufrufkonvention und die Parameter der PInvoke-Signatur mit der nicht verwalteten Zielsignatur übereinstimmen.

    Bei mir gehts!

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Declare Function InternetGetConnectedState _
    3. Lib "wininet.dll" (ByRef lpdwFlags As Integer, _
    4. ByVal dwReserved As Integer) As Integer
    5. Private Const INTERNET_CONNECTION_MODEM As Integer = &H1
    6. Private Const INTERNET_CONNECTION_LAN As Integer = &H2
    7. Private Const INTERNET_CONNECTION_PROXY As Integer = &H4
    8. Private Const INTERNET_CONNECTION_MODEM_BUSY As Integer = &H8
    9. Private Const INTERNET_CONNECTION_OFFLINE As Integer = &H20
    10. Private Const INTERNET_CONNECTION_CONFIGURED As Integer = &H40
    11. Private Const INTERNET_RAS_INSTALLED As Integer = &H10
    12. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    13. End Sub
    14. Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    15. Dim dwflags As Integer
    16. Dim sText As String
    17. Dim msg As String
    18. If InternetGetConnectedState(dwflags, 0) Then
    19. If dwflags And INTERNET_CONNECTION_CONFIGURED Then
    20. msg = msg & _
    21. "Es ist eine Internetverbindung eingerichtet." & vbCrLf
    22. End If
    23. If dwflags And INTERNET_CONNECTION_LAN Then
    24. msg = msg & _
    25. "Die Internetverbindung erfolgt über ein Netzwerk"
    26. End If
    27. If dwflags And INTERNET_CONNECTION_MODEM Then
    28. msg = msg & "Die Internetverbindung erfolgt über ein Modem"
    29. End If
    30. If dwflags And INTERNET_CONNECTION_PROXY Then
    31. msg = msg & " mittels eines Proxy-Servers." & vbCrLf
    32. Else
    33. msg = msg & "." & vbCrLf
    34. End If
    35. If dwflags And INTERNET_CONNECTION_OFFLINE Then
    36. msg = msg & "Es besteht z.Zt. keine Internetverbindung. "
    37. End If
    38. If dwflags And INTERNET_CONNECTION_MODEM_BUSY Then
    39. msg = msg & "Das Modem nutzt z.Zt eine andere Verbindung. "
    40. End If
    41. If dwflags And INTERNET_RAS_INSTALLED Then
    42. msg = msg & _
    43. "Ein Remote Access Service (RAS) ist installiert. "
    44. End If
    45. Else
    46. msg = "Es besteht z.Zt. keine Internetverbindung."
    47. End If
    48. Label1.Text = msg
    49. End Sub
    50. End Class


    MfG
    Versuchs hiermit!


    VB.NET-Quellcode

    1. imports system.net
    2. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    3. If System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable = True Then
    4. Label1.Text = "Verbunden"
    5. Else
    6. Label1.Text = "Getrennt"
    7. End If
    8. End Sub

    TheKakaduKing schrieb:

    Versuchs hiermit!


    VB.NET-Quellcode

    1. imports system.net
    2. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    3. If System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable = True Then
    4. Label1.Text = "Verbunden"
    5. Else
    6. Label1.Text = "Getrennt"
    7. End If
    8. End Sub
    Ob ich mit dem Internet verbunden bin oder nicht es kommt immer "Verbunden"
    Jetzt klappts!

    VB.NET-Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. If testconnection() = 1 Then
    3. Label1.Text = "Verbunden"
    4. Else
    5. If testconnection() = 0 Then
    6. Label1.Text = "Getrennt"
    7. End If
    8. End If
    9. End Sub


    Function Testconnection

    VB.NET-Quellcode

    1. Function testconnection()
    2. Try
    3. My.Computer.Network.Ping("www.google.de")
    4. Return 1
    5. Catch ex As Exception
    6. Return 0
    7. End Try
    8. End Function




    Wenns klapt bitte bedanken! :)
    Wobei ich es so

    VB.NET-Quellcode

    1. Function testconnection(byval url as string) as string
    2. Try
    3. My.Computer.Network.Ping(url)
    4. Return 1
    5. Catch ex As Exception
    6. Return 0
    7. End Try
    8. End Function

    besser finden würde^^
    „Was daraus gefolgert werden kann ist, dass jeder intelligentere User sein Geld lieber für Bier ausgibt, um einen schönen Rausch zu haben, und nicht dieses Ranzprodukt.“

    -Auszug aus einer Unterhaltung über das iPhone und dessen Vermarktung.
    Wobei vierkant genau das nicht haben will.

    Die Windowsfunktion sollte eigentlich funktionieren, wenn du die jeweiligen Datentypen (Long -> Integer) an .NET anpasst.

    TheKakaduKing schrieb:

    Woher soll er wissen, welche url er pingen soll?


    Ergibt keinen Sinn. Er selbst weiß ja wohl, welche Internetseite er anpingen möchte, oder etwa nicht?

    Oder gibt es eine Störung in der Matrix, sodass er nicht weiß, was er weiß? :P
    „Was daraus gefolgert werden kann ist, dass jeder intelligentere User sein Geld lieber für Bier ausgibt, um einen schönen Rausch zu haben, und nicht dieses Ranzprodukt.“

    -Auszug aus einer Unterhaltung über das iPhone und dessen Vermarktung.

    TheKakaduKing schrieb:

    Er will doch nur wissen, ob er ueberhaupt mit dem internet
    verbunden ist oder nicht?
    Warum dann nicht irgendeine pingen?

    Genau so ist es! Und ich hab auch eine Lösung dafür (wie in meinem 1. post schon steht)
    Nur leider ist diese Variante ziehmlich träge!

    Mein tool lädt sich übers Internet Kartenmaterial (Googlemaps) - wenn der PC nicht mit Internet verbunden ist soll dies verhindert werden! - Also muss die Abfrage bereits beim laden der Startform geschehen!
    (Mit der Ping Methode mach ich das momentan) Dies wiederum verlangsamt den Programmstart erheblich. Also bin ich auf der Suche nach einer möglichkeit die keine Wartezeit erfordert! Oder gibts eine möglichkeit bei zu langer Wartezeit sofort abzubrechen?

    Jedenfalls möchte ich mich bei allen Beteiligten mal herzlich für die Unterstützung bedanken! Ich finde solche Foren echt genial! Schön das es solche Menschen gibt ide ihre Zeit für andere aufwenden - DANKE!!! :thumbsup:

    TheKakaduKing schrieb:

    Er will doch nur wissen, ob er ueberhaupt mit dem internet
    verbunden ist oder nicht?
    Warum dann nicht irgendeine pingen?


    Aber am Ende muss es trotzdem EINE bestimmte sein, oder etwa nicht?

    Natürlich kann er auch eine List Of() mit Websites machen, und das Programm sucht sich dann da eine raus^^
    „Was daraus gefolgert werden kann ist, dass jeder intelligentere User sein Geld lieber für Bier ausgibt, um einen schönen Rausch zu haben, und nicht dieses Ranzprodukt.“

    -Auszug aus einer Unterhaltung über das iPhone und dessen Vermarktung.
    Es ist scheißegal welche Website er anpingt ob das google.com ist oder www.youp***.com ist das ist doch so hoch wie tief, kommt eine Rückmeldung ist er warscheinlich verbunden, kommt keine ist er es wsl. nicht oder der Server ist down. Ich weiß nicht welche Methode in der wininet.dll verwendet wird, aber ich vermute einfach mal ganz stark dass diese direkt von Windows die informationen bezieht. Somit ist diese MEthode einfach die bessere!

    @TE: So wie ich den Code gesehen habe, sollte diese eigentlich Funktionieren, haben ihn bei mir selbst ausprobiert. Du könntest mal schaun ob die "wininet.dll" in deinem System32 ordner liegt. Wobei die eigentlich da sein muss!.

    lg.

    LucaWelker
    lg.

    LucaWelker
    Ich weis nicht - bin ich jetzt kommplet blem blem???

    Folgender Code:

    VB.NET-Quellcode

    1. Private Declare Function InternetGetConnectedState _
    2. Lib "wininet.dll" (ByRef lpdwFlags As Integer, _
    3. ByVal dwReserved As Integer) As Integer
    4. Private Const INTERNET_CONNECTION_MODEM As Integer = &H1
    5. Private Const INTERNET_CONNECTION_LAN As Integer = &H2
    6. Private Const INTERNET_CONNECTION_PROXY As Integer = &H4
    7. Private Const INTERNET_CONNECTION_MODEM_BUSY As Integer = &H8
    8. Private Const INTERNET_CONNECTION_OFFLINE As Integer = &H20
    9. Private Const INTERNET_CONNECTION_CONFIGURED As Integer = &H40
    10. Private Const INTERNET_RAS_INSTALLED As Integer = &H10
    11. Private Sub Button1_Click_4(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    12. Dim dwflags As Integer
    13. If InternetGetConnectedState(dwflags, 0) Then
    14. MsgBox("Online")
    15. Else
    16. MsgBox("Offline")
    17. End If
    18. End Sub

    Egal ob ich mit dem Internet verbunden bin oder nicht - ich bekomme immer "Online"

    liegt es daran weil ich mich in einem Netzwerk befinde?

    Also so hab ich den oben angeführten Code getestet:
    ich hab ein Modem, 1 Router, 1 PC und 1 Laptop (Ich Arbeite am PC)

    Wenn ich nun in das Webinterface des Modems gehe und dort die Internetverbindung kappe geht natürlich das Netzwerk nach wie vor aber der Internet betrieb ist eingestellt! Soll heissen ich kann mit meinem Laptop komunitieren aber "www.google.com" und der gleichen ist tod (der Zugrif aufs Web eben)