C# 使用SNMP为轮询网络设备编写类
我必须编写一个类,它使用SNMP从网络设备请求信息。 第一件事是找出设备的种类。 第二个-设备的轮询 我想写一个只需要IP地址的类,它将根据设备类型收集信息 但我不明白如何用最好的方式来做 我不喜欢这样,因为有两个SNMP类 可能有一个简单的代码,它是如何在不同的应用程序中实现的 现在我有了这样的模板:C# 使用SNMP为轮询网络设备编写类,c#,C#,我必须编写一个类,它使用SNMP从网络设备请求信息。 第一件事是找出设备的种类。 第二个-设备的轮询 我想写一个只需要IP地址的类,它将根据设备类型收集信息 但我不明白如何用最好的方式来做 我不喜欢这样,因为有两个SNMP类 可能有一个简单的代码,它是如何在不同的应用程序中实现的 现在我有了这样的模板: class NetworkDevice { SNMP snmp; GenericDevice gd; .... public string GetObjectID
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方法)
考虑使用(抽象)工厂模式来生成正确的类。这是一种设计模式。我建议使用诸如SharpSNMP库之类的解决方案,我在SNMP类中使用它。SNMP类是我的一个接口。哦!这是我的错。在中使用的Snmp未在GenericDevice中使用。DeviceKind_1和DeviceKind_2。一般情况下,设备必须是专用SNMP;