SNMP++說明文件中文版_第1頁
SNMP++說明文件中文版_第2頁
SNMP++說明文件中文版_第3頁
SNMP++說明文件中文版_第4頁
SNMP++說明文件中文版_第5頁
已閱讀5頁,還剩45頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、這是篇描述snmp+ 的文檔。面向對象的snmp+ 是一套專注于網(wǎng)絡管理的開放技術,是 snmp 協(xié)議原理和c+(結合的產(chǎn)物) 。 該文檔描述了各種各樣可移植的c+類 (class) ,正是這些 c+類構建了snmp+ 。(同時包含的)還有這些類的相關的許多例子。(您可以)登錄http:/ ,下載 snmp+ 的源碼,和一些正在實際中使用的例子,以及其他相關文檔。1.介紹(目前)有許多可以創(chuàng)建網(wǎng)絡管理應用的snmp 的 api 。大多數(shù) api 都提供了一個很大的函數(shù)庫,(調用)這些函數(shù)的程序員需要熟悉snmp 內部的工作原理和它的資源管理(機制)。這些api 大多都是平臺相關的,導致了snm

2、p 的代碼成了操作系統(tǒng)相關的或者網(wǎng)絡系統(tǒng)平臺有關的,難以移植。(另一方面)由于c+有豐富的、可復用的標準類庫,用c+開發(fā)應用成了目前的主流,(然而)c+標準類庫所缺少的正是一套封裝好的處理網(wǎng)絡管理的類。(如果)基于面向對象的方法來進行snmp 網(wǎng)絡編程,可以提供諸多好處:易用、安全、可移植、能擴展。(因此) snmp+ 靈活有效的解決了其他類似api 執(zhí)行和管理起來都很痛苦的問題。1.1.什么是 snmp+snmp+ 是一套 c+類的集合,它為網(wǎng)絡管理應用的開發(fā)者提供了snmp 服務。 snmp+并非是現(xiàn)有的snmp 引擎的擴充或者封裝。(事實上)為了效率和方便移植,它只用到了現(xiàn)有的snmp

3、庫里面極少的一部分。snmp+ 也不是要取代其他已有的snmp api,比如 winsnmp 。snmp+ (只是)通過 提供強大靈活的功能,降低管理和執(zhí)行的復雜性,把面向對象的優(yōu)點帶到了網(wǎng)絡編程中。1.2.snmp+ 的本質1.2.1.簡單易用的snmp+面向對象的snmp 編程應該是簡單易用的。畢竟,snmp 原意就是 “ 簡單網(wǎng)絡管理協(xié)議” ,snmp+(只是) 將簡單還給snmp!應用的開發(fā)者不需要關心snmp 的底層實現(xiàn)機制,因為面向對象的方法已經(jīng)將snmp 內部機制封裝、并隱藏好了。snmp+ 的簡單易用表現(xiàn)在以下方面:.為 snmp 提供了簡單易用的接口使用 snm

4、p+ 不需要精通snmp,甚至不需要精通c+!因為 snmp+ 里面幾乎沒有c 的指針,所以可以簡單的通過api 直接使用。.可以方便的遷移至snmpv2snmp+ 的主要目標之一就是開發(fā)一套api,(使得)遷移至snmpv2(的過程中)盡可能少地影響現(xiàn)有代碼。snmptarget class(譯注:后面將要講到)使之成為了可能。.保留了對snmp 靈活的底層開發(fā)這是為了方便那些不希望使用面向對象方法,而直接編寫snmp 的底層機制的用戶。雖然 snmp+ 快速而方便,但是有些時候程序員也許希望直接使用底層的snmp api。.鼓勵程序員用功能強大的c

5、+,不要因學得不夠快而去指責它使用 snmp+ 的用戶不需要精通c+。基本的 snmp 的知識是必要的,但是實際上也需要對 c+初步的理解。1.2.2.編程安全的snmp+大多數(shù) snmp api 需要程序員去管理大量的資源。不恰當?shù)难b載或卸載這些資源,會導致內存崩潰或泄漏。snmp+ 提供的安全機制,(可以)實現(xiàn)對這些資源的自動管理。snmp+ 的用戶(可以)體驗到自動管理資源與對話所帶來的好處。snmp+ 在編程上的安全突出表現(xiàn)在下面的領域:.為 snmp 資源提供安全的管理為面向對象的方法已經(jīng)將snmp 內部機制封裝、并隱藏好了。snmp+ 的簡單易用表現(xiàn)在以下方面:1.2

6、.1.1.為 snmp 提供了簡單易用的接口使用 snmp+ 不需要精通snmp,甚至不需要精通c+!因為 snmp+ 里面幾乎沒有c 的指針,所以可以簡單的通過api 直接使用。.可以方便的遷移至snmpv2snmp+ 的主要目標之一就是開發(fā)一套api,(使得)遷移至snmpv2(的過程中)盡可能少地影響現(xiàn)有代碼。snmptarget class(譯注:后面將要講到)使之成為了可能。.保留了對snmp 靈活的底層開發(fā)這是為了方便那些不希望使用面向對象方法,而直接編寫snmp 的底層機制的用戶。雖然 snmp+ 快速而方便,但是有些時候程序員也許希望直接使用底層的s

7、nmp api。.鼓勵程序員用功能強大的c+,不要因學得不夠快而去指責它使用 snmp+ 的用戶不需要精通c+?;镜?snmp 的知識是必要的,但是實際上也需要對 c+初步的理解。1.2.2.編程安全的snmp+大多數(shù) snmp api 需要程序員去管理大量的資源。不恰當?shù)难b載或卸載這些資源,會導致內存崩潰或泄漏。snmp+ 提供的安全機制,(可以)實現(xiàn)對這些資源的自動管理。snmp+ 的用戶(可以)體驗到自動管理資源與對話所帶來的好處。snmp+ 在編程上的安全突出表現(xiàn)在下面的領域:.為 snmp 資源提供安全的管理為面向對象的方法已經(jīng)將snmp 內部機制封裝、

8、并隱藏好了。snmp+ 的簡單易用表現(xiàn)在以下方面:.為 snmp 提供了簡單易用的接口使用 snmp+ 不需要精通snmp,甚至不需要精通c+!因為 snmp+ 里面幾乎沒有c 的指針,所以可以簡單的通過api 直接使用。.可以方便的遷移至snmpv2snmp+ 的主要目標之一就是開發(fā)一套api,(使得)遷移至snmpv2(的過程中)盡可能少地影響現(xiàn)有代碼。snmptarget class(譯注:后面將要講到)使之成為了可能。.保留了對snmp 靈活的底層開發(fā)這是為了方便那些不希望使用面向對象方法,而直接編寫snmp 的底層機制的用戶。雖然 snmp+

9、 快速而方便,但是有些時候程序員也許希望直接使用底層的snmp api。.鼓勵程序員用功能強大的c+,不要因學得不夠快而去指責它使用 snmp+ 的用戶不需要精通c+。基本的 snmp 的知識是必要的,但是實際上也需要對 c+初步的理解。1.2.2.編程安全的snmp+大多數(shù) snmp api 需要程序員去管理大量的資源。不恰當?shù)难b載或卸載這些資源,會導致內存崩潰或泄漏。snmp+ 提供的安全機制,(可以)實現(xiàn)對這些資源的自動管理。snmp+ 的用戶(可以)體驗到自動管理資源與對話所帶來的好處。snmp+ 在編程上的安全突出表現(xiàn)在下面的領域:.為 snmp 資源提供

10、安全的管理/- construct a snmp+ snmp object -snmp snmp( status); / create a snmp+ sessionif ( status != snmp_class_success) / checkcreation statuscout snmp.error_msg( status);/ if fail, print error stringreturn;/- invoke a snmp+ get -pdu += vb;/add the variable binding to the pduif (status = snmp.get(pdu,

11、 ctarget) != snmp_class_success)cout snmp.error_msg( status);else pdu.get_vb( vb,0);/ extract the variable binding from pducout “ system descriptor = ” vb.get_printable_value(); / print out the value;/ thats all!真正屬于snmp+的語句就 10行代碼。 (首先) 用代理端的ip 地址建立一個ctarget對象;(然后)用mib對象所定位的系統(tǒng)描述符創(chuàng)建一個變量綁定(vb );(接著就把

12、)這個 vb 納入一個pdu對象;(最后生成) 一個 snmp對象來執(zhí)行snmp的 get操作。一旦找到了 ( 所需的數(shù)據(jù) ) ,( 對應的 ) 應答消息就被打印出來。(并且)所有的錯誤處理代碼也都包含了。3.snmp+特性3.1.完整的一套snmp c+類snmp+是以一套c+ 類作為基石的。這些類是:對象描述符(oid )類、變量綁定(vb)類、協(xié)議數(shù)據(jù)單元(pdu )類、 snmp類。并且,其他各種用抽象語法表示(asn.1 )來描述的管理信息結構(smi ),也被抽象成了簡單的、面向對象的類型。3.2.snmp內存的自動管理當 snmp+的對象被實例化或銷毀的時候, 其相關的類可以自動

13、管理著各種各樣的snmp結構和資源。 這就使得應用的開發(fā)者不用再擔心數(shù)據(jù)結構和資源的卸載,不然就得為防止內存的崩潰或者泄漏提供有效的保護措施。snmp+的對象的實例化可以是靜態(tài)的,也可以是動態(tài)的。靜態(tài)的實例化可以在對象脫離它的作用域時卸載掉;動態(tài)分配則需要使用c+的 new 和 delete 。在 snmp+內部,有許多被隱藏和保護在公用接口后面的smi 結構。所有的 smi 結構都是在內部管理的,程序員不需要定義或管理smi 的結構和它的值。因為在 snmp+內絕大部分地方是不存在c 的指針的。3.3.簡單易用的由于隱藏并管理了所有smi 結構和它們的值,snmp+的類使用起來即簡單又安全。

14、外部程序員無法破壞到隱藏和保護在作用域后面的東東。3.4.強大靈活的snmp+提供了強大靈活的功能,降低了管理和執(zhí)行的復雜性。每個snmp+對象都通過建立一個會話來和一個代理端聯(lián)系。即由一個snmp+的對話類的實例,就能處理所有與特定代理端的連接。另外自動重發(fā)和超時控制的機制,為每個snmp+對象都帶來了可靠性。一個應用可能會包含許多snmp+的對象的實例,每個實例都可能與相同或不同的代理端通話。 有了這個功能強大的特性,網(wǎng)絡管理程序就可以為每個管理單元建立起不同的會話。另一方面,就算單一的snmp 會話也可以解決問題。例如:一個應用可以通過一個snmp+對象來處理圖形統(tǒng)計,另一個snmp+對

15、象監(jiān)控 trap ,也許還有第三個snmp+ 對象用以瀏覽snmp 。 snmp+自動并行處理了同一時刻來自不同snmp+實例的請求。3.5.可移植對象的snmp+的主體是可以移植的c+ 代碼。其中只有snmp class 的實現(xiàn)與不同的目標操作系統(tǒng)有關。如果你的程序中包含了snmp+的代碼,那么導出這部分代碼的時候,就可以不做任何修改。3.6.自動超時和重發(fā)機制snmp+提供了自動超時和重發(fā)機制,程序員不用去實現(xiàn)超時或重發(fā)機制的代碼。重發(fā)機制是在 snmptarget class 里面定義的, 這就使得每一個目標(target )都具有了它自己的超時 /重發(fā)機制。3.7.阻塞模式snmp+提

16、供了阻塞方式。ms-windows上的阻塞方式可以并發(fā)的阻塞從每個snmp 類的實例發(fā)出的請求。3.8.異步的非阻塞模式snmp+還為應答提供了異步的非阻塞的方式。超時和重發(fā)機制同時支持阻塞和異步兩種模式。3.9.notification、trap的收發(fā)snmp+允許在多種傳輸層上(包括ip 和 ipx )收發(fā) trap 。而且 snmp+還允許使用非標準的ip 端口和 ipx 套接口來收發(fā)trap 。3.10.通過雙效的api支持 snmpv1和 snmpv2snmp+的設計可同時支持snmpv1和 snmpv2的使用。所有 api 的操作都被設計成了雙效的,也即操作是snmp 版本無關的。

17、通過使用snmptarget類,與 snmp 的版本相關的操作被抽象出來了。3.11.支持 snmp的 get, get next, get bulk, set, inform和 trap的操作snmp+完整的支持snmp 的 6 種操作。這 6 個 snmp+的成員函數(shù)使用相同的參數(shù)表,也都支持阻塞和非阻塞(異步)方式。3.12.通過繼承實現(xiàn)重定義snmp+是用 c+ 實現(xiàn)的,所以允許程序員重載或重定義那些不適合他們的操作。舉個例子:如果一個應用需要特定的oid 對象,那就需要建立一個oid class 的子類,用以繼承所有 oid 類的屬性和操作,同時在派生類種加入新的屬性和操作。4.在

18、microsoft windows 系列操作系統(tǒng)上使用snmp+snmp+已經(jīng)在 ms-windows 3.1, ms-windows for work groups 3.11, ms-windows nt 3.51, and ms- windows ?95 上實現(xiàn)了。4.1.winsnmp version 1.1的使用在 ms-windows上可以用winsnmp version 1.1 來運行 snmp+。這就使得其他用winsnmp代碼直接寫的snmp 應用可以與snmp+的應用兼容。 注意, 目前 hp 的 ms-windows設備使用winsnmp ,其他設備不需要使用winsnmp

19、來進行 ans.1的編碼和解碼。但那些沒有使用winsnmp的設備也需要與winsnmp的應用兼容,才能和snmp+ 的應用兼容。4.2.對 ip 和 ipx的支持可以通過一個winsock compliant stack ,來實現(xiàn)對ip 的操作。 同時為了在ipx 協(xié)議上運行,還需要兼容novell網(wǎng)絡的客戶程序和驅動。目前snmp+已經(jīng)通過了在廣泛多樣的協(xié)議棧下的運行測試,這些協(xié)議棧包括:ftp,netmanage,lanworkplace,ms-wfwg 3.11 ,以及 windows nt 。4.3.對 notification、trap收發(fā)的支持snmp+ 包含了對winsnmp

20、trap機制的支持。這同時包括了trap的發(fā)送和收取。在接收 trap的時候,還提供了過濾trap的功能。4.4.與 hp openview for windows 兼容已經(jīng)有大量使用snmp+創(chuàng)建的應用,實現(xiàn)了hp openview for windows的兼容。5.在 unix上使用 snmp+5.1.統(tǒng)一的類的接口用在 unix設備上的snmp+類的接口和ms-windows是一樣的。5.2.windows到 unix的仿真與移植通過編譯、連接對應的snmp+類, snmp+就可以實現(xiàn)在unix上運行。 snmp+/unix的設計決定了它可以同時運行在原始的unix字符模式、 x-win

21、dow模式,或者windows-to-unix的仿真工具上。5.3.與 hp openview for unix 兼容已經(jīng)有大量使用snmp+創(chuàng)建的應用,實現(xiàn)了與hp openview for unix的兼容。6.snmp syntax classessnmp+之 snmp syntax的對象模型(object modeling technique)視圖snmp+的 snmp syntax classe描繪了一個具有c+ 面向對象風格的視圖。即用于描述 snmp 的 smi 之 asn.1的數(shù)據(jù)類型視圖。 它包含了映射到對應的smi 類型的一組類的集合。而且為了方便使用,還引入了一些非smi

22、的類。 snmp+為這些 snmp 數(shù)據(jù)類型提供了強大、簡單易用的接口。下表概要地描述了各種snmp+ syntax classes :snmp+ syntax class nameclass descriptionsmi or asn.1 counter partsnmpsyntaxparent of all syntax classes.no asn.1 counter part, used for oo structure.oidobject identifier class.asn.1 object identifier.octectstroctet string class.asn.

23、1 octet string.uint32unsigned 32 bit integer class.smi unsigned 32 bit integer.timetickstimeticks class.smi time ticks.counter3232 bit counter class.smi 32 bit counter.gauge3232 bit gauge class.smi 32 bit gauge.int32signed 32 bit integer.smi 32 bit signed integer.counter6464 bit counter class.smi 64

24、 bit counter.addressabstract address class.no asn.1 counter part used for oo structure.ipaddressip address class.smi ip address.udpaddressudpaddress classsmi ip address with port specification.ipxaddressipx address class.no asn.1 or smi counter partipxsockaddressipx address class with socket number.

25、no asn.1 or smi counter partmacaddressmac address class.smi counter partgenaddressgeneric addressno asn.1 or smi counter part.7.object id classsnmp+之 oid class的對象模型(object modeling technique)視圖7.1.對象標識符類對象標識符類(oid )封裝了smi 的對象標識。信息管理庫(mib )中所定義的smi 的對象是一種在mib 中找到的數(shù)據(jù)元素的數(shù)據(jù)標識。與smi oid 相關的結構和函數(shù),自然都是面向對象的

26、。 事實上 oid class 與 c+ 的 string class 有許多共同之處。 如果你熟悉c+ 的 string class 或者 mfc 的 cstring class ,那么你就會感覺oid class 用起來很親切、簡單。 oid class 被設計成了快速有效的類;它可以定義和操作對象標識;不依賴現(xiàn)有的 snmp api ,完全是可移植的;可以在任何ansi c+ 編譯器上進行編譯。7.2.oid class的成員函數(shù)列表oid class member functions 說明constructorsoid:oid( void);構造一個空的的oidoid:oid( con

27、st char *dotted_string);用帶點的字符串構造新的oidoid:oid( const oid &oid);用已有的 oid 構造新的oidoid:oid( const unsigned long *data, int len);通過一個指針和長度來構造一個新的oiddestructoroid:oid( );銷毀一個 oid ,釋放所有的堆overloaded operators oid & operator = ( const char *dotted_string);將一個帶點的字符串付給一個oidoid & operator = ( const

28、oid &oid);將一個 oid 付給另一個oidint operator = ( const oid &lhs, const oid& 判斷兩個 oid 是否相等rhs);int operator = ( const oid& lhs, const char*dotted_string);判斷一個 oid 是否和一個帶點的字符串相等int operator != ( const oid &lhs, const oid& rhs);判斷兩個 oid 是否不等int operator != ( const oid & lhs, const

29、 char *dotted_string);判斷一個 oid 是否和一個帶點的字符串不相等int operator ( const oid &lhs, const oid& rhs);判斷一個 oid 是否比另一個小int operator ( const oid &lhs, const char *dotted_string);判斷一個 oid 是否比一個帶點的字符串小int operator =( const oid &lhs,const oid &rhs);判斷一個 oid 是否 “ 小于等于 ” 另一個int operator ( const o

30、id &lhs, const oid &rhs);判斷一個 oid 是否比另一個大int operator ( const oid &lhs, const char * dotted_string);判斷一個 oid 是否比一個帶點的字符串大int operator = ( const oid&lhs, const oid &rhs);判斷一個 oid 是否 “ 大于等于 ” 另一個int operator = ( const oid &lhs, const char* dotted_string);判斷一個 oid 是否 “ 大于等于 ” 一個

31、帶點的字符串oid& operator += ( const char *dotted_string);將一個帶點的字符串加到一個oid 后面oid& operator +=( const unsigned long i);將一個整數(shù)加到一個帶點的oid 字符串后面oid& operator+=( const oid& oid);將一個 oid 加到另一個 oid 后面unsigned long &operator ( int position);訪問 oid 的一個獨立子單元output member functions char * get_prin

32、table( const unsigned int n);返回一個 oid 的 n 個帶點格式的子單元char *get_printable( const unsigned long s, const unsigned long n);返回從 s 開始,以點號分割的n 個子單元char *get_printable();返回以點號分割的oid 字符串operator char *();同上miscellaneous member functions set_data (const unsigned long *data,const unsigned long n);用指針和長度來設置一個oid

33、unsigned long len( );返回 oid 中子單元的個數(shù)(長度)trim( const unsigned long n=1);刪除 oid 最右邊的 n 個子單元,默認刪除1個ncompare( const unsigned long n, const oid& oid);從左至右比較oid 的前 n 個子單元rncompare( const unsigned long n, const oid& oid);從右至左比較oid 的后 n 個子單元int valid( );返回 oid 的有效性7.3.一些 oid class的例子下面的例子展示了oid class

34、 的不同用法。 oid class 不需要依賴其他庫和模塊。下列代碼在 ansi/iso c+ 上編譯通過#include “ oid.h”void oid_example()/ construct an oid with a dotted string and print it outoid o1(..9.1);cout “ o1= “ o1.get_printable ();/ construct an oid with another oid and print it outoid o2(o1);cout “ o2=” o2.get_printable();/

35、 trim o2?s last value and print it outo2.trim(1);cout “ o2=” o2.get_printable();/ add a 2 value to the end of o2 and print it out o2+=2;cout “ o2=” o2.get_printable();/ create a new oid, o3oid o3;/ assign o3 a value and print it outo3=..9.3;cout “ o3= ” o3.get_printable();/ create o4oi

36、d o4;/ assign o4 o1?s valueo4=o1;/ trim off o4 by 1 o4.trim(1);/ concat a 4 onto o4 and print it outo4+= ” .4 ”;cout “ o4= ” o4.get_printable();/ make o5 from o1 and print it outoid o5(o1);cout “ o5= ” o5.get_printable();/ compare two not equal oidsif (o1=o2)cout o1 equals o2;else cout o1 not equal

37、to o2; / print out a piece of o1cout strval(3) of o1 = “ o1.get_printable(3);/ print out a piece of o1cout strval(1,3) of o1 = “ o1.get_printable(1,3);/ set o1s last subid o1 o1.len()-1 = 49;cout o1 modified = “ o1.get_printable();/ set o1s 3rdsubido12=49;cout o1 modified = “ o1.get_printable();/ ge

38、t the last subid of 02cout last of o2 = “ o2o2.len()-1;/ get the 3rdsubid of 02cout 3rd of o2 = “ o22;/ ncompareif (o1.ncompare(3,o2)cout ncompare o1,o2,3 =;elsecout ncompare o1,o2,3 !=; / make an array of oidsoid oids30;int w;for ( w=0;w30;w+) oidsw = 300.301.302.303.304.305.306.307; oidsw += (w+1)

39、; for (w=0;w25;w+)sprintf( msg,oids%d = %s,w,oidsw.get_printable();printf(“ %s” ,msg, strlen(msg); 8.octetstr classsnmp+之 octetstr class的對象模型(object modeling technique)視圖8.1.八位字節(jié)類通過 snmp+的 octet class ,可以簡單且安全地操作smi 的 8 位字節(jié)。有了octet class ,就不需要通過內部指針和長度來操作8 位字節(jié)了。使用snmp+的 octet class 來實例化、操作、銷毀一個8 位字節(jié)

40、對象是很簡單的,不用擔心如何管理內存以及內存是否會泄漏。與ansi c+ 的 string class 類似, octetstr class 可以通過多種方法構造8位字節(jié),還可以對它們進行賦值操作,與其他snmp+ classes一起使用。8.2.octetstr class的成員函數(shù)列表octetstr class member functions 說明constructors octetstr:octetstr( void);構造一個空的octetstroctetstr:octetstr( const char* string);用一個沒有結束符的字符串構造octetstroctetstr

41、:octetstr( const unsigned char *s, unsigned long int i);通過一個指針和長度來構造octetstroctetstr:octetstr( const octetstr &octet);用已有的 octetstr構造新的 octetstrdestructoroctetstr:octetstr( );銷毀一個 octetstroverloaded operatorsoctetstr& operator = ( const char *string); 將一個沒有結束符的字符串付給一個octetstroctetstr& op

42、erator = ( const octetstr& octet);將一個 octetstr付給另一個octetstrint operator = ( const octetstr &lhs, const octetstr &rhs);判斷兩個 octetstr對象是否相等int operator = ( const octetstr & lhs, const char *string); 判斷 octetstr是否和一個 char*字符串相等int operator != ( const octetstr& lhs, const octetstr&am

43、p; rhs);判斷兩個 octetstr對象是否不相等int operator != ( const octetstr& lhs, const char *string);判斷 octetstr是否和一個 char*字符串不相等int operator ( const octetstr&lhs, const octetstr& rhs);判斷一個 octetstr是否比另一個小int operator ( const octetstr &lhs, const char * string);判斷一個 octetstr是否比另一個char *字符串小int ope

44、rator = ( const octetstr &lhs, const 判斷一個 octetstr是否 “ 小于等于 ” 另一個octetstr &rhs);int operator ( const octetstr& lhs, const octetstr &rhs);判斷一個 octetstr是否比另一個大int operator ( const octetstr& lhs, const char * string);test if one octetstr is greater than a char *.判斷一個 octetstr是否比一個ch

45、ar *的字符串大int operator = ( const octetstr& lhs, const octetstr &rhs);判斷一個 octetstr是否 “ 大于等于 ” 另一個int operator = ( const octetstr& lhs, const char *);判斷一個 octetstr是否 “ 大于等于 ” 一個char*的字符串octetstr& operator +=( const char * string);在一個 octetstr后面連接一個字符串octetstr& operator +=( const un

46、signed char c);在一個 octetstr后面連接一個單字符octetstr& operator+=( const octetstr &octetstr);將兩個 octetstr連接在一起unsigned char& operator ( int position i);用數(shù)組的形式來訪問一個octetstrmiscellaneous void set_data( const unsigned char *s, unsigned long l);用指針和長度來設置一個octetstrint ncompare( const unsigned long n,

47、const octetstr &o);與另一個 octetstr比較前 n 個元素unsigned long len();返回一個 octetstr的長度int valid();返回一個 octetstr的有效性unsigned char * data();返回一個指向內部數(shù)據(jù)的指針char * get_printable();格式化輸出,如果不是ascii則按 16 進制處理char * get_printable_hex();按 16 進制格式,進行格式化輸出8.3.注意當輸出一個octetstr對象時, 如果該 8 位字節(jié)所包含的字符不是ascii碼,對成員函數(shù)char * 或者

48、 get_printable()的調用,就會自動轉換成對成員函數(shù)get_printable_hex()的調用。這就使得使用者只需要簡單地使用成員函數(shù)char * 或 get_printable()來進行輸出。而成員函數(shù)get_printable_hex()是專門用來把octetstr按 16 進制格式輸出的。8.4.一些 octetstr class的例子/ octet class examples#include“ octet.h”void octet_example()octetstr octet1;/ create an invalid un- initialized octet obj

49、ectoctetstr octet2( “ red hook extra bitter ale” );/ create an octet with a stringoctetstr octet3( octet2);/ create an octet with another octetunsigned char raw_data50; / create some raw data octetstr octet4( raw_data, 50);/ create an octetstr using unsigned char dataoctet1 = “ sierra nevada pale al

50、e”; / assign one octet to anothercout octet1.get_printable();/ show octet1 as a null terminated stringcout octet4.get_printable_hex();/ show octet4 as a hex stringcout (char *) octet1;/ same as get_printable()if ( octet1 = octet2) / compare two octetscout = octet3)cout “ octet2 greater than or equal

51、 to octet2”;octet24 = ,b?;/ modify an element of an octetstr using ?s9.timeticks classsnmp+之 timeticks class的對象模型(object modeling technique)視圖9.1.時間戳類snmp+的 timeticks class 為使用 smi 中的 timeticks帶來了方便。 smi 的時間戳被定義成了一種存放無符號長整形的存儲單元。為了成為無符號長整形,smi timeticks被加工成了一種特殊的類型。因此snmp+的 timeticks類具有無符號長整形的所有功能和屬

52、性,但同時又是一個獨立的類。對無符號長整形的任何操作,拿到timeticks的對象上一樣有效。 timeticks class 與其他 snmp+的類,比如vb class 交互的時候,還可以有些額外的操作:在使用vb class 的時候, timeticks的對象可以被置入vb 對象(用vb:set),也從 vb 對象中取出(用vb:get)。也即,對于smi timeticks,開發(fā)者可以像對無符號長整形一樣來操作,并且還提供了一對一的映射關系。9.2.timeticks class的成員函數(shù)列表timeticks class member functions說明constructorst

53、imeticks:timeticks( void);構造一個空的timeticks對象cout octet.len();/ print out the length of an octetstrunsigned char raw_data100; octet1.set_data( raw_data, 100);/ set the data of an to unsigned char data/ get the validity of an octetstrcout (octet1.valid()? “ octet1 is valid” : “ octet1 is invalid”; / en

54、d octet exampletimeticks:timeticks( const unsigned long i );用一個無符號長整形來構造一個timeticks對象timeticks:;timeticks( const timeticks &t);用一個已有的timeticks對象來構造一個新的destructor timeticks:timeticks( );銷毀一個 timeticks對象overloaded operators timeticks& operator =( const timeticks &t);重載賦值操作符char * get_print

55、able();格式化輸出,格式為:dd days, hh:mm:ss.hhoperator unsigned long();把 timeticks轉換為無符號長整形9.3.注意timeticks對象用 timeticks:get_printable()輸出時,其值自動被格式化為“ dd days,hh:mm:ss.hh”。其中 dd 代表天, hh 代表小時( 24 時制的), mm 代表分鐘, ss 是秒鐘, hh 則是百分之幾秒。9.4.一些 timeticks class的例子/ timeticks examples#include “ timetick.h”void timeticks

56、_example()timeticks tt;/ create an un-initialized timeticks instancetimeticks tt1( (unsigned long) 57);/ create a timeticks using a numbertimeticks tt2( tt1);/ create a timeticks using another instancett = 192;/ overloaded assignment to a numbertt2 = tt;/ overloaded assignment to another timeticksco

57、ut tt.get_printable(); / print out in dd days, hh:mm:ss.hh cout ( unsigned long)tt; / print out unsigned long int value; / end timeticks example10.counter32 classsnmp+之 counter32 class的對象模型(object modeling technique)視圖10.1.32 位計數(shù)器類當需要用到smi 中的 32 位計數(shù)器時,snmp+的 counter32 class為之帶來了方便。smi 的計數(shù)器被定義成了一種存放無

58、符號長整形的存儲單元。為了成為無符號長整形,smi counters被加工成了一種特殊的類型。因此 snmp+的 counter32類具有無符號長整形的所有功能和屬性,但同時又是一個獨立的類。對無符號長整形的任何操作,拿到counter32的對象上一樣有效。counter32 class 與其他 snmp+的類, 比如 vb class 交互的時候,還可以有些額外的操作:在使用vb class 的時候, counter32的對象可以被置入 vb 對象(用 vb:set),也從 vb 對象中取出(用vb:get)。也即,對于smi counter ,開發(fā)者可以像對無符號長整形一樣來操作,并且還提

59、供了一對一的映射關系。10.2.counter32 class的成員函數(shù)列表counter32 class member functions 說明constructorscounter32:counter32( void);構造一個空的counter32對象counter32:counter32( const unsigned long i );用一個無符號長整形來構造一個counter32對象counter32:counter32( const counter32 &c);用一個已有的counter32對象來構造一個新的destructorcounter32:counter32( )

60、;銷毀一個 timeticks對象overloaded operatorscounter32& operator = ( const counter32& c);重載賦值操作符char * get_printable();格式化輸出counter32對象operator unsigned long( );把 counter32轉換為無符號長整形10.3.一些 counter32 class的例子/ counter examples#include “ counter.h”void counter_example()counter32 ctr;/ create an un-initialized counter instancecounter32 ctr1( (unsigned long) 57);/ create a counter using a number counter32 ctr2(ctr1);/ create a counter using another instance ctr = 192 ; / overloaded assignment to a numberctr1 = ctr;/ overloaded assig

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論