www org mapwingis mapwindows mapwindow espaƱol c# .net network-programming

org - Verificando el estado de la red en C#



mapwindows 5 (7)

¿Cómo compruebo que tengo una conexión de red abierta y puedo contactar una dirección IP específica en c #? He visto ejemplos en VB.Net pero todos usan la estructura ''Mi''. Gracias.


Bueno, intentaría conectarse a la ip específica y manejar las negativas y los tiempos de espera.

Mire la clase TcpClient en el espacio de nombres System.Net.Sockets.


Si está interesado en el código de estado HTTP, lo siguiente funciona bien:

using System; using System.Net; class Program { static void Main () { HttpWebRequest req = WebRequest.Create( "http://www.oberon.ch/") as HttpWebRequest; HttpWebResponse rsp; try { rsp = req.GetResponse() as HttpWebResponse; } catch (WebException e) { if (e.Response is HttpWebResponse) { rsp = e.Response as HttpWebResponse; } else { rsp = null; } } if (rsp != null) { Console.WriteLine(rsp.StatusCode); } } }

Saludos, Tamberg


Si solo quieres comprobar si la red está activa, utiliza:

bool networkUp = System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable();

Para verificar el estado de una interfaz específica (u otra información), use:

NetworkInterface[] networkCards = System.Net.NetworkInformation.NetworkInterface.GetAllNetworkInterfaces();

Para verificar el estado de una computadora remota, entonces deberá conectarse a esa computadora (ver otras respuestas)


Si desea supervisar los cambios en el estado, use el evento System.Net.NetworkInformation.NetworkChange.NetworkAvailabilityChanged :

NetworkChange.NetworkAvailabilityChanged += new NetworkAvailabilityChangedEventHandler(NetworkChange_NetworkAvailabilityChanged); _isNetworkOnline = NetworkInterface.GetIsNetworkAvailable(); // ... void NetworkChange_NetworkAvailabilityChanged(object sender, NetworkAvailabilityEventArgs e) { _isNetworkOnline = e.IsAvailable; }


Mi idea era tener una clase / Módulo estático para hacer el monitoreo en un hilo Spereate. Una resolución simple de DNS asegurará que su red esté en funcionamiento. Beats 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

También tuve que determinar si estaba dentro o fuera de mi red de trabajo. Diferentes servidores en cada lado del firewall para que la aplicación pueda comunicarse.


Primera sugerencia (conexión IP)

Puede tratar de conectarse a la dirección IP usando algo como:

IPEndPoint ipep = new IPEndPoint(Ipaddress.Parse("IP TO CHECK"), YOUR_PORT_INTEGER); Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); server.Connect(ipep);

Te sugiero que consultes el código de verificación de un programa de "Chat". Estos programas manipulan muchas conexiones de IP y le darán una buena idea de cómo verificar si una IP está disponible.

Segunda sugerencia (Ping)

Puedes intentar hacer ping. Aquí hay un buen tutorial . Solo necesitarás hacer:

Ping netMon = new Ping(); PingResponse response = netMon.PingHost(hostname, 4); if (response != null) { ProcessResponse(response); }


Puede verificar el estado de la red usando

if(System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable()) { //Do your stuffs when network available } else { //Do stuffs when network not available }