Dostępność sieci
System.Net.NetworkInformation Przestrzeń nazw umożliwia zbieranie informacji o zdarzeniach sieciowych, zmianach, statystykach i właściwościach. W tym artykule dowiesz się, jak za pomocą System.Net.NetworkInformation.NetworkChange klasy określić, czy adres sieciowy czy dostępność uległa zmianie. Ponadto zobaczysz informacje o statystykach sieci i właściwościach interfejsu lub protokołu. Na koniec użyjesz System.Net.NetworkInformation.Ping klasy , aby określić, czy host zdalny jest osiągalny.
Zdarzenia zmiany sieci
Klasa System.Net.NetworkInformation.NetworkChange umożliwia określenie, czy adres sieciowy lub dostępność uległ zmianie. Aby użyć tej klasy, utwórz procedurę obsługi zdarzeń w celu przetworzenia zmiany i skojarz ją z elementem NetworkAddressChangedEventHandlerNetworkAvailabilityChangedEventHandlerlub .
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;
Poprzedni kod języka C#:
- Rejestruje program obsługi zdarzeń dla NetworkChange.NetworkAvailabilityChanged zdarzenia.
- Procedura obsługi zdarzeń po prostu zapisuje stan dostępności w konsoli programu .
- Komunikat jest zapisywany w konsoli, aby poinformować użytkownika, że kod nasłuchuje zmian dostępności sieci i czeka na zakończenie naciśnięcia klawisza.
- Wyrejestrowuje procedurę obsługi zdarzeń.
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;
Poprzedni kod języka C#:
- Rejestruje program obsługi zdarzeń dla NetworkChange.NetworkAddressChanged zdarzenia.
- Program obsługi zdarzeń iteruje NetworkInterface.GetAllNetworkInterfaces()wartość , zapisuj ich nazwę i stan operacyjny w konsoli programu .
- Komunikat jest zapisywany w konsoli, aby poinformować użytkownika, że kod nasłuchuje zmian dostępności sieci i czeka na zakończenie naciśnięcia klawisza.
- Wyrejestrowuje procedurę obsługi zdarzeń.
Statystyki i właściwości sieci
Statystyki i właściwości sieci można zbierać na podstawie interfejsu lub protokołu. Klasy NetworkInterface, NetworkInterfaceTypei PhysicalAddress zapewniają informacje o określonym interfejsie sieciowym, podczas gdy IPInterfacePropertiesklasy , IPGlobalProperties, IPGlobalStatistics, TcpStatisticsi UdpStatistics zapewniają informacje o pakietach warstwy 3 i 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();
}
Poprzedni kod języka C#:
- Wywołuje metodę niestandardową
ShowStatistics
, aby wyświetlić statystyki dla każdego protokołu. - Metoda
ShowStatistics
wywołuje IPGlobalProperties.GetIPGlobalProperties()metodę , a w zależności od podanej NetworkInterfaceComponent metody wywoła metodę IPGlobalProperties.GetIPv4GlobalStatistics() lub IPGlobalProperties.GetIPv6GlobalStatistics(). - Element TcpStatistics jest zapisywany w konsoli programu .
Określanie, czy host zdalny jest osiągalny
Możesz użyć Ping klasy , aby określić, czy host zdalny jest włączony, w sieci i osiągalny.
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();
}
Poprzedni kod języka C#:
- Utwórz wystąpienie Ping obiektu.
- Wywołania Ping.SendPingAsync(String) za pomocą parametru
"stackoverflow.com"
nazwa hosta. - Stan polecenia ping jest zapisywany w konsoli programu .