Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用SNMP为轮询网络设备编写类_C# - Fatal编程技术网

C# 使用SNMP为轮询网络设备编写类

C# 使用SNMP为轮询网络设备编写类,c#,C#,我必须编写一个类,它使用SNMP从网络设备请求信息。 第一件事是找出设备的种类。 第二个-设备的轮询 我想写一个只需要IP地址的类,它将根据设备类型收集信息 但我不明白如何用最好的方式来做 我不喜欢这样,因为有两个SNMP类 可能有一个简单的代码,它是如何在不同的应用程序中实现的 现在我有了这样的模板: class NetworkDevice { SNMP snmp; GenericDevice gd; .... public string GetObjectID

我必须编写一个类,它使用SNMP从网络设备请求信息。 第一件事是找出设备的种类。 第二个-设备的轮询

我想写一个只需要IP地址的类,它将根据设备类型收集信息

但我不明白如何用最好的方式来做

我不喜欢这样,因为有两个SNMP类

可能有一个简单的代码,它是如何在不同的应用程序中实现的

现在我有了这样的模板:

class NetworkDevice
{
    SNMP snmp;
    GenericDevice gd;
    ....
    public string GetObjectID() 
    {
         return snmp.Get(mib).ToString();
    }

    public void Scan()
    {
        string obj_id = GetObjectID();
        if(obj_id.StartsWith(".1.3.6.1.4.1.15")
            gd = new DeviceKind_1(ip_addr);
        if(obj_id.StartsWith(".1.3.6.1.4.1.181")
            gd = new DeviceKind_2(ip_addr);
        gd.Scan();
    }
}

class GenericDevice
{
    private SNMP snmp;
    private DeviceInfo Info;
    ....
    public void Scan()
    {

    }
}

class DeviceKind_1 : GenericDevice
{
    ....
    public void override Scan()
    {
        DeviceInfo.DEVICE_SPECIAL_PARAM_1 = snmp.Get(mib);
        ....
    }
    ....
}

class DeviceKind_2 : GenericDevice
{
    ....
    public void override Scan()
    {
        DeviceInfo.DEVICE_SPECIAL_PARAM_1 = snmp.Get(mib);
        ....
    }
    ....
}
*代码已编辑*

我发现一些问题:

  • 正如您已经提到的,snmp被使用了两次。为什么不从GenericDevice继承NetworkDevice并从NetworkDevice中删除snmp变量
  • snmp未在GenericDevice中使用(尚未?)。。。在这种情况下,您可以将其从GenericDevice中删除,并仅将其保留在NetworkDevice中。否则,只能将其保存在GenericDevice中并对其进行保护(或使用get/set方法)
好的是您有多个类,因此必须很容易在GenericDevice中保留所有通用功能,在NetworkDevice中保留所有网络特定功能,并为特定设备提供单独的类


考虑使用(抽象)工厂模式来生成正确的类。这是一种设计模式。

我建议使用诸如SharpSNMP库之类的解决方案,我在SNMP类中使用它。SNMP类是我的一个接口。哦!这是我的错。在中使用的Snmp未在GenericDevice中使用。DeviceKind_1和DeviceKind_2。一般情况下,设备必须是专用SNMP;