Ağ kullanılabilirliği

Ad System.Net.NetworkInformation alanı ağ olayları, değişiklikler, istatistikler ve özellikler hakkında bilgi toplamanızı sağlar. Bu makalede, ağ adresinin veya kullanılabilirlik durumunun System.Net.NetworkInformation.NetworkChange değişip değişmediğini belirlemek için sınıfını kullanmayı öğreneceksiniz. Ayrıca, ağ istatistiklerini ve özelliklerini arabirim veya protokol temelinde görürsünüz. Son olarak, uzak bir konağa ulaşılabilir olup olmadığını belirlemek için sınıfını System.Net.NetworkInformation.Ping kullanacaksınız.

Ağ değişikliği olayları

sınıfı, System.Net.NetworkInformation.NetworkChange ağ adresinin veya kullanılabilirlik durumunun değişip değişmediğini belirlemenizi sağlar. Bu sınıfı kullanmak için, değişikliği işlemek için bir olay işleyicisi oluşturun ve bunu veya NetworkAddressChangedEventHandlerNetworkAvailabilityChangedEventHandlerile ilişkilendirin.

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;

Yukarıdaki C# kodu:

  • Olay için bir olay işleyicisi NetworkChange.NetworkAvailabilityChanged kaydeder.
  • Olay işleyicisi yalnızca konsola kullanılabilirlik durumunu yazar.
  • Konsola kodun ağ kullanılabilirliğindeki değişiklikleri dinlediğini bildiren bir ileti yazılır ve bir tuş basmasının çıkmasını bekler.
  • Olay işleyicisinin kaydını kaldırıyor.
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;

Yukarıdaki C# kodu:

  • Olay için bir olay işleyicisi NetworkChange.NetworkAddressChanged kaydeder.
  • Olay işleyicisi, konsola adını ve işlem durumunu yazarak üzerinde NetworkInterface.GetAllNetworkInterfaces()yinelenir.
  • Konsola kodun ağ kullanılabilirliğindeki değişiklikleri dinlediğini bildiren bir ileti yazılır ve bir tuş basmasının çıkmasını bekler.
  • Olay işleyicisinin kaydını kaldırıyor.

Ağ istatistikleri ve özellikleri

Ağ istatistiklerini ve özelliklerini arabirim veya protokol temelinde toplayabilirsiniz. NetworkInterface, NetworkInterfaceTypeve PhysicalAddress sınıfları belirli bir ağ arabirimi IPInterfacePropertieshakkında bilgi verirken , IPGlobalProperties, IPGlobalStatistics, TcpStatisticsve UdpStatistics sınıfları katman 3 ve katman 4 paketleri hakkında bilgi verir.

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();
}

Yukarıdaki C# kodu:

Uzak konağa ulaşılıp ulaşılmadığını belirleme

Sınıfını kullanarak uzak bir konağın Ping çalışır durumda, ağda ve ulaşılabilir durumda olup olmadığını belirleyebilirsiniz.

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();
}

Yukarıdaki C# kodu:

  • Bir Ping nesne örneği oluşturma.
  • Hostname parametresiyle "stackoverflow.com" çağrılarPing.SendPingAsync(String).
  • Ping'in durumu konsola yazılır.

Ayrıca bkz.