添加SNMP++到VC6.0

來源:互聯網
上載者:User

隨著上次的snmp_pp.lib檔案的編譯成功,我對於SNMP++的學習得以進一步學入,這次是學習SNMP++軟體包中的各種類,它們分別是Oid類、IpAddress和UdpAddress類、Vb類、Pdu類、Snmp類,通過對這幾種類的學習,最終我們可以通過SNMP++對支援SNMP管理的網路裝置(如CISCO的交換器)進行SNMP操作(比如GET等)。
一、 自娛自樂的Oid類、IpAddress和UdpAddress類
為什麼這麼說,因為這兩種類操作時沒有網路通訊的操作,Oid類主要作用就是構造Oid對象。我們可以通過snmp_pp.doc檔案中提供的例子學習該類的使用(snmp_pp.doc是什麼,就是官方的使用手冊,從百度上可以找到中文翻譯版,從www.yahoo.com上可以找到英文的原版,我把兩個版本都下載下來了,對照著看收穫很大)。Snmp_pp.doc文檔中提供的例子太長了,為了讓大家有耐心把原始碼敲進去,我打算把這個例子分成兩部分,一部分是一個最基本的Oid例子,另一部分是比較完整的例子。
1、 基本的Oid例子
在此我對於在VC++6.0中的操作也作一個簡要的說明
1)建立一個Win32 ConsoleApplication程式,取名為snmpoid1,1所示:

圖1
2)建立一個C++來源程式,取名為snmpoid1,並添加到工程snmpoid1中,2所示:

圖2
3)為了翻譯時不出一大堆錯誤,我們需要在“Project”-“Settings”-“Link”中進行一些必要的設定,一是在“Object/librarymodules:”中添加snmp_pp.lib和ws2_32.lib,二是在“ProjectOptions”中添加/nodefaultlib:libcmtd,3所示:


圖3
4)來源程式及運行結果4所示:

圖4
2、 完整的Oid例子
有了上面的基礎,我們已經可以確認我們有能力在VC++6.0中使用SNMP++的Oid類了,所以不妨全面的瞭解一下Oid類。源代表碼如下(需要說明一點,這個來源程式的最後一部分我沒有調試通過,所以把它注釋起來了,如果有誰知道sprintf這條語句怎麼用,一定要告訴我一聲啊):
#include "snmp_pp.h"
#include "oid.h"
#include
//#include
//#include
//#include
//#include
void main()
{
   // construct an Oid with adotted string and print it out
 //用點分八進位定義一個Oid並輸出它
   Oido1("1.2.3.4.5.6.7.8.9.1");
   cout << "o1= " <<o1.get_printable ()<
   // construct an Oid withanother Oid and print it out
  //用一個Oid定義另一個Oid並輸出它
   Oid o2(o1);
   cout << "o2= " <<o2.get_printable()<
   // trim o2's last value andprint it out
  //trim的作用是刪除Oid最右邊的n個子單元,預設是1個,從輸出的結果看最右邊的1被刪掉了
   o2.trim(1);
   cout << "o2= " <<o2.get_printable()<
 
   // add a 2 value to the end ofo2 and print it out
  //把2這個值加到o2後面並輸出它
  o2+=2;
   cout << "o2= " <<o2.get_printable()<
 
   // create a new Oid, o3
   //定義一個新的Oid,o3
   Oid o3;
   // assign o3 a value and printit out
   //定義o3的值並輸出它
  o3="1.2.3.4.5.6.7.8.9.3";
   cout << "o3= " <<o3.get_printable()<
 
   // create o4
   //建立一個Oid,o4
   Oid o4;

   // assign o4 o1's value
   //用o1來定義o4的值
   o4=o1;
 
   // trim off o4 by 1
   //刪除o4最右邊的一個值
   o4.trim(1);
 
   // concat a 4 onto o4 andprint it out
   //o4後面加上".4"並輸出
  o4+=".4";
   cout << "o4= " <<o4.get_printable()<
 
   // make o5 from o1 and printit out
   //用o1來定義並輸出它
   Oid o5(o1);
   cout << "o5= " <<o5.get_printable()<
   // compare two not equaloids
  //比較兩個oid的值是否相等,因為o1的最後一個為1,o2的最後一位為2,所以不相等
   if(o1==o2)   cout << "O1EQUALS O2"<
  else    cout<< "o1 not equal to o2"<
              
   // print out a piece ofo1
  //輸出o1的一片,strval的作用是get string value of avariable,結合到本例是取1-3
   cout << "strval(3) of O1= " << o1.get_printable(3)<
 
   // print out a piece ofo1
   //輸出從左邊數1至3
   cout << "strval(1,3) ofO1 = " << o1.get_printable(1,3)<
 
   // set o1's last subid
  o1[ o1.len()-1] = 49;
   cout << "O1 modified = "<< o1.get_printable()<
 
   // set o1's 3rd subid
   o1[2]=49;
   cout << "O1 modified = "<< o1.get_printable()<
  
   // get the last subid of02
   cout << "last of o2 = "<< o2[o2.len()-1]<
  
   // get the 3rd subid of02
   cout << "3rd of o2 = "<< o2[2]<
  
   // ncompare
  //ncompare的作用是從左至右比較oid的前n個子單元,因為本例中o1與o2有三個單元相同,所以輸出“==”
   if (o1.nCompare(3,o2))
     cout << "nCompare o1,o2,3 =="<
   else
    cout << "nCompare o1,o2,3 !="<
    
   // make an array of oids
   Oid oids[30]; int w;
   for (w=0;w<30;w++)                          
   {
    oids[w] = "300.301.302.303.304.305.306.307";
    oids[w] += (w+1);
  }  
 /*for (w=0;w<25;w++)
   {
    sprintf( msg,"Oids[%d] = %s",w, oids[w].get_printable());
    printf("%s",msg, strlen(msg));
   }*/ 
}
3、IpAddress和UdpAddress類
1)第一個來源程式代碼:
#include "snmp_pp.h"
#include
void main()
{
 GenAddressaddress1("10.4.8.5");   // make an IP GenAddress產生一個GenAddress IP地址
 cout<<
GenAddressaddress2("01020304-10111213141516");   // make an IPX GenAddress
cout<<
GenAddressaddress3("01:02:03:04:05:06");   // make a MAC GenAddress產生一個GenAddress MAC地址
 
cout << address3.get_printable()<
 
if (!address1.valid())   // check validity
    cout<< "address1 ! valid";
}
運行結果5所示

圖5
2)第二個程式原始碼
// address class examples
#include
#include "snmp_pp.h"
#include "address.h"
void main()
{
   //--------------[ IPAddressconstruction]------------------------------------------------------
   IpAddressip1("");    //makes an invalid IpAddress object,如果是寫成Ipaddressip1();那就是不能為ip1賦值,但是
   //如果寫成IpAddressip1("");,就可以為ip1賦值
   IpAddressip2("10.4.8.5");   // makes a IpAddress verifies dotted format
  //用點分十進位的形式定義了IpAddress ip2
   IpAddressip3(ip2);    //makes an IpAddress using another IpAddress
   //用ip2定義ip3
  IpAddressip4("trout.rose.hp.com");      // makes an IpAddress does DNS on string
    cout<< "ip2="<
 cout << "ip3="<
 cout << "ip4="<
   //--------------[ MAC Addressconstruction]-----------------------------------------------------
   MacAddressmac1("");    //makes an invalid MAC address同樣的道理,在括弧裡加入了""可以為mac1賦值了
   MacAddressmac2("08:09:12:34:52:12");   // makes and verifies a MAC address
   //定義了MacAddress mac2
   MacAddressmac3(mac2);   // makes a MAC fromanother MAC
   //用mac2定義了mac3
  cout<<"mac2="<
 cout<<"mac3="<
 //從輸出結果看mac2和mac3是一樣的
 //---------------[ Gen Address Construction]-----------------------------------------------------
 GenAddress addr1("10.4.8.5"); //定義了GenAddressaddr1
 GenAddress addr2("01020304:050607080900");//定義了GenAddress addr2
 cout<<"addr1="<
 cout<<"addr2="<
  //---------------[ assigning Addresses]------------------------------------------------------------
   ip1="15.29.33.10";
   cout<<"ip1="<
//   ipx1 ="00000001-080912345212";
   mac1 ="08:09:12:34:52:12";
   cout<<"mac1="<
}
輸出結果6所示

 

圖6

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.