C# – Kiểm tra sự tồn tại của các địa chỉ Internet

Có một cách đơn giản để kiểm tra xem các đường dẫn địa chỉ Internet còn hiệu lực hay không trong .Net là sử dụng một số lớp trong namespace System.Net.NetworkInformation.

Cụ thể chúng ta sẽ dùng cách thức ping như trong Command Line đến địa chỉ cần xác thực và kiểm tra kết quả trả về.

Bạn có thể tạo một chương trình mẫu như sau:

 

Giao diện trên gồm 1 ListView chính có hai cột, chứa các địa chỉ cần kiểm tra.

-Khi nhấn nút Add sẽ thêm một địa chỉ từ TextBox bên cạnh vào ListView.

-Nút Check Now! dùng  để tiến hành kiểm tra từng địa chỉ trong ListView và hiển thị kết quả bên cột thứ 2 (true hoặc false).

Trước tiên bạn cần tham chiếu đến namesapce sau:

using System.Net.NetworkInformation;

Phương thức kiểm tra địa chỉ:

public bool isAddressAvailable(string address)

{

Ping ping = new Ping();

try

{

return ping.Send(address, 100).Status == IPStatus.Success;

}

catch

{

return false;

}

}

Tham số thứ 2 của phương thức Send là một số kiểu int xác định thời gian (tính bằng mili giây) chờ thông điệp được gửi trả về khi chúng ta bắt đầu ping. Nếu bạn gán một giá trị quá nhỏ chẳng hạn 1/1000 giây, việc kiểm tra có thể không chính xác đối với một số địa chỉ.

Phương thức Send của lớp Ping trả về một kiểu enum IPStatus thể hiện trạng thái của địa chỉ. Enum này có khá nhiều phần từ nhưng chúng ta chỉ cần quan tâm đến IPStatus.Success, tức là việc ping đến địa chỉ này thành công và địa chỉ được xác nhận là có tồn tại.

Tiếp đến là mã lệnh cho nút Check Now. Cách làm của ta là lặp qua từng hàng của ListView, kiểm tra địa chỉ ở cột đầu tiên và gán kết quả vào cột thứ hai:

 

private void btnCheck_Click(object sender, EventArgs e)

{

foreach (ListViewItem item in listView1.Items)

{

Application.DoEvents();

bool available = isAddressAvailable(item.Text);

try

{

item.SubItems[1].Text = available.ToString();

}

catch

{

item.SubItems.Add(available.ToString());

}

if (!available)

item.ForeColor = Color.Red;

}

} 

Bạn dùng câu lệnh

item.SubItems[1].Text = available.ToString();

để gán Text cho cột thứ nhất của một dòng trong ListView. Tuy nhiên nếu dòng này chưa được tạo thì sẽ xảy ra một ngoại lệ, vì vậy ta sẽ bắt ngoại lệ này và viết lệnh thêm một cột mới trong C# cho ListViewItem đang xét.

Phương thức tĩnh Application.DoEvents giúp cho việc cập nhật này được hiển thị ngay lên ListView. Nếu như không dùng phương thức này, ListView sẽ được cập nhật nội dung chỉ sau khi vòng lặp của chúng ta kết thúc.

Tags: