基于三层架构的C#网络配置管理系统(IP修改与XML持久化)

简介: 基于三层架构的C#网络配置管理系统(IP修改与XML持久化)

一、系统架构设计

1.png


二、分层实现

1. Model层(实体类)
// NetworkConfig.cs
namespace Model
{
   
    public class NetworkConfig
    {
   
        public string AdapterName {
    get; set; }  // 网卡名称
        public string IPAddress {
    get; set; }     // IP地址
        public string SubnetMask {
    get; set; }    // 子网掩码
        public string Gateway {
    get; set; }       // 网关
        public bool IsDHCP {
    get; set; }          // 是否启用DHCP
    }
}
2. DAL层(数据访问)
// NetworkConfigDAL.cs
using System.Xml.Linq;
using Model;

namespace DAL
{
   
    public class NetworkConfigDAL
    {
   
        private const string ConfigPath = "network_config.xml";

        // 读取配置
        public List<NetworkConfig> GetConfigs()
        {
   
            if (!System.IO.File.Exists(ConfigPath))
                return new List<NetworkConfig>();

            var xml = XDocument.Load(ConfigPath);
            return xml.Descendants("Network")
                       .Select(x => new NetworkConfig
                       {
   
                           AdapterName = x.Element("AdapterName")?.Value,
                           IPAddress = x.Element("IPAddress")?.Value,
                           SubnetMask = x.Element("SubnetMask")?.Value,
                           Gateway = x.Element("Gateway")?.Value,
                           IsDHCP = (bool?)x.Element("IsDHCP") ?? false
                       }).ToList();
        }

        // 保存配置
        public void SaveConfig(NetworkConfig config)
        {
   
            var xml = new XDocument(
                new XElement("NetworkConfigs",
                    new XElement("Network",
                        new XElement("AdapterName", config.AdapterName),
                        new XElement("IPAddress", config.IPAddress),
                        new XElement("SubnetMask", config.SubnetMask),
                        new XElement("Gateway", config.Gateway),
                        new XElement("IsDHCP", config.IsDHCP)
                    )
                )
            );
            xml.Save(ConfigPath);
        }
    }
}
3. BLL层(业务逻辑)
// NetworkConfigBLL.cs
using System.Net.NetworkInformation;
using DAL;
using Model;

namespace BLL
{
   
    public class NetworkConfigBLL
    {
   
        private readonly NetworkConfigDAL _dal = new NetworkConfigDAL();

        // 加载配置
        public List<NetworkConfig> LoadConfigs()
        {
   
            return _dal.GetConfigs();
        }

        // 应用配置到网卡
        public bool ApplyConfig(NetworkConfig config)
        {
   
            var adapter = NetworkInterface.GetAllNetworkInterfaces()
                .FirstOrDefault(ni => ni.Name.Equals(config.AdapterName, StringComparison.OrdinalIgnoreCase));

            if (adapter == null) return false;

            // 禁用DHCP
            if (!config.IsDHCP)
            {
   
                var managementClass = new ManagementClass("Win32_NetworkAdapterConfiguration");
                var instances = managementClass.GetInstances();
                foreach (ManagementObject instance in instances)
                {
   
                    if (instance["SettingID"].ToString() == adapter.Id)
                    {
   
                        instance.InvokeMethod("EnableDHCP", null); // 关闭DHCP
                        instance.InvokeMethod("SetGateways", new object[] {
    new string[] {
    config.Gateway } });
                        instance.InvokeMethod("EnableStatic", new object[] {
    new string[] {
    config.IPAddress }, new string[] {
    config.SubnetMask } });
                        return true;
                    }
                }
            }
            return false;
        }
    }
}
4. UI层(界面交互)
// MainForm.cs
using System;
using System.Windows.Forms;
using BLL;
using Model;

namespace UI
{
   
    public partial class MainForm : Form
    {
   
        private readonly NetworkConfigBLL _bll = new NetworkConfigBLL();

        public MainForm()
        {
   
            InitializeComponent();
            LoadNetworkConfigs();
        }

        // 加载配置列表
        private void LoadNetworkConfigs()
        {
   
            var configs = _bll.LoadConfigs();
            lstConfigs.Items.Clear();
            foreach (var config in configs)
            {
   
                lstConfigs.Items.Add($"{config.AdapterName} - {(config.IsDHCP ? "DHCP" : "静态IP")}");
            }
        }

        // 修改IP并保存
        private void btnSave_Click(object sender, EventArgs e)
        {
   
            var config = new NetworkConfig
            {
   
                AdapterName = txtAdapterName.Text,
                IPAddress = txtIP.Text,
                SubnetMask = txtSubnet.Text,
                Gateway = txtGateway.Text,
                IsDHCP = chkDHCP.Checked
            };

            if (_bll.ApplyConfig(config))
            {
   
                MessageBox.Show("配置已保存并应用!");
            }
            else
            {
   
                MessageBox.Show("网卡未找到或配置失败!");
            }
        }
    }
}

三、XML配置文件示例

<?xml version="1.0" encoding="utf-8"?>
<NetworkConfigs>
  <Network>
    <AdapterName>以太网</AdapterName>
    <IPAddress>192.168.1.100</IPAddress>
    <SubnetMask>255.255.255.0</SubnetMask>
    <Gateway>192.168.1.1</Gateway>
    <IsDHCP>false</IsDHCP>
  </Network>
</NetworkConfigs>

四、关键功能实现

1. 网卡枚举与选择
// 获取所有网卡名称
var adapters = NetworkInterface.GetAllNetworkInterfaces()
    .Where(ni => ni.OperationalStatus == OperationalStatus.Up)
    .Select(ni => ni.Name)
    .ToList();
2. IP地址合法性验证
// 验证IPv4地址格式
public static bool IsValidIP(string ip)
{
   
    return IPAddress.TryParse(ip, out IPAddress addr) && addr.AddressFamily == AddressFamily.InterNetwork;
}
3. 自动获取当前IP(备用方案)
// 自动检测当前IP配置
public NetworkConfig GetCurrentConfig()
{
   
    var adapter = NetworkInterface.GetAllNetworkInterfaces()
        .FirstOrDefault(ni => ni.OperationalStatus == OperationalStatus.Up);

    if (adapter != null)
    {
   
        var ipProps = adapter.GetIPProperties();
        return new NetworkConfig
        {
   
            AdapterName = adapter.Name,
            IPAddress = ipProps.UnicastAddresses
                .FirstOrDefault(a => a.Address.AddressFamily == AddressFamily.InterNetwork)?.Address.ToString(),
            SubnetMask = ipProps.UnicastAddresses
                .FirstOrDefault(a => a.Address.AddressFamily == AddressFamily.InterNetwork)?.GetAddressBytes()
                .Take(4).Aggregate("", (s, b) => s + $"{b:X2}.").TrimEnd('.'),
            Gateway = ipProps.GatewayAddresses.FirstOrDefault()?.Address.ToString(),
            IsDHCP = ipProps.DnsSuffix != null
        };
    }
    return null;
}

五、异常处理与权限

  1. 管理员权限声明

    app.manifest中添加:

    <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
    
  2. 异常捕获

    try
    {
         
        // 网络配置操作
    }
    catch (ManagementException ex)
    {
         
        MessageBox.Show($"WMI操作失败: {ex.Message}");
    }
    catch (UnauthorizedAccessException)
    {
         
        MessageBox.Show("需要管理员权限!");
    }
    

参考代码 IP设置工具(三层构架) www.youwenfan.com/contentalh/37551.html

六、扩展功能

  1. 批量配置多网卡

    public void BatchApplyConfigs(List<NetworkConfig> configs)
    {
         
        foreach (var config in configs)
        {
         
            ApplyConfig(config);
        }
    }
    
  2. 配置模板导入导出

    // 从文件加载配置
    public List<NetworkConfig> ImportConfigs(string filePath) => _dal.GetConfigs(filePath);
    
    // 导出配置到文件
    public void ExportConfigs(List<NetworkConfig> configs, string filePath)
    {
         
        var xml = new XDocument(new XElement("NetworkConfigs", configs.Select(c => 
            new XElement("Network", 
                new XElement("AdapterName", c.AdapterName),
                new XElement("IPAddress", c.IPAddress),
                new XElement("SubnetMask", c.SubnetMask),
                new XElement("Gateway", c.Gateway),
                new XElement("IsDHCP", c.IsDHCP)))));
        xml.Save(filePath);
    }
    

七、测试用例

场景 输入 预期结果
修改静态IP AdapterName=以太网, IP=192.168.1.100 网卡IP成功修改,XML记录更新
启用DHCP AdapterName=无线网卡, IsDHCP=true 网卡获取动态IP,XML中DHCP标记为true
加载配置文件 读取network_config.xml 显示历史配置列表

八、总结

本方案通过三层架构实现网络配置的解耦管理

  • UI层:提供用户交互界面

  • BLL层:封装业务逻辑(如IP合法性校验、配置应用)

  • DAL层:负责XML持久化操作

  • Model层:定义数据实体结构

优势包括:

  1. 可维护性:各层职责清晰,便于单独修改

  2. 扩展性:支持批量配置、模板导入等扩展功能

  3. 健壮性:异常处理机制保障操作安全

相关文章
|
9月前
|
数据可视化 C#
使用 OpenTK 构建点云浏览程序
C# 通过USB连接斑马打印机打印ZPL条码
356 0
|
5月前
|
SQL 供应链 测试技术
C# 图书管理系统(三层架构)
C#三层架构图书管理系统,包含表示层、业务逻辑层和数据访问层。
|
7月前
|
算法 物联网 芯片
基于STM32和51单片机的8位全彩流水灯程序模板
基于STM32和51单片机的8位全彩流水灯程序模板
|
C#
ICSharpCode.TextEditor使用及扩展
SharpDevelop (#develop)有很多“副产品”,其中最出名的应算SharpZipLib (#ziplib),纯C#的ZIP类库,而在SharpDevelop (#develop)中,“隐藏”了很多优秀的类库,其中ICSharpCode.TextEditor是表表者。
3042 0
|
2月前
|
编译器 开发工具 C语言
【2026最新】CodeBlocks下载 | CodeBlocks官网下载安装汉化教程(带编译器版本)
Code::Blocks是一款免费开源、跨平台(Windows/macOS/Linux)的C/C++集成开发环境,功能完整、轻量高效,支持多种编译器与插件扩展,自带MinGW版本一键安装,汉化便捷,特别适合初学者学习和中小型项目开发。(239字)
|
人工智能 Cloud Native Serverless
从理论到落地:MCP 实战解锁 AI 应用架构新范式
本文旨在从 MCP 的技术原理、降低 MCP Server 构建复杂度、提升 Server 运行稳定性等方面出发,分享我们的一些实践心得。
5052 102
|
弹性计算 数据可视化 安全
Terraform Explorer 正式发布
阿里云推出可视化的Terraform调用工具——Terraform Explorer,简化云资源管理,提供可视化操作界面,免安装、免编写代码、免状态管理,助力开发者高效部署和管理基础设施。
|
自然语言处理 搜索推荐 程序员
因为看不惯Notepad++,国内大佬开源了Notepad--:技术分享与工作学习中的新选择
【8月更文挑战第20天】在编程界,文本编辑器是每一位开发者日常工作中不可或缺的工具。Notepad++,这款曾经风靡一时的文本编辑器,以其强大的功能和简洁的界面赢得了众多程序员的喜爱。然而,近年来,由于其作者的一些不当言论和行为,引发了广泛争议,许多程序员开始寻找替代品。在这样的背景下,国内一位大佬挺身而出,开源了Notepad--,为开发者们带来了一个新的选择。
2144 1
|
Web App开发 网络协议 API
基于C#编写一个远程桌面应用
基于C#编写一个远程桌面应用
921 0
|
SQL 关系型数据库 MySQL
MySQL大数据量分页查询方法及其优化
MySQL大数据量分页查询方法及其优化
832 4

热门文章

最新文章