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:
- Her protokolün istatistiklerini görüntülemek için özel
ShowStatistics
bir yöntem çağırır. ShowStatistics
yöntemi öğesini çağırır IPGlobalProperties.GetIPGlobalProperties()ve verilene NetworkInterfaceComponent bağlı olarak veya IPGlobalProperties.GetIPv6GlobalStatistics()öğesini çağırırIPGlobalProperties.GetIPv4GlobalStatistics().- TcpStatistics konsola yazılır.
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.