Saltar para o conteúdo principal
Este browser já não é suportado.
Atualize para o Microsoft Edge para tirar partido das mais recentes funcionalidades, atualizações de segurança e de suporte técnico.
Disponibilidade de rede
- Artigo
- 09/22/2022
- 2 minutos para ler
Neste artigo
O System.Net.NetworkInformation espaço de nome permite-lhe recolher informações sobre eventos de rede, alterações, estatísticas e propriedades. Neste artigo, você vai aprender a usar a System.Net.NetworkInformation.NetworkChange classe para determinar se o endereço de rede ou disponibilidade mudou. Além disso, você verá sobre as estatísticas e propriedades da rede numa base de interface ou protocolo. Finalmente, você usará a System.Net.NetworkInformation.Ping classe para determinar se um hospedeiro remoto é acessível.
Eventos de mudança de rede
A System.Net.NetworkInformation.NetworkChange classe permite-lhe determinar se o endereço de rede ou disponibilidade mudou. Para utilizar esta classe, crie um manipulador de eventos para processar a mudança e associá-la a um NetworkAddressChangedEventHandler ou um NetworkAvailabilityChangedEventHandler.
NetworkChange.NetworkAvailabilityChanged += OnNetworkAvailabilityChanged; static void OnNetworkAvailabilityChanged( object? sender, NetworkAvailabilityEventArgs networkAvailability) => Console.WriteLine($"Network is available: {networkAvailability.IsAvailable}"); Console.WriteLine( "Listening changes in network availability. Press any key to continue."); Console.ReadLine(); NetworkChange.NetworkAvailabilityChanged -= OnNetworkAvailabilityChanged;O código C# anterior:
- Regista um manipulador de eventos para o NetworkChange.NetworkAvailabilityChanged evento.
- O manipulador de eventos simplesmente escreve o estado de disponibilidade para a consola.
- Uma mensagem é escrita para a consola, informando o utilizador de que o código está a ouvir alterações na disponibilidade da rede e aguarda a saída de uma tecla.
- Desagrega o manipulador de eventos.
O código C# anterior:
- Regista um manipulador de eventos para o NetworkChange.NetworkAddressChanged evento.
- O manipulador de eventos itera- se NetworkInterface.GetAllNetworkInterfaces(), escrevendo o seu nome e estado operacional para a consola.
- Uma mensagem é escrita para a consola, informando o utilizador de que o código está a ouvir alterações na disponibilidade da rede e aguarda a saída de uma tecla.
- Desagrega o manipulador de eventos.
Estatísticas e propriedades da rede
Pode recolher estatísticas de rede e propriedades numa base de interface ou protocolo. As NetworkInterfaceclasses NetworkInterfaceTypee PhysicalAddress as classes dão informações sobre uma determinada interface de rede, enquanto as classes dão UdpStatistics informações sobre os IPGlobalStatisticsIPInterfacePropertiesIPGlobalPropertiesTcpStatisticspacotes da camada 3 e da camada 4.
ShowStatistics(NetworkInterfaceComponent.IPv4); ShowStatistics(NetworkInterfaceComponent.IPv6); static void ShowStatistics(NetworkInterfaceComponent version) { var properties = IPGlobalProperties.GetIPGlobalProperties(); var stats = version switch { NetworkInterfaceComponent.IPv4 => properties.GetTcpIPv4Statistics(), _ => properties.GetTcpIPv6Statistics() }; Console.WriteLine($"TCP/{version} Statistics"); Console.WriteLine($" Minimum Transmission Timeout : {stats.MinimumTransmissionTimeout:#,#}"); Console.WriteLine($" Maximum Transmission Timeout : {stats.MaximumTransmissionTimeout:#,#}"); Console.WriteLine(" Connection Data"); Console.WriteLine($" Current : {stats.CurrentConnections:#,#}"); Console.WriteLine($" Cumulative : {stats.CumulativeConnections:#,#}"); Console.WriteLine($" Initiated : {stats.ConnectionsInitiated:#,#}"); Console.WriteLine($" Accepted : {stats.ConnectionsAccepted:#,#}"); Console.WriteLine($" Failed Attempts : {stats.FailedConnectionAttempts:#,#}"); Console.WriteLine($" Reset : {stats.ResetConnections:#,#}"); Console.WriteLine(" Segment Data"); Console.WriteLine($" Received : {stats.SegmentsReceived:#,#}"); Console.WriteLine($" Sent : {stats.SegmentsSent:#,#}"); Console.WriteLine($" Retransmitted : {stats.SegmentsResent:#,#}"); Console.WriteLine(); }O código C# anterior:
- Chama um método personalizado ShowStatistics para exibir as estatísticas de cada protocolo.
- O ShowStatistics método chama IPGlobalProperties.GetIPGlobalProperties(), e dependendo do dado NetworkInterfaceComponent , ou ligará IPGlobalProperties.GetIPv4GlobalStatistics() ou IPGlobalProperties.GetIPv6GlobalStatistics().
- Estão TcpStatistics escritos para a consola.
Determinar se um hospedeiro remoto é acessível
Pode utilizar a Ping classe para determinar se um hospedeiro remoto está ligado, na rede e acessível.
O código C# anterior:
- Instantiizar um Ping objeto.
- Chamadas Ping.SendPingAsync(String) com o "stackoverflow.com" parâmetro do nome anfitrião.
- O estado do ping está escrito na consola.
Ver também
- Programação de rede em .NET
- NetworkInterface