WEB开发网
开发学院软件开发VC 用VC++6.0实现SNMP协议的方法 阅读

用VC++6.0实现SNMP协议的方法

 2008-11-13 19:34:18 来源:WEB开发网   
核心提示: 一且进行得很顺利,不过如果你没有进行过SNMP编程的话,用VC++6.0实现SNMP协议的方法(6),你会对其中两个结构感到迷惑,一个是smiLPCOID,让我们来看看smiVALUE结构,这个结构比较复杂,还有就是smiLPCVALUE,别急

一且进行得很顺利,不过如果你没有进行过SNMP编程的话,你会对其中两个结构感到迷惑,一个是smiLPCOID,还有就是smiLPCVALUE,别急,先看第一个结构,你会发现有一个英文组合你会很熟悉,因为我在前文介绍过他,就是smiLPCOID中的OID,对了,他的意思是对象标志符,LP如果你常用VC编程也会知道他多数是一个指针了。是了,他就是一个指向smiOID的指针类型。让我们看看他的内部构造:

typedef struct {
smiUINT32 len; // number of array elements
smiLPUINT32 ptr; // pointer to an array of subidentifiers
} smiOID, *smiLPOID;

有两个类型,第一个用来指定他有多少个数字,第二个则指向一个一维数组,举个例子,如果一个对象标志符是1.3.6.1.2.1.1.1,那么len应该为8,ptr应该指向一个数组,该数组的元素由1,3,6,1,2,1,1,1组成,好像“.”没有了,正确,因为在SNMP中就要用到这样的结构,你会想,怎样才能构造这样一个结构呢?很简单,SNMP的API函数给我们提供了方便,你可以定义一个字符串如"1.3.6.1.2.1.1.1",用

SNMPAPI_STATUS SnmpStrToOid(
LPCSTR string, // string object identifier to convert
smiLPOID dstOID // object identifier internal representation
);

函数来进行转换,看看其中两个参数,是不是很吻合的对应啊。当然,这种转换时可逆的,你可以用SnmpOidToStr来进行,具体可以查一下MSDN。

下面讲一讲smiLPCVALUE,由上面的推理,你一定可以得出他是一个指向smiVALUE的指针类型。让我们来看看smiVALUE结构,这个结构比较复杂,我试图讲得清楚一些。

typedef struct { // smiVALUE portion of VarBind
smiUINT32 syntax; // Insert SNMP_SYNTAX_<type>
union {
smiINT sNumber; // SNMP_SYNTAX_INT
// SNMP_SYNTAX_INT32
smiUINT32 uNumber; // SNMP_SYNTAX_UINT32
// SNMP_SYNTAX_CNTR32
// SNMP_SYNTAX_GAUGE32
// SNMP_SYNTAX_TIMETICKS
smiCNTR64 hNumber; // SNMP_SYNTAX_CNTR64
smiOCTETS string; // SNMP_SYNTAX_OCTETS
// SNMP_SYNTAX_BITS
// SNMP_SYNTAX_OPAQUE
// SNMP_SYNTAX_IPADDR
// SNMP_SYNTAX_NSAPADDR
smiOID oid; // SNMP_SYNTAX_OID
smiBYTE empty; // SNMP_SYNTAX_NULL
// SNMP_SYNTAX_NOSUCHOBJECT
// SNMP_SYNTAX_NOSUCHINSTANCE
// SNMP_SYNTAX_ENDOFMIBVIEW
} value; // union
} smiVALUE, *smiLPVALUE;

上一页  1 2 3 4 5 6 7 8 9 10  下一页

Tags:VC 实现 SNMP

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接