[C#] Kiểm tra kết nối internet Realtime sử dụng Network List Manager của Windows
Xin chào các bạn, bài viết hôm nay mình sẽ hướng dẫn các bạn cách kiểm tra kết nối mạng internet realtime trong lập trình C# sử dụng thư viện Network List Manager (NLM) trong Windows. Nếu bạn nào đang lập trình ứng dụng có kết nối internet để làm việc, như ...
Xin chào các bạn, bài viết hôm nay mình sẽ hướng dẫn các bạn cách kiểm tra kết nối mạng internet realtime trong lập trình C# sử dụng thư viện Network List Manager (NLM) trong Windows.
Nếu bạn nào đang lập trình ứng dụng có kết nối internet để làm việc, như những ứng dụng gởi email marketing hàng loạt, curl website hay gởi tin nhắn qua mạng.
Thì chúng ta thường muốn kiểm tra xem kết nối mạng internet có bị sự cố gì hay không.
Nếu có sự cố mất kết nối mạng hoặc có kết nối mạng lại, thì sẽ hiển thị thông báo cho người dùng đang sử dụng phần mềm biết.
Hoặc mình có thể bắt sự kiện mất kết nối đó để xử lý một số yêu cầu theo mục đích của mình.
Thường các bạn muốn kiểm tra kết nối mạng Internet có bị sự cố hay không? các bạn sẽ nghĩ đến ngay là mình sẽ sử dụng một HttpRequest để ping đến một địa chỉ nào đó.
Giao diện demo ứng dụng kiểm tra kết nối internet Realtime C#:
Phần mềm kiểm tra kết nối mạng Internet C#VD: như 8.8.8.8 Dns của google, nếu trả về Timeout thì chúng ta xuất thông báo.
Nhưng trong bài viết này, mình sẽ hướng dẫn các bạn sử dụng thư viện Network List Manager (NLM), thư viện này đi kèm trong bộ Visual Studio của Microsoft, giúp ta có thể lấy tình trạng kết nối internet realtime của windows.
Vậy sử dụng thư viện này mình sẽ bắt được sự kiện kiểm tra kết nối internet của Windows như hình bên dưới, nó kết nối internet qua hai địa chỉ ip: IP v4 và IP v6.
Bây giờ mình sẽ bắt đầu thực hiện:
Đầu tiên các bạn tạo cho mình mới với tên NLM_Demo.
Sau đó, chúng ta sẽ tiến hành import thư viện NetWork List Manager vào project như hình bên dưới.
Khi hộp thoại xuất hiện các bạn chọn Network List Manager 1.0 Type Library như hình bên dưới:
Tiếp theo, các bạn tạo cho mình một class với tên CheckerInternetHelper.cs.
Và class này chúng ta sẽ implement interface INetworkListManagerEvents.
Source code file CheckerInternetHelper.cs C#:
using NETWORKLIST; using System; using System.Drawing; using System.Runtime.InteropServices.ComTypes; namespace NLM_Demo { class CheckerInternetHelper: INetworkListManagerEvents { private int m_cookie = 0; private IConnectionPoint m_icp; private INetworkListManager m_nlm; private Form1 frm; public CheckerInternetHelper(Form1 frm) { m_nlm = new NetworkListManager(); this.frm = frm; } public void SetText(string message, Color color, Color color2) { frm.label1.BeginInvoke(new Action(() => { frm.label1.Text = message; frm.label1.ForeColor = color; frm.label1.BackColor = color2; frm.flyoutPanel1.ShowPopup(); frm.CountDownloadHidePopup(); })); } public void ConnectivityChanged(NLM_CONNECTIVITY newConnectivity) { if (newConnectivity == NLM_CONNECTIVITY.NLM_CONNECTIVITY_DISCONNECTED) { SetText("Đã ngắt kết nối internet!", Color.White, Color.Red); } if (((int)newConnectivity & (int)NLM_CONNECTIVITY.NLM_CONNECTIVITY_IPV4_INTERNET) != 0) { SetText("Đang kết nối thành công Internet với IPv4!", Color.White, Color.Green); } if (((int)newConnectivity & (int)NLM_CONNECTIVITY.NLM_CONNECTIVITY_IPV6_INTERNET) != 0) { SetText("Đang kết nối thành công Internet với IPv6!", Color.White, Color.Green); } if ((((int)newConnectivity & (int)NLM_CONNECTIVITY.NLM_CONNECTIVITY_IPV4_INTERNET) == 0) && (((int)newConnectivity & (int)NLM_CONNECTIVITY.NLM_CONNECTIVITY_IPV6_INTERNET) == 0)) { SetText("Mất kết nối Internet!", Color.White, Color.Red); } } public INetworkListManager NLM { get { return m_nlm; } } public void AdviseforNetworklistManager() { IConnectionPointContainer icpc = (IConnectionPointContainer)m_nlm; Guid tempGuid = typeof(INetworkListManagerEvents).GUID; icpc.FindConnectionPoint(ref tempGuid, out m_icp); m_icp.Advise(this, out m_cookie); } public void UnAdviseforNetworklistManager() { m_icp.Unadvise(m_cookie); } } }
+ Trong bài viết demo này, mình có sử dụng Flyout Panel của Devexpress để hiện thị thông báo.
Và mình có sử dụng một Timer để set cho popup này tự động đóng đi sau khoảng thời gian chúng ta quy định.
Tiếp theo là source code của Form1.cs C#
using DevExpress.XtraEditors; using NETWORKLIST; using System; using System.Windows.Forms; namespace NLM_Demo { public partial class Form1 : DevExpress.XtraEditors.XtraForm { CheckerInternetHelper helper; public Form1() { InitializeComponent(); helper = new CheckerInternetHelper(this); } private void Form1_Load(object sender, EventArgs e) { label2.Text = "Mất kết nối mạng Internet!"; IEnumNetworks Networks = helper.NLM.GetNetworks(NLM_ENUM_NETWORK.NLM_ENUM_NETWORK_CONNECTED); foreach (INetwork item in Networks) { label2.Text = "Đang kết nối mạng:" + item.GetName(); } } private void Form1_FormClosing(object sender, FormClosingEventArgs e) { helper.UnAdviseforNetworklistManager(); } public void CountDownloadHidePopup() { timer1.Enabled = true; } int i = 0; private void timer1_Tick(object sender, EventArgs e) { i++; if (i == 10) { flyoutPanel1.HidePopup(); i = 0; timer1.Enabled = false; } } private void btn_dangky_Click(object sender, EventArgs e) { helper.AdviseforNetworklistManager(); XtraMessageBox.Show("Đã đăng ký kiểm tra kết nối mạng thành công!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information); } private void btn_huydangky_Click(object sender, EventArgs e) { helper.UnAdviseforNetworklistManager(); XtraMessageBox.Show("Đã hủy đăng ký kiểm tra kết nối mạng!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information); } } }
Hy vọng bài viết sẽ giúp ích được cho các bạn.
Video demo ứng dụng Detect Internet Realtime C#:
Thanks for watching!
DOWNLOAD SOURCE