using System; using System.Collections.Generic; using System.Linq; using System.Net.NetworkInformation; using System.Net.Sockets; using System.Text; using System.Threading.Tasks; namespace LB_SmartVisionCommon { public class NetworkDiagnostics { public static async Task CheckNetworkStatusAsync(string host = "www.google.com") { var status = new NetworkStatus(); // 测试Ping status.CanPing = await TestPingAsync(host); // 测试HTTP status.CanAccessHttp = await TestHttpAsync($"https://{host}"); // 测试常用端口 status.CanAccessPort80 = await TestTcpPortAsync(host, 80); status.CanAccessPort443 = await TestTcpPortAsync(host, 443); status.IsNetworkAvailable = NetworkInterface.GetIsNetworkAvailable(); return status; } public static async Task CheckNetworkCanPingStatusAsync(string host = "www.google.com") { var status = new NetworkStatus(); // 测试Ping status.CanPing = await TestPingAsync(host); //// 测试HTTP //status.CanAccessHttp = await TestHttpAsync($"https://{host}"); //// 测试常用端口 //status.CanAccessPort80 = await TestTcpPortAsync(host, 80); //status.CanAccessPort443 = await TestTcpPortAsync(host, 443); status.IsNetworkAvailable = NetworkInterface.GetIsNetworkAvailable(); return status; } private static async Task TestPingAsync(string host) { try { using (var ping = new Ping()) { var reply = await ping.SendPingAsync(host, 3000); return reply.Status == IPStatus.Success; } } catch { return false; } } private static async Task TestHttpAsync(string url) { try { using (var client = new HttpClient { Timeout = TimeSpan.FromSeconds(10) }) { var response = await client.GetAsync(url); return response.IsSuccessStatusCode; } } catch { return false; } } private static async Task TestTcpPortAsync(string host, int port) { try { using (var client = new TcpClient()) { var task = client.ConnectAsync(host, port); return await Task.WhenAny(task, Task.Delay(3000)) == task && client.Connected; } } catch { return false; } } } public class NetworkStatus { public bool IsNetworkAvailable { get; set; } public bool CanPing { get; set; } public bool CanAccessHttp { get; set; } public bool CanAccessPort80 { get; set; } public bool CanAccessPort443 { get; set; } public void PrintStatus() { Console.WriteLine($"网络接口可用: {IsNetworkAvailable}"); Console.WriteLine($"Ping测试: {CanPing}"); Console.WriteLine($"HTTP访问: {CanAccessHttp}"); Console.WriteLine($"端口80: {CanAccessPort80}"); Console.WriteLine($"端口443: {CanAccessPort443}"); } } }