c#: 检测网路连通性

2024-05-15 18:32

本文主要是介绍c#: 检测网路连通性,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

环境:
-window 10 x64 专业版
-vs2019
-.net 控制台 ; .net framework4.0;

参照:https://www.cnblogs.com/fuchongjundream/p/3853820.html

一、先看运行效果

在这里插入图片描述

二、代码

InternectCheckHelper.cs

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net.NetworkInformation;
using System.Security.Policy;
using System.Text;namespace ConsoleApp9
{public class InternectCheckHelper{private static List<string> _interneturls = null;private static List<string> _localneturls = null;static InternectCheckHelper(){_interneturls = new List<string>() { "www.baidu.com", "www.sina.com", "www.cnblogs.com" };_localneturls = new List<string>();for (int i = 0; i < 11; i++){_localneturls.Add($"192.168.{i}.1");_localneturls.Add($"10.0.{i}.1");_localneturls.Add($"172.16.{i}.1");}}/// <summary>/// 设置用于检测互联网连通性的地址,如:www.baidu.com,程序检测时会执行ping命令检测/// </summary>/// <param name="urls"></param>public static void SetInternetPingUrls(params string[] urls){if (urls != null && urls.Length > 0){_interneturls = new List<string>();_interneturls.AddRange(urls);}}/// <summary>/// 设置用于检测局域网连通性的地址,如:192.168.0.1,程序检测时会执行ping命令检测/// </summary>/// <param name="urls"></param>public static void SetLocalnetPingUrls(params string[] urls){if (urls != null && urls.Length > 0){_localneturls = new List<string>();_localneturls.AddRange(urls);}}/// <summary>/// 检测是否能连接到互联网/// </summary>/// <returns></returns>public static bool CanConnectInternect(){//先检查本地网络状态if (!LocalConnectionStatus()) return false;//再检查互联网连通状态if (!NetConnectionStatus(_interneturls)) return false;return true;}public static string GetConnectType(){System.Int32 dwFlag = new Int32();if (!InternetGetConnectedState(ref dwFlag, 0)){return "未连网";}else{if ((dwFlag & INTERNET_CONNECTION_MODEM) != 0){return "调制解调器";}else if ((dwFlag & INTERNET_CONNECTION_LAN) != 0){return "网卡";}}return "未连网";}public static bool CanConnectLocalnet(){//先检查本地网络状态if (!LocalConnectionStatus()) return false;//再检查内网连通状态if (!NetConnectionStatus(_localneturls)) return false;return true;}#region 网络检测private const int INTERNET_CONNECTION_MODEM = 1;private const int INTERNET_CONNECTION_LAN = 2;[System.Runtime.InteropServices.DllImport("winInet.dll")]private static extern bool InternetGetConnectedState(ref int dwFlag, int dwReserved);/// <summary>/// 判断本地的连接状态/// </summary>/// <returns></returns>private static bool LocalConnectionStatus(){System.Int32 dwFlag = new Int32();if (!InternetGetConnectedState(ref dwFlag, 0)) return false;else{if ((dwFlag & INTERNET_CONNECTION_MODEM) != 0) return true;else if ((dwFlag & INTERNET_CONNECTION_LAN) != 0) return true;}return false;}private static bool NetConnectionStatus(List<string> urls){Ping ping = new Ping();try{PingReply pr;for (int i = 0; i < urls.Count; i++){pr = ping.Send(urls[i]);if (pr.Status == IPStatus.Success) return true;}return false;}catch (Exception ex){try{string path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "logs");if (!Directory.Exists(path)) Directory.CreateDirectory(path);path = Path.Combine(path, $"{DateTime.Now.ToString("yyyy-MM-dd")}.inetchk.log");File.AppendAllText(path, $"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")}  err:{ex?.Message} {ex?.StackTrace}");}catch { }return false;}}#endregion}
}

调用: Program.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.NetworkInformation;
using System.Text;namespace ConsoleApp9
{class Program{static void Main(string[] args){if (InternectCheckHelper.CanConnectInternect()){Console.WriteLine("能连接到互联网.");}else{Console.WriteLine("不能连接到互联网");}if (InternectCheckHelper.CanConnectLocalnet()){Console.WriteLine("能连接到局域网.");}else{Console.WriteLine("不能连接到局域网.");}Console.WriteLine($"连接类型:{InternectCheckHelper.GetConnectType()}");Console.ReadKey();}}
}

这篇关于c#: 检测网路连通性的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/992593

相关文章

2. c#从不同cs的文件调用函数

1.文件目录如下: 2. Program.cs文件的主函数如下 using System;using System.Collections.Generic;using System.Linq;using System.Threading.Tasks;using System.Windows.Forms;namespace datasAnalysis{internal static

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

C#实战|大乐透选号器[6]:实现实时显示已选择的红蓝球数量

哈喽,你好啊,我是雷工。 关于大乐透选号器在前面已经记录了5篇笔记,这是第6篇; 接下来实现实时显示当前选中红球数量,蓝球数量; 以下为练习笔记。 01 效果演示 当选择和取消选择红球或蓝球时,在对应的位置显示实时已选择的红球、蓝球的数量; 02 标签名称 分别设置Label标签名称为:lblRedCount、lblBlueCount

烟火目标检测数据集 7800张 烟火检测 带标注 voc yolo

一个包含7800张带标注图像的数据集,专门用于烟火目标检测,是一个非常有价值的资源,尤其对于那些致力于公共安全、事件管理和烟花表演监控等领域的人士而言。下面是对此数据集的一个详细介绍: 数据集名称:烟火目标检测数据集 数据集规模: 图片数量:7800张类别:主要包含烟火类目标,可能还包括其他相关类别,如烟火发射装置、背景等。格式:图像文件通常为JPEG或PNG格式;标注文件可能为X

用命令行的方式启动.netcore webapi

用命令行的方式启动.netcore web项目 进入指定的项目文件夹,比如我发布后的代码放在下面文件夹中 在此地址栏中输入“cmd”,打开命令提示符,进入到发布代码目录 命令行启动.netcore项目的命令为:  dotnet 项目启动文件.dll --urls="http://*:对外端口" --ip="本机ip" --port=项目内部端口 例: dotnet Imagine.M

基于 YOLOv5 的积水检测系统:打造高效智能的智慧城市应用

在城市发展中,积水问题日益严重,特别是在大雨过后,积水往往会影响交通甚至威胁人们的安全。通过现代计算机视觉技术,我们能够智能化地检测和识别积水区域,减少潜在危险。本文将介绍如何使用 YOLOv5 和 PyQt5 搭建一个积水检测系统,结合深度学习和直观的图形界面,为用户提供高效的解决方案。 源码地址: PyQt5+YoloV5 实现积水检测系统 预览: 项目背景

JavaFX应用更新检测功能(在线自动更新方案)

JavaFX开发的桌面应用属于C端,一般来说需要版本检测和自动更新功能,这里记录一下一种版本检测和自动更新的方法。 1. 整体方案 JavaFX.应用版本检测、自动更新主要涉及一下步骤: 读取本地应用版本拉取远程版本并比较两个版本如果需要升级,那么拉取更新历史弹出升级控制窗口用户选择升级时,拉取升级包解压,重启应用用户选择忽略时,本地版本标志为忽略版本用户选择取消时,隐藏升级控制窗口 2.

C# dateTimePicker 显示年月日,时分秒

dateTimePicker默认只显示日期,如果需要显示年月日,时分秒,只需要以下两步: 1.dateTimePicker1.Format = DateTimePickerFormat.Time 2.dateTimePicker1.CustomFormat = yyyy-MM-dd HH:mm:ss Tips:  a. dateTimePicker1.ShowUpDown = t

C#关闭指定时间段的Excel进程的方法

private DateTime beforeTime;            //Excel启动之前时间          private DateTime afterTime;               //Excel启动之后时间          //举例          beforeTime = DateTime.Now;          Excel.Applicat

C# 防止按钮botton重复“点击”的方法

在使用C#的按钮控件的时候,经常我们想如果出现了多次点击的时候只让其在执行的时候只响应一次。这个时候很多人可能会想到使用Enable=false, 但是实际情况是还是会被多次触发,因为C#采用的是消息队列机制,这个时候我们只需要在Enable = true 之前加一句 Application.DoEvents();就能达到防止重复点击的问题。 private void btnGenerateSh