Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Med System.Net.NetworkInformation namnområdet kan du samla in information om nätverkshändelser, ändringar, statistik och egenskaper. I den här artikeln får du lära dig hur du använder System.Net.NetworkInformation.NetworkChange klassen för att avgöra om nätverksadressen eller tillgängligheten har ändrats. Dessutom får du information om nätverksstatistik och egenskaper på bas av gränssnitt eller protokoll. Slutligen kommer du att använda klassen System.Net.NetworkInformation.Ping för att avgöra om en fjärrvärd kan nås.
Händelser för nätverksändring
Med System.Net.NetworkInformation.NetworkChange klassen kan du avgöra om nätverksadressen eller tillgängligheten har ändrats. Om du vill använda den här klassen skapar du en händelsehanterare för att bearbeta ändringen och associerar den med en NetworkAddressChangedEventHandler eller en 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;
Föregående C#-kod:
- Registrerar en händelsehanterare för NetworkChange.NetworkAvailabilityChanged händelsen.
- Händelsehanteraren skriver bara tillgänglighetsstatusen till konsolen.
- Ett meddelande skrivs till konsolen så att användaren vet att koden lyssnar efter ändringar i nätverkstillgängligheten och väntar på att en tangenttryckning ska avslutas.
- Avregistrerar händelsehanteraren.
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;
Föregående C#-kod:
- Registrerar en händelsehanterare för NetworkChange.NetworkAddressChanged händelsen.
- Händelsehanteraren itererar över NetworkInterface.GetAllNetworkInterfaces()och skriver sitt namn och sin driftstatus till konsolen.
- Ett meddelande skrivs till konsolen så att användaren vet att koden lyssnar efter ändringar i nätverkstillgängligheten och väntar på att en tangenttryckning ska avslutas.
- Avregistrerar händelsehanteraren.
Nätverksstatistik och egenskaper
Du kan samla in nätverksstatistik och egenskaper på gränssnitts- eller protokollbasis. Klasserna NetworkInterface, , och NetworkInterfaceType ger information om ett visst nätverksgränssnitt, medan PhysicalAddressklasserna , IPInterfaceProperties, IPGlobalProperties, IPGlobalStatisticsoch TcpStatistics ger information om layer 3- och layer UdpStatistics4-paket.
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();
}
Föregående C#-kod:
- Anropar en anpassad
ShowStatisticsmetod för att visa statistiken för varje protokoll. - Metoden
ShowStatisticsanropar IPGlobalProperties.GetIPGlobalProperties(), och beroende på angiven NetworkInterfaceComponent anropas IPGlobalProperties.GetIPv4GlobalStatistics() eller IPGlobalProperties.GetIPv6GlobalStatistics(). - De TcpStatistics skrivs ut till konsolen.
Kontrollera om en fjärrvärd kan nås
Du kan använda Ping klassen för att avgöra om en fjärrvärd är igång, i nätverket och kan nås.
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();
}
Föregående C#-kod:
- Instansiera ett Ping objekt.
- Anropar Ping.SendPingAsync(String) med parametern
"stackoverflow.com"hostname. - Status för ping skrivs till konsolen.