22 Stimmen

Überprüfung des Netzwerkstatus in C#

Wie prüfe ich, dass ich eine offene Netzwerkverbindung habe und eine bestimmte IP-Adresse in c# kontaktieren kann? Ich habe Beispiele in VB.Net gesehen, aber sie verwenden alle die Struktur "My". Ich danke Ihnen.

1voto

Lasse V. Karlsen Punkte 364542

Sie würden versuchen, eine Verbindung zu einer bestimmten IP-Adresse herzustellen, und mit Verweigerungen und Timeouts umgehen.

Schauen Sie sich die Klasse TcpClient im Namespace System.Net.Sockets an.

-2voto

akuma6099 Punkte 1

Meine Idee war, eine statische Klasse/Modul zu haben, um die Überwachung auf einem spereate Thread zu tun. Eine einfache DNS-Auflösung stellt sicher, dass Ihr Netzwerk in Betrieb ist und funktioniert. Besser als ping IMO.

Imports System.Net

Public Module Network_Monitor

Private InsideWorkNet As Boolean = vbFalse
Private Online_Status As Boolean = vbFalse
Private CurrentWorkIPAddress As New IPHostEntry
Private WithEvents Timer_Online_Check As New Timers.Timer With {.Interval = 5000, .Enabled = True, .AutoReset = True}

Public ReadOnly Property GetOnlineStatus() As String

    Get
        Return Online_Status
    End Get

End Property

Public Sub Initialize()

    Set_Online_Status()
    Timer_Online_Check.Start()

End Sub

Public Sub Set_Online_Status()

    If My.Computer.Network.IsAvailable Then
        Try
            Dim DNSTest As IPHostEntry = Dns.GetHostEntry("google.com")
            If DNSTest.AddressList.Length > 0 Then
                Online_Status = True
            Else : Online_Status = False

            End If

        Catch ex As System.Net.Sockets.SocketException

            Online_Status = False

        End Try
    End If

End Sub

Private Sub Timer_Online_Check_Elaspsed(ByVal sender As Object, ByVal e As Timers.ElapsedEventArgs) Handles Timer_Online_Check.Elapsed
    Set_Online_Status()
End Sub

Public Sub Detect_Work_Network()

    If Online_Status = True Then

        Dim WorkIP As IPHostEntry = New IPHostEntry()

        Try
            WorkIP = Dns.GetHostEntry("serverA.myworkdomain.local")
            If WorkIP.AddressList.Length > 0 Then

                InsideWorkNet = True
                CurrentWorkIPAddress = WorkIP
                'MessageBox.Show(WorkIP.HostName.ToString(), "WorkIP", MessageBoxButtons.OK, MessageBoxIcon.Information)
            End If
        Catch ex As Sockets.SocketException

            Try
                WorkIP = Dns.GetHostEntry("serverA.myworkdomain.com")
                If WorkIP.AddressList.Length > 0 Then

                    InsideWorkNet = False
                    CurrentWorkIPAddress = WorkIP
                    ' MessageBox.Show(WorkIP.HostName.ToString(), "WorkIP", MessageBoxButtons.OK, MessageBoxIcon.Information)
                End If
            Catch ey As Sockets.SocketException

            End Try
        End Try
    End If

End Sub

Public Function GetWorkServerName() As String
    If InsideWorkNet = True Then
        Return "serverA.myworkdomain.local"
    Else : Return "serverA.myworkdomain.com"
    End If

End Function

End Module

Ich musste auch feststellen, ob ich mich innerhalb oder außerhalb meines Arbeitsnetzes befand. Verschiedene Server auf jeder Seite der Firewall, mit denen die App kommunizieren kann.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X