Note
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier les répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de changer de répertoire.
L’espace System.Net.NetworkInformation de noms vous permet de collecter des informations sur les événements réseau, les modifications, les statistiques et les propriétés. Dans cet article, vous allez apprendre à utiliser la System.Net.NetworkInformation.NetworkChange classe pour déterminer si l’adresse réseau ou la disponibilité a changé. En outre, vous verrez les statistiques et les propriétés du réseau sur une base d’interface ou de protocole. Enfin, vous allez utiliser la System.Net.NetworkInformation.Ping classe pour déterminer si un hôte distant est accessible.
Événements de modification du réseau
La System.Net.NetworkInformation.NetworkChange classe vous permet de déterminer si l’adresse réseau ou la disponibilité a changé. Pour utiliser cette classe, créez un gestionnaire d’événements pour traiter la modification et l’associer à un NetworkAddressChangedEventHandler ou un 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;
Le code C# précédent :
- Inscrit un gestionnaire d’événements pour l’événement NetworkChange.NetworkAvailabilityChanged .
- Le gestionnaire d’événements écrit simplement l’état de disponibilité dans la console.
- Un message est écrit dans la console pour informer l’utilisateur que le code écoute les modifications apportées à la disponibilité du réseau et attend qu’une touche appuie sur la sortie.
- Annule l’inscription du gestionnaire d’événements.
NetworkChange.NetworkAddressChanged += OnNetworkAddressChanged;
static void OnNetworkAddressChanged(
object? sender, EventArgs args)
{
foreach ((string name, OperationalStatus status) in
NetworkInterface.GetAllNetworkInterfaces()
.Select(networkInterface =>
(networkInterface.Name, networkInterface.OperationalStatus)))
{
Console.WriteLine(
$"{name} is {status}");
}
}
Console.WriteLine(
"Listening for address changes. Press any key to continue.");
Console.ReadLine();
NetworkChange.NetworkAddressChanged -= OnNetworkAddressChanged;
Le code C# précédent :
- Inscrit un gestionnaire d’événements pour l’événement NetworkChange.NetworkAddressChanged .
- Le gestionnaire d’événements itère sur NetworkInterface.GetAllNetworkInterfaces(), écrit son nom et son état opérationnel dans la console.
- Un message est écrit dans la console pour informer l’utilisateur que le code écoute les modifications apportées à la disponibilité du réseau et attend qu’une touche appuie sur la sortie.
- Annule l’inscription du gestionnaire d’événements.
Statistiques et propriétés réseau
Vous pouvez collecter des statistiques et des propriétés réseau sur une base d’interface ou de protocole. Les NetworkInterfaceclasses et PhysicalAddress les classes NetworkInterfaceTypefournissent des informations sur une interface réseau particulière, tandis que les IPGlobalPropertiesIPInterfacePropertiesIPGlobalStatisticsclasses , , et TcpStatisticsUdpStatistics les classes fournissent des informations sur les paquets de couche 3 et de couche 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();
}
Le code C# précédent :
- Appelle une méthode personnalisée
ShowStatisticspour afficher les statistiques de chaque protocole. - Les
ShowStatisticsappels IPGlobalProperties.GetIPGlobalProperties()de méthode, et en fonction de l’appel donné NetworkInterfaceComponent , ou IPGlobalProperties.GetIPv4GlobalStatistics()IPGlobalProperties.GetIPv6GlobalStatistics(). - Les TcpStatistics données sont écrites dans la console.
Déterminer si un hôte distant est accessible
Vous pouvez utiliser la Ping classe pour déterminer si un hôte distant est actif, sur le réseau et accessible.
using Ping ping = new();
string hostName = "stackoverflow.com";
PingReply reply = await ping.SendPingAsync(hostName);
Console.WriteLine($"Ping status for ({hostName}): {reply.Status}");
if (reply is { Status: IPStatus.Success })
{
Console.WriteLine($"Address: {reply.Address}");
Console.WriteLine($"Roundtrip time: {reply.RoundtripTime}");
Console.WriteLine($"Time to live: {reply.Options?.Ttl}");
Console.WriteLine();
}
Le code C# précédent :
- Instanciez un Ping objet.
- Appels Ping.SendPingAsync(String) avec le paramètre nom d’hôte
"stackoverflow.com". - L’état du test ping est écrit dans la console.