<HP>SNMP++开发包 编程重新封装的几个函数

1、采集单个标量数据

BOOL getvalue(CString& oidStr,CString& ipAdressStr,CString& valueStr)

第一个参数 oidStr表示MIB中需要采集对象的OID值,第二个参数ipAddressStr表示采集目标的IP地址。第三个参数valueStr用来存放采集得到的数据。三个参数的类型均为CString&。函数返回值为BOOL型,如果采集成功返回TRUE,否则返回FALSE。

BOOL getvalue(CString& oidStr,CString& ipAdressStr,CString& valueStr)
{

int status;
Snmp snmp( status);                  // check construction status
if ( status != SNMP_CLASS_SUCCESS)
{
    CString temp="SNMP++ Session Create Fail, ";
    temp+=snmp.error_msg(status);
    AfxMessageBox(temp);
    return FALSE;
}

//--------[ build up SNMP++ object needed ]-------------------------------
Pdu pdu;                                  // construct a Pdu object
Vb vb; // construct a Vb object
Oid oid(oidStr);
IpAddress ipaddress(ipAdressStr);
if(!oid.valid())
{
    AfxMessageBox("oid非法");
    return FALSE;
}
if(!ipaddress.valid())
{
    AfxMessageBox("IP地址非法");
    return FALSE;
}

vb.set_oid(oid);// set the Oid portion of the Vb
pdu += vb;                                // add the vb to the Pdu
CTarget target(ipaddress);                 // make a target using the address
target.set_version( version2c);             // set the SNMP version SNMPV1 or V2
target.set_retry( 1);               // set the number of auto retries
target.set_timeout( 100);             // set timeout
target.set_readcommunity( "public");     // set read community
target.set_writecommunity( "public");// set the write community name

//-------[ issue the request, blocked mode ]-----------------------------
if (    (status = snmp.get(    pdu, target)) != SNMP_CLASS_SUCCESS)
{
    AfxMessageBox(snmp.error_msg( status));
    return FALSE;
}
else
{
    processPos+=procSpan;
    pdu.get_vb( vb,0);                                                // extract the variable binding
    valueStr=vb.get_printable_value();  
}    // print out

return TRUE;
};

2、采集多个标量数据

为了减少采集时发送的请求PDU数据报数,尽量减少对网络通信的影响,同时提供友好的通用性接口而设计的。在数据采集过程中方便使用,该子功能模块和以上不同之处是为Pdu变量绑定了多个OID,在绑定变量中分别取出其对应的值,并把取得的值赋值给CStringArray类型的字符串变量,第一个参数表示采集目标的IP地址,第二个参数为绑定变量数组,在初始化时和多个OID绑定,第三个参数用来存储返回的采集数据。实现主要代码如下:

void get_group(CString &strIP,Vb vbs[],CStringArray& valuestr,int oidNum)

{

       CTarget target((IpAddress) strIP);

……//在target上设置SNMP版本,重试次数,超时时间,共同体名

     Pdu pdu;  

       pdu.set_vblist(vbs,oidNum);//设置多个绑定变量

       int status;

       Snmp snmp( status);                    

       if ( status != SNMP_CLASS_SUCCESS)

       {      

       AfxMessageBox( snmp.error_msg( status));

       return;  

       }

       if ((status = snmp.get(pdu, target)) != SNMP_CLASS_SUCCESS)

              AfxMessageBox(snmp.error_msg( status));//如果不成功则提出错误信息

       else

       {

              processPos+=procSpan;

              pdu.get_vblist(vbs,oidNum);//取出多个绑定变量              

              for ( int w=0;w<oidNum;w++)

              valuestr.Add(vbs[w].get_printable_value( ));//对绑定变量中分别取出值

       }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值