c# - 如何设置连接到主机 PC 的设备的 IP 地址? C# 窗体?

标签 c# winforms networking tcp

我有一个 Modbus TCP/IP 到 MODBUS RTU 转换器,其默认 IP 为 192.168.0.1。我需要开发一个小型 c# Winform 应用程序来将此设备的 IP 地址更改为任何所需的 IP 地址。我该怎么做?

最佳答案

您可以使用 WMI ( Windows Management Instrumentation )。

首先,您必须将对 System.Management 的引用添加到您的项目中。

其次,您需要通过名称为您的网络连接找到NetworkInterface:

using System.Net.NetworkInformation;
using System.Management;

public class NetworkManager
{
    public static NetworkInterface GetNetworkInterface(string sName)
    {
        NetworkInterface NetInterface = null;

        // Precondition
        if (sName == "") return null;

        NetworkInterface[] interfaces = NetworkInterface.GetAllNetworkInterfaces();
        foreach (NetworkInterface ni in interfaces)
        {
            if (ni.Name == sName)
            {
                NetInterface = ni;
                break;
            }
        }

        return NetInterface;
    }

第三,您必须为您的 NetworkInterface 创建一个 ManagementObject:

    public static ManagementObject GetNetworkAdapterManagementObject(NetworkInterface NetInterface)
    {
        ManagementObject oMngObj = null;

        // Precondition
        if (NetInterface == null) return null;

        string sNI = NetInterface.Id;

        ManagementClass oMC = new ManagementClass("Win32_NetworkAdapterConfiguration");
        ManagementObjectCollection oMOC = oMC.GetInstances();

        foreach (ManagementObject oMO in oMOC)
        {
            string sMO = oMO["SettingID"].ToString();
            if (sMO == sNI)
            {
                // Found
                oMngObj = oMO;
                break;
            }
        }

        return oMngObj;
    }

四,你可以设置ipadress:

    public static bool SetIPAdress(ManagementObject oMO, string[] saIPAdress, string[] saSubnetMask)
    {
        bool bErg = false;
        try
        {
            // Precondition
            if (oMO == null) return false;
            if (saIPAdress == null) return false;
            if (saSubnetMask == null) return false;

            // Get ManagementBaseObject 
            ManagementBaseObject oNewIP = null;
            oNewIP = oMO.GetMethodParameters("EnableStatic");

            oNewIP["IPAddress"] = saIPAdress;
            oNewIP["SubnetMask"] = saSubnetMask;

            // Invoke
            oMO.InvokeMethod("EnableStatic", oNewIP, null);

            // Alles ok
            bErg = true;
        }
        catch (Exception ex)
        {
            Console.WriteLine("SetIPAdress failed: " + ex.Message);
        }

        return bErg;
    }
}

现在您可以使用它,例如在按钮单击事件处理程序中:

private void button1_Click(object sender, EventArgs e)
{
    string sConn = "LAN-Verbindung";
    NetworkInterface oNI = NetworkManager.GetNetworkInterface(sConn);
    ManagementObject oMO = NetworkManager.GetNetworkAdapterManagementObject(oNI);

    string sIPAdress = "192.168.1.1";
    string sSubnetMask = "255.255.255.0";
    string[] saIPAdress = {sIPAdress};
    string[] saSubnetMask = {sSubnetMask};
    if (NetworkManager.SetIPAdress(oMO, saIPAdress, saSubnetMask))
    {
        Console.WriteLine("Yes...");
    }
}

根据您电脑上的政策,您可能必须以管理员身份运行该程序...

关于c# - 如何设置连接到主机 PC 的设备的 IP 地址? C# 窗体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34333683/

相关文章:

c# - 如果文件名有单引号 C# javascript 不会被执行

c# - TreeView 通过一些节点移除 CheckBox

android.net.wifi.WIFI_STATE_CHANGED 未被广播

c# - 后台下载器 windows 8 多个文件

c# - 旋转渐变在 WPF 中脱离 Canvas

c# - HTTP 错误 404.0 - 在 MVC 5 中找不到

c# - 安装应用程序后单击此处

c# - 获取数组中最大和最小的数

git - 无法连接到 Github?

iphone - iOS 设备空闲,网络停止。我如何收到有关进入 'idle' 状态的通知?