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<NetworkStatus> 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<NetworkStatus> 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<bool> 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<bool> 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<bool> 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}");
|
}
|
}
|
}
|