Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
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 fait une itération sur NetworkInterface.GetAllNetworkInterfaces(), en écrivant 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 classes NetworkInterface, NetworkInterfaceType et PhysicalAddress fournissent des informations sur une interface réseau particulière, tandis que les classes IPInterfaceProperties, IPGlobalProperties, IPGlobalStatistics, TcpStatistics et UdpStatistics 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. - La méthode
ShowStatisticsappelle IPGlobalProperties.GetIPGlobalProperties(), et selon le NetworkInterfaceComponent donné appellera soit IPGlobalProperties.GetIPv4GlobalStatistics() soit IPGlobalProperties.GetIPv6GlobalStatistics(). - Les TcpStatistics 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.
- Appelle Ping.SendPingAsync(String) avec le paramètre
"stackoverflow.com"nom d'hôte. - L’état du ping est affiché dans la console.