Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Namespace System.Net.NetworkInformation memungkinkan Anda mengumpulkan informasi tentang peristiwa jaringan, perubahan, statistik, dan properti. Dalam artikel ini, Anda akan mempelajari cara menggunakan System.Net.NetworkInformation.NetworkChange kelas untuk menentukan apakah alamat jaringan atau ketersediaan telah berubah. Selain itu, Anda akan melihat statistik dan properti jaringan berdasarkan antarmuka atau protokol. Terakhir, Anda akan menggunakan System.Net.NetworkInformation.Ping kelas untuk menentukan apakah host jarak jauh dapat dijangkau.
Peristiwa perubahan jaringan
Kelas ini System.Net.NetworkInformation.NetworkChange memungkinkan Anda menentukan apakah alamat jaringan atau ketersediaan telah berubah. Untuk menggunakan kelas ini, buat penanganan aktivitas untuk memproses perubahan, dan kaitkan dengan NetworkAddressChangedEventHandler atau 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;
Kode C# sebelumnya:
- Mendaftarkan penanganan aktivitas untuk peristiwa tersebut NetworkChange.NetworkAvailabilityChanged .
- Penanganan aktivitas hanya menulis status ketersediaan ke konsol.
- Pesan ditampilkan di konsol untuk memberi tahu pengguna bahwa kode sedang memantau perubahan ketersediaan jaringan dan menunggu pengguna menekan tombol untuk keluar.
- Membatalkan pendaftaran penanganan aktivitas.
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;
Kode C# sebelumnya:
- Mendaftarkan penanganan aktivitas untuk peristiwa tersebut NetworkChange.NetworkAddressChanged .
- Handler event melakukan iterasi melalui NetworkInterface.GetAllNetworkInterfaces(), menulis nama dan status operasional mereka ke konsol.
- Pesan ditampilkan di konsol untuk memberi tahu pengguna bahwa kode sedang memantau perubahan ketersediaan jaringan dan menunggu pengguna menekan tombol untuk keluar.
- Membatalkan pendaftaran penanganan aktivitas.
Statistik dan properti jaringan
Anda dapat mengumpulkan statistik dan properti jaringan berdasarkan antarmuka atau protokol. Kelas NetworkInterface, , NetworkInterfaceTypedan PhysicalAddress memberikan informasi tentang antarmuka jaringan tertentu, sementara IPInterfacePropertieskelas , , IPGlobalPropertiesIPGlobalStatistics, TcpStatistics, dan UdpStatistics memberikan informasi tentang paket lapisan 3 dan lapisan 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();
}
Kode C# sebelumnya:
- Memanggil metode kustom
ShowStatisticsuntuk menampilkan statistik untuk setiap protokol. - Metode
ShowStatisticsmemanggil IPGlobalProperties.GetIPGlobalProperties(), dan tergantung pada yang diberikan NetworkInterfaceComponent akan memanggil IPGlobalProperties.GetIPv4GlobalStatistics() atau IPGlobalProperties.GetIPv6GlobalStatistics(). - TcpStatistics ditulis ke konsol.
Menentukan apakah host jarak jauh dapat dijangkau
Anda dapat menggunakan Ping kelas untuk menentukan apakah host jarak jauh aktif, di jaringan, dan dapat dijangkau.
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();
}
Kode C# sebelumnya:
- Membuat instans Ping objek.
- Memanggil Ping.SendPingAsync(String) dengan parameter nama host
"stackoverflow.com". - Status ping ditulis ke konsol.