Ketersediaan jaringan
Namespace System.Net.NetworkInformation memungkinkan Anda mengumpulkan informasi tentang kejadian, perubahan, statistik, dan properti jaringan. 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 System.Net.NetworkInformation.NetworkChange memungkinkan Anda menentukan jika alamat atau ketersediaan jaringan telah berubah. Untuk menggunakan kelas ini, buat pengatur kejadian untuk memproses perubahan lalu kaitkan perubahan tersebut 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 ditulis ke konsol yang memberi tahu pengguna bahwa kode mendengarkan perubahan ketersediaan jaringan dan menunggu penekanan tombol 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 .
- Penanganan aktivitas melakukan iterasi melalui NetworkInterface.GetAllNetworkInterfaces(), menulis nama dan status operasional mereka ke konsol.
- Pesan ditulis ke konsol yang memberi tahu pengguna bahwa kode mendengarkan perubahan ketersediaan jaringan dan menunggu penekanan tombol keluar.
- Membatalkan pendaftaran penanganan aktivitas.
Statistik dan properti jaringan
Anda dapat mengumpulkan statistik dan properti jaringan berdasarkan antarmuka atau protokol. Kelas NetworkInterface, NetworkInterfaceType, dan PhysicalAddress memberikan informasi tentang antarmuka jaringan tertentu, sementara kelas IPInterfaceProperties, IPGlobalProperties, IPGlobalStatistics, TcpStatistics, dan UdpStatisticsmemberikan 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
ShowStatistics
untuk menampilkan statistik untuk setiap protokol. - Metode
ShowStatistics
memanggil 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.
- Ping.SendPingAsync(String) Panggilan dengan
"stackoverflow.com"
parameter nama host. - Status ping ditulis ke konsol.
Lihat juga
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk