Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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 üzere bir olay işleyicisi oluşturun ve bunu bir NetworkAddressChangedEventHandler veya NetworkAvailabilityChangedEventHandler ile 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:
- NetworkChange.NetworkAvailabilityChanged olayı için bir işleyici kaydeder.
- Olay işleyicisi yalnızca konsola kullanılabilirlik durumunu yazar.
- Konsola, kodun ağ kullanılabilirliğindeki değişiklikleri dinlediğini ve çıkış yapmak için bir tuşa basılmasını beklediğini kullanıcıya bildiren bir mesaj yazılır.
- 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:
- NetworkChange.NetworkAddressChanged olayı için bir işleyici kaydeder.
- Olay işleyicisi, NetworkInterface.GetAllNetworkInterfaces() üzerinde yineleyerek adlarını ve işlem durumlarını konsola yazar.
- Konsola, kodun ağ kullanılabilirliğindeki değişiklikleri dinlediğini ve çıkış yapmak için bir tuşa basılmasını beklediğini kullanıcıya bildiren bir mesaj yazılır.
- 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
ShowStatisticsbir yöntem çağırır. -
ShowStatisticsyöntemi, IPGlobalProperties.GetIPGlobalProperties()'i çağırır ve verilen NetworkInterfaceComponent'e bağlı olarak ya IPGlobalProperties.GetIPv4GlobalStatistics() ya da IPGlobalProperties.GetIPv6GlobalStatistics() öğesini çağırır. - TcpStatistics konsola yazılır.
Uzak bir konağın erişilebilir olup olmadığını belirleme
Ping sınıfını kullanarak uzak bir konağın çalışıp çalışmadığını, ağda olup olmadığını ve erişilebilir 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ştur.
-
Ping.SendPingAsync(String),
"stackoverflow.com"hostname parametresiyle çağrılır. - Ping'in durumu konsola yazılır.