Cách tốt nhất để xác định xem có kết nối mạng không?Làm cách nào để kiểm tra kết nối mạng?
Trả lời
Bạn có thể kiểm tra kết nối mạng trong .NET 2.0 sử dụng GetIsNetworkAvailable()
:
System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable()
Theo dõi thay đổi địa chỉ IP hoặc thay đổi trong khả dụng của mạng sử dụng các sự kiện từ lớp NetworkChange:
System.Net.NetworkInformation.NetworkChange.NetworkAvailabilityChanged
System.Net.NetworkInformation.NetworkChange.NetworkAddressChanged
Câu trả lời được đánh dấu là 100% tiền phạt, tuy nhiên, có một số trường hợp khi phương pháp chuẩn bị lừa bởi thẻ ảo (hộp ảo, ...). Nó cũng thường được mong muốn để loại bỏ một số giao diện mạng dựa trên tốc độ của họ (cổng nối tiếp, modem, ...).
Dưới đây là một đoạn mã để kiểm tra đối với các trường hợp:
/// <summary>
/// Indicates whether any network connection is available
/// Filter connections below a specified speed, as well as virtual network cards.
/// </summary>
/// <returns>
/// <c>true</c> if a network connection is available; otherwise, <c>false</c>.
/// </returns>
public static bool IsNetworkAvailable()
{
return IsNetworkAvailable(0);
}
/// <summary>
/// Indicates whether any network connection is available.
/// Filter connections below a specified speed, as well as virtual network cards.
/// </summary>
/// <param name="minimumSpeed">The minimum speed required. Passing 0 will not filter connection using speed.</param>
/// <returns>
/// <c>true</c> if a network connection is available; otherwise, <c>false</c>.
/// </returns>
public static bool IsNetworkAvailable(long minimumSpeed)
{
if (!NetworkInterface.GetIsNetworkAvailable())
return false;
foreach (NetworkInterface ni in NetworkInterface.GetAllNetworkInterfaces())
{
// discard because of standard reasons
if ((ni.OperationalStatus != OperationalStatus.Up) ||
(ni.NetworkInterfaceType == NetworkInterfaceType.Loopback) ||
(ni.NetworkInterfaceType == NetworkInterfaceType.Tunnel))
continue;
// this allow to filter modems, serial, etc.
// I use 10000000 as a minimum speed for most cases
if (ni.Speed < minimumSpeed)
continue;
// discard virtual cards (virtual box, virtual pc, etc.)
if ((ni.Description.IndexOf("virtual", StringComparison.OrdinalIgnoreCase) >= 0) ||
(ni.Name.IndexOf("virtual", StringComparison.OrdinalIgnoreCase) >= 0))
continue;
// discard "Microsoft Loopback Adapter", it will not show as NetworkInterfaceType.Loopback but as Ethernet Card.
if (ni.Description.Equals("Microsoft Loopback Adapter", StringComparison.OrdinalIgnoreCase))
continue;
return true;
}
return false;
}
điều này là đúng và xứng đáng với nhiều upvotes - tôi thấy rằng sự kiện NetworkAvailabilityChanged được đề cập trong câu trả lời được chấp nhận không được bắn đáng tin cậy, có thể do bộ điều hợp ảo gây ra như đã đề cập trong câu trả lời – Marek
+1 này cho việc kiểm tra bổ sung cho máy ảo. Chỉ cần chạy vào trường hợp này ngày hôm qua. Nhưng tôi vẫn nghĩ rằng điều này không xử lý 'Hype-V', do họ không có 'ảo' trong tên của họ. – Herdo
@Herdo - vâng, mã không hoàn hảo, và tôi không nghĩ rằng * có thể * là bất kỳ thứ gì hoàn hảo trong thế giới ảo. Nhưng bạn có thể cải thiện nó. –
Microsoft windows vista và 7 sử dụng NCSI (Khả năng kết nối mạng Status Indicator) technic:
- NCSI thực hiện một tra cứu DNS trên www.msftncsi.com, sau đó yêu cầu http://www.msftncsi.com/ncsi.txt. Tệp này là một tệp văn bản thuần túy và chỉ chứa văn bản 'Microsoft NCSI'.
- NCSI gửi yêu cầu tra cứu DNS cho dns.msftncsi.com. Địa chỉ DNS này sẽ giải quyết thành 131.107.255.255. Nếu địa chỉ không khớp, thì giả định rằng kết nối internet không hoạt động chính xác.
Điều này thật tuyệt, nhưng về mặt kỹ thuật không có tính khả dụng của 'mạng' nhưng nhiều hơn 'tôi có kết nối internet qua http không?' Bạn có thể có kết nối mạng hoàn hảo nhưng không có kết nối Internet, ví dụ trên một làn đường độc lập. Xem thêm thông tin om NCSI: http://technet.microsoft.com/en-us/library/cc766017.aspx – MichielB
Gọi phương thức này để kiểm tra kết nối mạng.
public static bool IsConnectedToInternet()
{
bool returnValue = false;
try
{
int Desc;
returnValue = Utility.InternetGetConnectedState(out Desc, 0);
}
catch
{
returnValue = false;
}
return returnValue;
}
Đặt dòng mã bên dưới này.
[DllImport("wininet.dll")]
public extern static bool InternetGetConnectedState(out int Description, int ReservedValue);
- 1. Java Kiểm tra nhanh kết nối mạng
- 2. Làm cách nào để kiểm tra kết nối svn?
- 3. Làm thế nào để kiểm tra kết nối FTP?
- 4. Làm thế nào để kiểm tra Kết nối/Express middleware?
- 5. c3p0 Kiểm tra kết nối
- 6. Làm cách nào để kiểm tra kết nối bị hỏng của TCPClient sau khi được kết nối?
- 7. Kiểm tra kết nối WCF
- 8. Tắt kết nối mạng
- 9. Kết nối lại ổ đĩa mạng đã ngắt kết nối
- 10. Javascript để kiểm tra trạng thái kết nối không dây
- 11. Kiểm tra xem PC có được kết nối trên mạng LAN hay không
- 12. Làm cách nào để kiểm tra theo chương trình xem tôi đã kết nối với miền nào?
- 13. Làm cách nào để kiểm tra kết nối internet trong Android?
- 14. Làm cách nào để thiết lập chứng chỉ kiểm tra cho kết nối SSL trong .NET?
- 15. Làm cách nào để kiểm tra số lượng kết nối mở trong node.js?
- 16. Làm cách nào để kiểm tra kết nối liên tục trong máy chủ HTTP?
- 17. Làm cách nào để kiểm tra kết nối socket.io cục bộ?
- 18. Làm cách nào để kiểm tra xem ổ cắm có được kết nối không?
- 19. Kiểm tra kết nối internet chậm iOS
- 20. Làm cách nào để kiểm tra lỗi gọi lại ajax?
- 21. MongoDB: kiểm tra kết nối với DB
- 22. Kiểm tra - Chuỗi kết nối bị thiếu
- 23. Kiểm tra kết nối php/mysqli
- 24. Kiểm tra kết nối FTP bằng Python
- 25. cách kiểm tra Internet thực được kết nối trong Android?
- 26. Cách chính xác để kiểm tra mạng di động có sẵn (không có kết nối dữ liệu)
- 27. Làm thế nào để bạn sử dụng telnet để kiểm tra kết nối với Oracle?
- 28. Cách kiểm tra kết nối internet trong Java
- 29. Cách tắt/bật kết nối mạng trong C#
- 30. Kiểm tra ngắt mạng trong phần mềm
Điều này có quan tâm đến "tính khả dụng giới hạn" không? – tofutim
Điều này không phải lúc nào cũng hoạt động trong WPF. Một số máy tính xách tay trở lại sai và một số trở lại đúng – krilovich
Điều này thực sự làm việc? Tôi vừa viết dòng này và tắt bộ định tuyến của mình và vẫn trả về đúng! – Mushfiq