【问题标题】:How to set IP address of device connected to Host PC? C# Winform?如何设置连接到主机PC的设备的IP地址? C#Winform?
【发布时间】:2015-12-17 11:39:07
【问题描述】:

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

【问题讨论】:

  • 这与winforms无关。
  • 我想在主机PC上开发C# WinForm应用程序来设置设备的IP地址。

标签: c# winforms networking tcp-ip


【解决方案1】:

您可以使用 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;
    }

四,你可以设置ipaddress:

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

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

【讨论】:

  • 感谢您提供如此详细的答复。但是,您回答的是设置运行应用程序的主机 PC 的 IP 地址。我需要的是,设置连接到主机 PC 的设备的 IP 地址。请帮忙。
  • 嗯,是的,应该有可能,我也没试过。当您创建“ManagementClass”(在 GetNetworkAdapterManagementObject 中)时,您会给出一个所谓的“ManagementPath”(此处为“Win32_NetworkAdapterConfiguration”。您可以给出类似“\\\\ComputerName\\root\\cimv2:Win32_NetworkAdapterConfiguration”之类的内容,其中“ComputerName”是目标机器的名称。我认为您需要该机器上的登录凭据和 WMI 才能以某种方式启用网络。并且您必须知道该机器上的 NetworkInterface.Id ...
  • 我刚刚意识到你的转换器设备可能无法在windows上运行,所以上面提到的方法根本不起作用。该设备提供哪些协议和/或工具?
  • 设备(转换器)提供 SNMP、TCP/IP
猜你喜欢
  • 1970-01-01
  • 2019-06-05
  • 2022-01-18
  • 1970-01-01
  • 2015-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多