snmp++开发包小例子

在一篇论文上看到了snmp++开发包使用的一个小例子,拿来调试一下。main函数主要代码如下:

#define SYSDESCR      "1.3.6.1.2.1.1.1.0"        //ObjectID for system descriptor 
#define SYSOBJECTID   "1.3.6.1.2.1.1.2.0"        //ObjectID for system object ID 
#define SYSCONTACT    "1.3.6.1.2.1.1.4.0"        //ObjectID for system contact 

int main() {
    int status; 
	Vb vb[3]; 
	Pdu pdu; 
	vb[0].set_oid(SYSDESCR); 
	vb[1].set_oid(SYSOBJECTID); 
	vb[2].set_oid(SYSCONTACT); 
	pdu.set_vblist(vb,3); 
	CTarget ctarget((IpAddress) "192.168.0.1");  //被管代理的ip
	Snmp snmp(status); 
	if((status=snmp.get(pdu, ctarget))!=SNMP_CLASS_SUCCESS) 
		cout<<snmp.error_msg(status); 
	else { 
		pdu.get_vblist(vb,3); 
		for(int i=0;i<3;i++) 
			cout<<vb[i].get_printable_value()<<endl;
	} 

	return 0;
}

 

 加入所需的头文件"snmp_pp.h"后,compile通过,build失败,报类似如下错误:

 

error LNK2001: unresolved external symbol "public: char const * __thiscall Vb::get_printable_value(void)const " (?get_printable_value@Vb@@QBEPBDXZ)

。。。。

 fatal error LNK1120: 33 unresolved externals

 

 

查资料,原来没有引入所需库文件,引入类库:snmp_pp.lib 动态链接库:snmp_pp.dll,再rebuild,成功。

运行后没有得到正确的输出,错误输出如下:

 

20100928.17:39:51: 3464: (4)DEBUG  : SNMPMessage: return value for build message: (0)
SNMP++: Transport operation failed

 

继续查资料,发现原因是由于snmp++开发包利用windows socket通信。这里自然应该先引入相关头文件和类库,再加载套接字库。最终代码如下:

#include <iostream>
#include <winsock2.h>
#include "snmp_pp.h"

using namespace std;

#define SYSDESCR      "1.3.6.1.2.1.1.1.0"        //ObjectID for system descriptor 
#define SYSOBJECTID   "1.3.6.1.2.1.1.2.0"        //ObjectID for system object ID 
#define SYSCONTACT    "1.3.6.1.2.1.1.4.0"        //ObjectID for system contact 

#pragma comment(lib, "snmp_pp.lib")
#pragma comment(lib, "ws2_32.lib")

int main() {
	//加载套接字库
	WORD wVersionRequested;
	WSADATA wsaData;
	int err;

	wVersionRequested = MAKEWORD(1, 1);

	err = WSAStartup(wVersionRequested, &wsaData);
	if(err != 0) {
		return 1;
	}

	if(LOBYTE(wsaData.wVersion) != 1 || HIBYTE(wsaData.wVersion) != 1) {
		WSACleanup();
		return 1;
	}
	//加载结束

    int status; 
	Vb vb[3]; 
	Pdu pdu; 
	vb[0].set_oid(SYSDESCR); 
	vb[1].set_oid(SYSOBJECTID);
	vb[2].set_oid(SYSCONTACT); 
	pdu.set_vblist(vb,3); 
	CTarget ctarget((IpAddress)"10.150.0.84"); 
	Snmp snmp(status); 

	if((status=snmp.get(pdu, ctarget))!=SNMP_CLASS_SUCCESS) 
		cout<<snmp.error_msg(status)<<endl; 
	else { 
		pdu.get_vblist(vb,3); 
		for(int i=0;i<3;i++) 
			cout<<vb[i].get_printable_value()<<endl;
	} 

	return 0;
}

 

运行结果如下:

 

20100928.17:44:26: 3956: (4)DEBUG  : SNMPMessage: return value for build message: (0)
Hardware: x86 Family 6 Model 15 Stepping 6 AT/AT COMPATIBLE -Software: Windows
2000 Version 5.1 (Build 2600 Multiprocessor Free)
1.3.6.1.4.1.311.1.1.3.1.1

 

OK,搞定。

 

你可能感兴趣的:(windows,socket,vb)