当前位置: 首页 > news >正文

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

一、系统架构设计

graph TDA[UI层] -->|调用BLL方法| B(BLL业务逻辑层)B -->|调用DAL方法| C(DAL数据访问层)C -->|读写XML配置| D[XML配置文件]B -->|调用系统API| E[网络适配器管理]

二、分层实现

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;// 禁用DHCPif (!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); // 关闭DHCPinstance.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/contentcnr/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. 健壮性:异常处理机制保障操作安全

http://www.jsqmd.com/news/424879/

相关文章:

  • 2026小学语文线上培训优质机构全解析 - 品牌测评鉴赏家
  • GPT-4o 打造爆款网文生成器:长文本自动化流水线的奇妙之旅
  • 2026高中语文辅导机构实测推荐|避坑不踩雷,适配全分段学生 - 品牌测评鉴赏家
  • Task03:栈
  • 计算机毕业设计springboot汉服文化交流系统 基于SpringBoot的传统服饰文化传播与互动社区平台 JavaWeb华夏衣冠文化展示与爱好者交流管理系统
  • 学术对话
  • 家有小学生必看!4款高口碑小学语文线上辅导课实测 - 品牌测评鉴赏家
  • 计算机毕业设计springboot贵州红色旅游推荐系统 基于SpringBoot的贵州革命文化景点智能导览与服务平台 JavaWeb贵州红色文化资源数字化管理与推荐系统
  • 博客园皮肤 - -星语
  • 家有小学生必看!4款高口碑语文线上课实测,轻松提升孩子语文素养不踩坑 - 品牌测评鉴赏家
  • 从此告别拖延! 降AI率网站 千笔AI VS 知文AI
  • 2026初中语文提分秘籍!这几家辅导机构绝了 - 品牌测评鉴赏家
  • 插件分享:将ChatGPT生成的数学公式无损导出到Word文档
  • 2026年家长必看!亲子文旅研学机构红黑榜出炉 - 品牌测评鉴赏家
  • 这份榜单够用!9个AI论文网站测评:本科生毕业论文+科研写作全攻略
  • 如果我不在了,凤希,你能“复活”我吗?
  • 第 177 场双周赛Q2——3853. 合并靠近字符
  • AI时代顶级思维:你的提问方式,早已暴露你的认知层级
  • 电机整体设计案例:ANSYS 仿真下的多物理场耦合探秘
  • 2026冲刺用!降AI率工具 千笔 VS 灵感ai,MBA专属更高效!
  • 光电对抗:仿生飞行器的飞特征和反侦察能力及其光电对抗和防卫能力建设(续)
  • 2026小学语文辅导机构推荐|家长闭眼抄作业,避坑不花冤枉钱 - 品牌测评鉴赏家
  • 计算机毕业设计springboot国学经典在线学习管理系统安全开发 基于SpringBoot的中华传统文化数字化学习平台安全架构设计 JavaWeb经典文献在线教育系统安全防护与资源管理实现
  • Task01:数组
  • 2026初中语文辅导机构推荐|实测6家热门平台,精准避坑不花冤枉钱 - 品牌测评鉴赏家
  • 三相不平衡潮流计算:基于Matlab的前推回代法实现
  • 2026,Java/Python程序员进击AI应用开发全攻略
  • LeetCode 1689:十-二进制数的最少数目
  • 2026寒假文旅研学TOP10机构大揭秘,选对不踩坑! - 品牌测评鉴赏家
  • Task00:任务安排