2009-12-22 8 views

Répondre

5

Essayez NetworkInterface.GetIsNetworkAvailable:

Indique si une connexion réseau est disponible.

Une connexion réseau est considérée comme disponible si l'une des interfaces réseau est marquée «haut» et n'est pas une interface de bouclage ou de tunnel.

+0

Y at-il un moyen plus rapide de faire cela? Cet appel particulier est relativement lent et cause des problèmes de performances dans une application mobile sur laquelle je travaille. (Je l'ai conçu pour fonctionner avant chaque interaction - donc il fonctionne beaucoup) Mon appareil a deux périphériques réseau - si je pouvais trouver un moyen de vérifier seulement un adaptateur qui m'intéresse, au moins en théorie ce serait 50% plus rapide. Quelqu'un sait comment faire cela? – Jeff

3

Pour voir si un réseau est disponible, vous pouvez utiliser l'espace de noms Mon VB.NET:

My.Computer.Network.IsAvailable 

que je suppose est une abstraction de la propriété NetworkInterface dans la réponse d'Andrew. Pour voir si vous pouvez utiliser un réseau disponible pour se rendre à un serveur spécifique, vous pouvez utiliser

My.Computer.Network.Ping(host name or IP address, or a System.Uri) 
0

J'aime déterrer de vieux fils! Ma solution était de tester avec DNS. De cette façon, vous pouvez tester des noms spécifiques à l'intérieur du réseau xxx pour savoir si vous êtes à l'intérieur ou à l'extérieur. Les instructions try imbriquées montrent ce concept.

Imports System.Net 

Module Networker 

Dim Online_Status As Boolean = vbFalse 
Dim InsideJoeNetwork As Boolean = vbFalse 
Dim CurrentJoeIPAddress As New IPHostEntry 



Public ReadOnly Property GetOnlineStatus() As String 
    Get 
     Return Online_Status 
    End Get 

End Property 



Public ReadOnly Property InsideJoeNet() As String 
    Get 
     Return InsideJoeNetwork 
    End Get 

End Property 



Sub Initialize() 
    Set_Online_Status() 

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 
       Detect_Joe_Network() 
      Else : Online_Status = False 

      End If 

     Catch ex As System.Net.Sockets.SocketException 

      Online_Status = False 

     End Try 
    End If 

End Sub 



Public Sub Detect_Joe_Network() 

    If Online_Status = True Then 

     Dim JoeIP As IPHostEntry = New IPHostEntry() 

     Try 
      JoeIP = Dns.GetHostEntry("laptop") 
      If JoeIP.AddressList.Length > 0 Then 

       InsideJoeNetwork = True 
       CurrentJoeIPAddress = JoeIP 
       'MessageBox.Show(JoeIP.HostName.ToString(), "JoeIP", MessageBoxButtons.OK, MessageBoxIcon.Information) 
      End If 
     Catch ex As Sockets.SocketException 

      Try 
       JoeIP = Dns.GetHostEntry("laptop.exampledomain.com") 
       If JoeIP.AddressList.Length > 0 Then 

        InsideJoeNetwork = False 
        CurrentJoeIPAddress = JoeIP 
        ' MessageBox.Show(JoeIP.HostName.ToString(), "JoeIP", MessageBoxButtons.OK, MessageBoxIcon.Information) 
       End If 
      Catch ey As Sockets.SocketException 

      End Try 
     End Try 
    End If 

End Sub 

End Module 
Questions connexes