獨(dú)家原創(chuàng):網(wǎng)絡(luò)監(jiān)控系統(tǒng)研究論文

時(shí)間:2022-06-28 08:45:00

導(dǎo)語(yǔ):獨(dú)家原創(chuàng):網(wǎng)絡(luò)監(jiān)控系統(tǒng)研究論文一文來(lái)源于網(wǎng)友上傳,不代表本站觀點(diǎn),若需要原創(chuàng)文章可咨詢客服老師,歡迎參考。

獨(dú)家原創(chuàng):網(wǎng)絡(luò)監(jiān)控系統(tǒng)研究論文

[摘要]隨著信息時(shí)代的到來(lái),特別是互聯(lián)網(wǎng)的迅速普及,人們開始越來(lái)越多地接觸到一個(gè)新概念--嵌入式產(chǎn)品。將嵌入式系統(tǒng)接入Internet。不僅實(shí)現(xiàn)了設(shè)備的遠(yuǎn)程控制、維護(hù)和升級(jí),而且可實(shí)現(xiàn)資源共享。通過(guò)網(wǎng)絡(luò)對(duì)設(shè)備進(jìn)行監(jiān)控,一個(gè)外部界面是必不可少的,利用Web瀏覽器可使用戶通過(guò)網(wǎng)絡(luò)對(duì)遠(yuǎn)程系統(tǒng)實(shí)現(xiàn)管理和更新,大大簡(jiǎn)化了人機(jī)界面的設(shè)計(jì)。若在系統(tǒng)中嵌入實(shí)時(shí)操作系統(tǒng),將使系統(tǒng)具有極強(qiáng)的可移植性,另外,硬件設(shè)備的添加與裁剪也具有極龐大的靈活性。采用DHCP協(xié)議動(dòng)態(tài)獲得IP相關(guān)信息,使TCP/IP軟件不再依賴于存儲(chǔ)在芯片中的固定IP地址,這將為大型系統(tǒng)的安裝提供方便條件,熟悉C++或者JAVA。

[關(guān)鍵詞]網(wǎng)絡(luò)監(jiān)控系統(tǒng);Web服務(wù)數(shù)據(jù)庫(kù);計(jì)算系統(tǒng)

“作為一名C++程序員,我們?cè)缫颜莆樟嗣嫦驅(qū)ο蟪绦蛟O(shè)計(jì)的基本概念,而且Java的語(yǔ)法無(wú)疑是非常熟悉的。事實(shí)上,Java本來(lái)就是從C++衍生出來(lái)的?!?/p>

一、C++和Java之間仍存在一些顯著的差異

可以這樣說(shuō),這些差異代表著技術(shù)的極大進(jìn)步。一旦我們弄清楚了這些差異,就會(huì)理解為什么說(shuō)Java是一種優(yōu)秀的程序設(shè)計(jì)語(yǔ)言。本附錄將引導(dǎo)大家認(rèn)識(shí)用于區(qū)分Java和C++的一些重要特征。

(1)最大的障礙在于速度:解釋過(guò)的Java要比C的執(zhí)行速度慢上約20倍。無(wú)論什么都不能阻止Java語(yǔ)言進(jìn)行編譯。

(2)和C++一樣,Java也提供了兩種類型的注釋。

(3)所有東西都必須置入一個(gè)類。不存在全局函數(shù)或者全局?jǐn)?shù)據(jù)。

(4)所有方法都是在類的主體定義的。所以用C++的眼光看,似乎所有函數(shù)都已嵌入,但實(shí)情并非如何.

(5)在Java中,類定義采取幾乎和C++一樣的形式。

(6)Java中沒(méi)有作用域范圍運(yùn)算符“::”。

(7)與C++類似,Java含有一系列“主類型”(Primitivetype),以實(shí)現(xiàn)更有效率的訪問(wèn)。

(8)char(字符)類型使用國(guó)際通用的16位Unicode字符集,所以能自動(dòng)表達(dá)大多數(shù)國(guó)家的字符。

(9)靜態(tài)引用的字串會(huì)自動(dòng)轉(zhuǎn)換成String對(duì)象。和C及C++不同,沒(méi)有獨(dú)立的靜態(tài)字符數(shù)組字串可供使用。

(10)Java增添了三個(gè)右移位運(yùn)算符“>>>”,具有與“邏輯”右移位運(yùn)算符類似的功用,可在最末尾插入零值。“>>”

(11)盡管表面上類似,但與C++相比,Java數(shù)組采用的是一個(gè)頗為不同的結(jié)構(gòu),并具有獨(dú)特的行為。

(12)對(duì)于所有不屬于主類型的對(duì)象,都只能通過(guò)new命令創(chuàng)建。

(13)Java中不必進(jìn)行提前聲明。若想在定義前使用一個(gè)類或方法,只需直接使用它即可——編譯器會(huì)保證使用恰當(dāng)?shù)亩x。

(14)Java沒(méi)有預(yù)處理機(jī)。若想使用另一個(gè)庫(kù)里的類,只需使用import命令,并指定庫(kù)名即可。。

(15)Java用包代替了命名空間。由于將所有東西都置入一個(gè)類,而且由于采用了一種名為“封裝”的機(jī)制,它能針對(duì)類名進(jìn)行類似于命名空間分解的操作,所以命名的問(wèn)題不再進(jìn)入我們的考慮之列。

(16)被定義成類成員的對(duì)象句柄會(huì)自動(dòng)初始化成null。對(duì)基本類數(shù)據(jù)成員的初始化在Java里得到了可靠的保障。

(17)在Java里,沒(méi)有象C和C++那樣的指針。用new創(chuàng)建一個(gè)對(duì)象的時(shí)候,會(huì)獲得一個(gè)引用(本書一直將其稱作“句柄”)。

(18)Java提供了與C++類似的“構(gòu)建器”(Constructor)。而如果定義了一個(gè)非默認(rèn)的構(gòu)建器,就不會(huì)為我們自動(dòng)定義默認(rèn)構(gòu)建器。

(19)Java中沒(méi)有“破壞器”(Destructor)。變量不存在“作用域”的問(wèn)題。一個(gè)對(duì)象的“存在時(shí)間”是由對(duì)象的存在時(shí)間決定的,并非由垃圾收集器決定。

(20)Java具有方法“過(guò)載”機(jī)制,它的工作原理與C++函數(shù)的過(guò)載幾乎是完全相同的。

(21)Java不支持默認(rèn)自變量。

(22)Java中沒(méi)有g(shù)oto。它采取的無(wú)條件跳轉(zhuǎn)機(jī)制是“break標(biāo)簽”或者“continue標(biāo)準(zhǔn)”,用于跳出當(dāng)前的多重嵌套循環(huán)。

(23)Java采用了一種單根式的分級(jí)結(jié)構(gòu),因此所有對(duì)象都是從根類Object統(tǒng)一繼承的。

(24)Java沒(méi)有模板或者參數(shù)化類型的其他形式。

(25)“垃圾收集”意味著在Java中出現(xiàn)內(nèi)存漏洞的情況會(huì)少得多,但也并非完全不可能(若調(diào)用一個(gè)用于分配存儲(chǔ)空間的固有方法,垃圾收集器就不能對(duì)其進(jìn)行跟蹤監(jiān)視)。

(26)Java內(nèi)建了對(duì)多線程的支持。利用一個(gè)特殊的Thread類,我們可通過(guò)繼承創(chuàng)建一個(gè)新線程(放棄了run()方法)。

(27)我們不是象C++那樣控制聲明代碼塊,而是將訪問(wèn)限定符(public,private和protected)置入每個(gè)類成員的定義里。

(28)嵌套的類。在C++中,對(duì)類進(jìn)行嵌套有助于隱藏名稱,并便于代碼的組織(但C++的“命名空間”已使名稱的隱藏顯得多余)。Java的“封裝”或“打包”概念等價(jià)于C++的命名空間,所以不再是一個(gè)問(wèn)題。

(29)由于存在前面介紹的那種內(nèi)部類,所以Java里沒(méi)有指向成員的指針。

(30)Java不存在“嵌入”(inline)方法。Java編譯器也許會(huì)自行決定嵌入一個(gè)方法,但我們對(duì)此沒(méi)有更多的控制權(quán)力。

(31)Java中的繼承具有與C++相同的效果,但采用的語(yǔ)法不同。

(32)Java中的繼承不會(huì)改變基礎(chǔ)類成員的保護(hù)級(jí)別。我們不能在Java中指定public,private或者protected繼承,這一點(diǎn)與C++是相同的。

(33)Java提供了一個(gè)interface關(guān)鍵字,它的作用是創(chuàng)建抽象基礎(chǔ)類的一個(gè)等價(jià)物。在其中填充抽象方法,且沒(méi)有數(shù)據(jù)成員。

(34)Java中沒(méi)有virtual關(guān)鍵字,因?yàn)樗蟹莝tatic方法都肯定會(huì)用到動(dòng)態(tài)綁定。

(35)Java不提供多重繼承機(jī)制(MI),至少不象C++那樣做。

(36)運(yùn)行期的類型標(biāo)識(shí)功能與C++極為相似。

(37)Java采取了不同的異??刂茩C(jī)制,因?yàn)榇藭r(shí)已經(jīng)不存在構(gòu)建器。

(38)Java的異常規(guī)范比C++的出色得多。

(39)Java具有方法過(guò)載的能力,但不允許運(yùn)算符過(guò)載。

(40)通過(guò)事先的約定,C++中經(jīng)常出現(xiàn)的const問(wèn)題在Java里已得到了控制。

(41)由于安全方面的原因,“應(yīng)用程序”的編程與“程序片”的編程之間存在著顯著的差異。

(42)由于Java在某些場(chǎng)合可能顯得限制太多,所以有時(shí)不愿用它執(zhí)行象直接訪問(wèn)硬件這樣的重要任務(wù)。

(43)Java提供對(duì)注釋文檔的內(nèi)建支持,所以源碼文件也可以包含它們自己的文檔。

(44)Java包含了一些標(biāo)準(zhǔn)庫(kù),用于完成特定的任務(wù)。C++則依靠一些非標(biāo)準(zhǔn)的、由其他廠商提供的庫(kù)。

(45)Java1.1包含了JavaBeans標(biāo)準(zhǔn),后者可創(chuàng)建在可視編程環(huán)境中使用的組件.

(46)若訪問(wèn)Java句柄失敗,就會(huì)丟棄一次異常。

二、熟悉TCP/IP和Socket編程

Socket接口是TCP/IP網(wǎng)絡(luò)的API,Socket接口定義了許多函數(shù)或例程,程序員可以用它們來(lái)開發(fā)TCP/IP網(wǎng)絡(luò)上的應(yīng)用程序。要學(xué)Internet上的TCP/IP網(wǎng)絡(luò)編程,必須理解Socket接口。

Socket接口設(shè)計(jì)者最先是將接口放在Unix操作系統(tǒng)里面的。如果了解Unix系統(tǒng)的輸入和輸出的話,就很容易了解Socket了。網(wǎng)絡(luò)的Socket數(shù)據(jù)傳輸是一種特殊的I/O,Socket也是一種文件描述符。Socket也具有一個(gè)類似于打開文件的函數(shù)調(diào)用Socket(),該函數(shù)返回一個(gè)整型的Socket描述符,隨后的連接建立、數(shù)據(jù)傳輸?shù)炔僮鞫际峭ㄟ^(guò)該Socket實(shí)現(xiàn)的。常用的Socket類型有兩種:流式Socket(SOCK_STREAM)和數(shù)據(jù)報(bào)式Socket(SOCK_DGRAM)。流式是一種面向連接的Socket,針對(duì)于面向連接的TCP服務(wù)應(yīng)用;數(shù)據(jù)報(bào)式Socket是一種無(wú)連接的Socket,對(duì)應(yīng)于無(wú)連接的UDP服務(wù)應(yīng)用。

三、Socket建立

為了建立Socket,程序可以調(diào)用Socket函數(shù),該函數(shù)返回一個(gè)類似于文件描述符的句柄。socket函數(shù)原型為:intsocket(intdomain,inttype,intprotocol);

domain指明所使用的協(xié)議族,通常為PF_INET,表示互聯(lián)網(wǎng)協(xié)議族(TCP/IP協(xié)議族);type參數(shù)指定socket的類型:SOCK_STREAM或SOCK_DGRAM,Socket接口還定義了原始Socket(SOCK_RAW),允許程序使用低層協(xié)議;protocol通常賦值"0"。Socket()調(diào)用返回一個(gè)整型socket描述符,你可以在后面的調(diào)用使用它。

Socket描述符是一個(gè)指向內(nèi)部數(shù)據(jù)結(jié)構(gòu)的指針,它指向描述符表入口。調(diào)用Socket函數(shù)時(shí),socket執(zhí)行體將建立一個(gè)Socket,實(shí)際上"建立一個(gè)Socket"意味著為一個(gè)Socket數(shù)據(jù)結(jié)構(gòu)分配存儲(chǔ)空間。Socket執(zhí)行體為你管理描述符表。

兩個(gè)網(wǎng)絡(luò)程序之間的一個(gè)網(wǎng)絡(luò)連接包括五種信息:通信協(xié)議、本地協(xié)議地址、本地主機(jī)端口、遠(yuǎn)端主機(jī)地址和遠(yuǎn)端協(xié)議端口。Socket數(shù)據(jù)結(jié)構(gòu)中包含這五種信息。

Socket配置

通過(guò)socket調(diào)用返回一個(gè)socket描述符后,在使用socket進(jìn)行網(wǎng)絡(luò)傳輸以前,必須配置該socket。面向連接的socket客戶端通過(guò)調(diào)用Connect函數(shù)在socket數(shù)據(jù)結(jié)構(gòu)中保存本地和遠(yuǎn)端信息。無(wú)連接socket的客戶端和服務(wù)端以及面向連接socket的服務(wù)端通過(guò)調(diào)用bind函數(shù)來(lái)配置本地信息。

Bind函數(shù)將socket與本機(jī)上的一個(gè)端口相關(guān)聯(lián),隨后你就可以在該端口監(jiān)聽(tīng)服務(wù)請(qǐng)求。Bind函數(shù)原型為:

intbind(intsockfd,structsockaddr*my_addr,intaddrlen);

Sockfd是調(diào)用socket函數(shù)返回的socket描述符,my_addr是一個(gè)指向包含有本機(jī)IP地址及端口號(hào)等信息的sockaddr類型的指針;addrlen常被設(shè)置為sizeof(structsockaddr)。

熟悉Web服務(wù)編程思想和Web服務(wù)協(xié)議棧

[小結(jié)]Web是一個(gè)平臺(tái);要讓它成長(zhǎng)。當(dāng)然,我們還有很多其他的平臺(tái)(Windows、Linux、Mac),但是那些已經(jīng)不是重點(diǎn)了。換句話說(shuō),Web是無(wú)法脫離的平臺(tái),不會(huì)中斷的平臺(tái),你可以通過(guò)各種方式去擴(kuò)展的平臺(tái)。你在Web上提供的數(shù)據(jù)與服務(wù)將會(huì)成為Web一部分,最終你會(huì)在Web平臺(tái)的某一處扮演你的角色。扮演好你的角色并照顧好后來(lái)者。Web服務(wù)是獨(dú)立的模塊化應(yīng)用程序,能通過(guò)網(wǎng)絡(luò)描述、、定位和調(diào)用。

Web服務(wù)反映了一種新的面向服務(wù)的編程思想。這種思想基于發(fā)現(xiàn)并執(zhí)行網(wǎng)絡(luò)上可得到的服務(wù),或調(diào)用可利用的應(yīng)用程序完成一些任務(wù)來(lái)創(chuàng)建應(yīng)用程序的想法。Web服務(wù)的實(shí)現(xiàn)獨(dú)立于特定的編程語(yǔ)言或操作系統(tǒng),替代的是,Web服務(wù)的執(zhí)行依賴于已存在的傳輸技術(shù)(例如HTTP)和標(biāo)準(zhǔn)數(shù)據(jù)編碼技術(shù)(例如XML)。因?yàn)闃?gòu)建于這些標(biāo)準(zhǔn)之上,開發(fā)者們得以有機(jī)會(huì)基于功能來(lái)訪問(wèn)于網(wǎng)絡(luò)中的應(yīng)用程序,而不是基于程序如何運(yùn)行,或程序如何編寫。

[參考文獻(xiàn)]

[1]BREWandJ2METM—ACompleteWirelessSolutionforOperatorsCommittedtoJava—Qualcomm/brew/images/about/pdf/brew_j2me.pdf

[2]DesignPatterns:ElementsofReusableObject-OrientedSoftware—ErichGamma,RichardHelm,RalphJohnson,andJohnVlissides,Addison-Wesley,1994

[3]StringinBREWRevisited—aBrewStringGeneralization—/ws/brew/article.php/2229051

[4]EmulatingC++ExceptionHandling—GregoryColvin,C/C++UsersJournal,December1994

[5]ForBrewDevelopers,ThereAreNewKidsinTown:IThread&IRscPool,Part2—/ws/brew/article.php/3105131