多協(xié)議模擬器設(shè)計(jì)論文

時(shí)間:2022-12-16 10:23:00

導(dǎo)語(yǔ):多協(xié)議模擬器設(shè)計(jì)論文一文來(lái)源于網(wǎng)友上傳,不代表本站觀點(diǎn),若需要原創(chuàng)文章可咨詢客服老師,歡迎參考。

多協(xié)議模擬器設(shè)計(jì)論文

摘要:目前,很多網(wǎng)絡(luò)工具在遇到新的網(wǎng)絡(luò)協(xié)議出現(xiàn)的時(shí)候,很難將新的協(xié)議快速集成到現(xiàn)有的網(wǎng)絡(luò)工具中,從而給用戶造成很多使用上的不方便。本文設(shè)計(jì)的一種網(wǎng)絡(luò)協(xié)議模擬器PRT-GET可以很好的解決上述問(wèn)題,PRT-GET按照自定義的協(xié)議工作說(shuō)明書(shū)工作,它可以方便的把新協(xié)議加入到PRT-GET中,從而方便用戶使用新的網(wǎng)絡(luò)協(xié)議來(lái)完成通信工作。

關(guān)鍵詞:網(wǎng)絡(luò)協(xié)議動(dòng)態(tài)鏈接庫(kù)協(xié)議工作說(shuō)明書(shū)

一、引言

PRT-GET定義為一個(gè)協(xié)議模擬器,所謂協(xié)議模擬器就是通過(guò)某種途徑模擬各式各樣的網(wǎng)絡(luò)通信協(xié)議從而可以進(jìn)行具體而實(shí)際的網(wǎng)絡(luò)通信,最終達(dá)到同時(shí)支持多種通信協(xié)議的目的。PRT-GET不同于現(xiàn)今網(wǎng)上存在的各種網(wǎng)絡(luò)工具,使用它可以編寫(xiě)基本上所有的基于Socket應(yīng)用層的通信協(xié)議,PRT-GET的設(shè)計(jì)解決了用戶使用網(wǎng)絡(luò)工具時(shí)難以支持新出現(xiàn)的協(xié)議的問(wèn)題。

二、PRT-GET的特點(diǎn)

作為一個(gè)優(yōu)秀的協(xié)議模擬器,PRT-GET具備以下的幾個(gè)特點(diǎn):

1.PRT-GET是一個(gè)動(dòng)態(tài)鏈接庫(kù)。考慮到應(yīng)用程序的擴(kuò)展極其的不方便,所以沒(méi)有把PRT-GET設(shè)計(jì)成應(yīng)用程序的形式,而采用動(dòng)態(tài)鏈接庫(kù)的方式,該方式可以方便地進(jìn)行二次開(kāi)發(fā),也方便擴(kuò)展軟件的功能。

2.PRT-GET是完全面向?qū)ο蟮摹RT-GET是一個(gè)可二次開(kāi)發(fā)的動(dòng)態(tài)鏈接庫(kù),所以面向?qū)ο蟮脑O(shè)計(jì)模式能令二次開(kāi)發(fā)更加高效。

3.PRT-GET的代碼擴(kuò)展性高。使用PRT-GET時(shí),如果PRT-GET本身提供的功能不夠,那么用戶可以通過(guò)擴(kuò)展PRT-GET中對(duì)應(yīng)的類,以實(shí)現(xiàn)自定義的功能。

4.PRT-GET支持自定義協(xié)議。PRT-GET的最大特色就是支持用戶自定義應(yīng)用層協(xié)議,通過(guò)用戶編寫(xiě)的協(xié)議工作說(shuō)明書(shū),PRT-GET忠實(shí)地執(zhí)行用戶在說(shuō)明書(shū)中指定的每一個(gè)操作,也就是說(shuō),用戶無(wú)需編寫(xiě)任何一句代碼就可以使PRT-GET支持自定義協(xié)議。

5.PRT-GET的使用方便。PRT-GET使用時(shí)只需要調(diào)用動(dòng)態(tài)鏈接庫(kù)就可以輕松地使用其中的協(xié)議控制類。

三、PRT-GET的設(shè)計(jì)

1.PRT-GET的工作層次

PRT-GET設(shè)計(jì)為一個(gè)動(dòng)態(tài)鏈接庫(kù),它為系統(tǒng)應(yīng)用程序提供中間層服務(wù),使得應(yīng)用程序無(wú)需了解網(wǎng)絡(luò)通信的具體邏輯,只需把網(wǎng)絡(luò)的內(nèi)容當(dāng)作本地的內(nèi)容操作即可,從這點(diǎn)看起來(lái)PRT-GET也是一個(gè)協(xié)議,而且更是一個(gè)能提供很多協(xié)議服務(wù)的協(xié)議支持軟件。PRT-GET在網(wǎng)絡(luò)中的工作層次如圖1所示。

對(duì)于使用PRT-GET作為網(wǎng)絡(luò)通信協(xié)議的應(yīng)用程序來(lái)說(shuō),用戶可以指定PRT-GET使用哪個(gè)協(xié)議進(jìn)行工作,因?yàn)镻RT-GET是在需要使用時(shí)才加載協(xié)議內(nèi)容的,所以用戶可以隨時(shí)動(dòng)態(tài)指定PRT-GET使用的協(xié)議,甚至可以動(dòng)態(tài)修改PRT-GET使用的協(xié)議內(nèi)容。當(dāng)協(xié)議組里面包含的協(xié)議不滿足用戶要求時(shí),用戶還可以添加新的協(xié)議,這只需要添加一個(gè)協(xié)議工作說(shuō)明書(shū)到協(xié)議組里面就可以了。

應(yīng)用程序

計(jì)算機(jī)

PRT-GET

協(xié)議組

協(xié)議內(nèi)容

服務(wù)器

服務(wù)程序

用戶

圖1PRT-GET工作層次

PRT-GET工作時(shí)根據(jù)用戶指定的協(xié)議加載協(xié)議工作說(shuō)明書(shū),然后再依照協(xié)議說(shuō)明書(shū)內(nèi)容與遠(yuǎn)端服務(wù)器/客戶端協(xié)作工作。對(duì)于PRT-GET來(lái)說(shuō),遠(yuǎn)端機(jī)器是透明的,PRT-GET的機(jī)器透明性是基于工作在TCP協(xié)議上的Socket的,所以對(duì)于PRT-GET來(lái)說(shuō)沒(méi)有機(jī)器的差別,沒(méi)有平臺(tái)的差別。

2.PRT-GET的幾個(gè)概念

在PRT-GET中,有一些基本概念貫穿于整個(gè)PRT-GET的設(shè)計(jì)和實(shí)現(xiàn)過(guò)程中。

(1)協(xié)議

PRT-GET中的協(xié)議對(duì)應(yīng)著一個(gè)網(wǎng)絡(luò)協(xié)議。協(xié)議在PRT-GET程序中只是一個(gè)邏輯的存在,并沒(méi)有具體的某個(gè)協(xié)議的實(shí)現(xiàn),所以如果要使PRT-GET支持某個(gè)協(xié)議的話,需要編寫(xiě)一個(gè)具體的協(xié)議工作說(shuō)明書(shū)與PRT-GET相配合。也就是說(shuō)協(xié)議工作說(shuō)明書(shū)是PRT-GET的具體協(xié)議的載體,也是PRT-GET支持協(xié)議的體現(xiàn)。

(2)元素

元素是PRT-GET的一個(gè)新概念。所有的協(xié)議都是一些基本通信單元的組合,而PRT-GET就是通過(guò)將協(xié)議分解成一個(gè)個(gè)的基本單元從而做到支持各種協(xié)議的。這種基本單元就是元素。元素是PRT-GET中協(xié)議構(gòu)成的基本單位,一個(gè)PRT-GET的協(xié)議本質(zhì)上就是一些PRT-GET的元素序列,同樣的,對(duì)元素的不同組合可以生成不同的協(xié)議,這就是PRT-GET可以支持不同協(xié)議的本質(zhì)原因。

程序中的一個(gè)元素類的對(duì)象對(duì)應(yīng)著協(xié)議工作說(shuō)明書(shū)的實(shí)際一行,也就是代表著通信交互中的一個(gè)基本交互單元。協(xié)議工作說(shuō)明書(shū)中指定了每一個(gè)通信單元應(yīng)當(dāng)使用的元素類,并執(zhí)行相應(yīng)動(dòng)作實(shí)現(xiàn)對(duì)應(yīng)的通訊單元。

為更好的實(shí)現(xiàn)通訊單元的分割和減少通信協(xié)議工作說(shuō)明書(shū)的編寫(xiě)難度,定義了動(dòng)作元素和輔助元素這兩個(gè)概念。

動(dòng)作元素:對(duì)應(yīng)著一個(gè)通訊基本操作,它指明了對(duì)于本次操作應(yīng)該如何進(jìn)行。

輔助元素:對(duì)動(dòng)作單元進(jìn)行輔助處理的單元,它是從屬于動(dòng)作單元,一個(gè)動(dòng)作元素可以有零個(gè)或多個(gè)輔助元素。

動(dòng)作元素和輔助元素指定了協(xié)議的一個(gè)通信單元的工作方式,而本次通信的內(nèi)容就由內(nèi)容項(xiàng)指定了。一個(gè)元素由動(dòng)作元素和輔助元素、內(nèi)容三項(xiàng)組成,其結(jié)構(gòu)如下:

動(dòng)作單元[輔助單元]*[內(nèi)容]

(3)分析器

PRT-GET中并沒(méi)有協(xié)議的實(shí)體存在,代替的是用協(xié)議工作說(shuō)明書(shū)作為協(xié)議的載體,而協(xié)議工作說(shuō)明書(shū)只是一個(gè)文本文件,如何將這個(gè)協(xié)議工作說(shuō)明書(shū)的內(nèi)容加載到內(nèi)存并轉(zhuǎn)變?yōu)橐粋€(gè)一個(gè)對(duì)應(yīng)的元素,這個(gè)工作是由分析器來(lái)解決的。

分析器有協(xié)議分析器和元素分析器兩種,分別用于不同用途。

協(xié)議分析器:協(xié)議分析器主要的工作是分析協(xié)議工作說(shuō)明書(shū)并創(chuàng)建該說(shuō)明書(shū)對(duì)應(yīng)的元素序列,輔助Protocol實(shí)體的創(chuàng)建。

元素分析器:元素分析器的工作是從一個(gè)字符串中分解出輔助元素和內(nèi)容,以支持元素類的動(dòng)作。

PRT-GET工作流程

PRT-GET的使用非常的方便,只需要使用URL創(chuàng)建出具體的一個(gè)協(xié)議對(duì)象則可以與主機(jī)通信,而此URL的要求為“protocol://host:port/file”格式,其中port并不是必須的,如果沒(méi)有指定的話就會(huì)使用對(duì)應(yīng)協(xié)議的協(xié)議工作說(shuō)明書(shū)中指定的默認(rèn)端口。

PRT-GET工作時(shí),將會(huì)根據(jù)用戶提交的協(xié)議名檢查其協(xié)議說(shuō)明書(shū)庫(kù)中是否有該協(xié)議,如果發(fā)現(xiàn)對(duì)應(yīng)的協(xié)議不存在則拋出一個(gè)異常提示用戶。找到指定協(xié)議后,PRT-GET將創(chuàng)建一個(gè)協(xié)議對(duì)象以實(shí)現(xiàn)通信,并將協(xié)議工作說(shuō)明書(shū)加載進(jìn)內(nèi)存中,分析生成一個(gè)元素序列,最后就執(zhí)行元素序列以實(shí)現(xiàn)實(shí)際通信目的,其工作流程如圖2所示。

讀取

開(kāi)始

結(jié)束

查找協(xié)議工作說(shuō)明書(shū)

協(xié)議組

協(xié)議存在

拋出異常

創(chuàng)建協(xié)議對(duì)象

分析工作說(shuō)明書(shū)

執(zhí)行元素動(dòng)作

圖2PRT-GET工作流程圖

四、主要包的設(shè)計(jì)

對(duì)PRT-GET的設(shè)計(jì)采用按功能結(jié)構(gòu)分包的方式,將功能相近的類放置在一起,并按邏輯位置將其放在不同的命名空間之中。

PRT-GET中最核心的三個(gè)包分別是Element(元素包)、Analyze(分析工具包)和Util(其他工具包),此外,還有ProtocolManager和Protocol兩個(gè)核心類。

PRT-GET將網(wǎng)絡(luò)操作分為基本的單元——元素,在程序中的體現(xiàn)就是元素(Element對(duì)象),PRT-GET將所有的元素類都放置在Element包中,并通過(guò)接口IElement實(shí)現(xiàn)元素動(dòng)作的統(tǒng)一。

Analyze包是一個(gè)存放存放分析器的包。PRT-GET經(jīng)常需要對(duì)協(xié)議工作說(shuō)明文件進(jìn)行分析,這就需要一個(gè)分析器專門(mén)對(duì)協(xié)議中的字符串進(jìn)行分析,Analyze包中的類就是負(fù)責(zé)此類工作。

PRT-GET在進(jìn)行一些處理時(shí)經(jīng)常會(huì)用到一些方法,為增加代碼的重用率,將所有經(jīng)常使用到的方法或操作封裝為類存放在Util包中。

五、協(xié)議工作說(shuō)明書(shū)

協(xié)議工作說(shuō)明書(shū)是協(xié)議的真正載體,它以“協(xié)議名+.prt”為文件名存放在PRT-GET動(dòng)態(tài)鏈接庫(kù)目錄的“protocol”文件夾下,PRT-GET加載協(xié)議時(shí)到這查找該協(xié)議是否存在,當(dāng)查找到時(shí)就會(huì)加載為一個(gè)協(xié)議實(shí)體。

1.協(xié)議工作說(shuō)明書(shū)的組成

網(wǎng)絡(luò)通信主要是發(fā)送內(nèi)容和接收內(nèi)容,PRT-GET的主要作用就是屏蔽了這一層中繁瑣的通信,使得用戶可以直接對(duì)通信的有用內(nèi)容進(jìn)行處理。

基于網(wǎng)絡(luò)通信只有發(fā)送和接收兩種情況,協(xié)議工作說(shuō)明書(shū)也只有兩種基本元素:Send和Receive。Send發(fā)送數(shù)據(jù),而發(fā)送的數(shù)據(jù)可以是在協(xié)議說(shuō)明書(shū)中指定的常量,也可以是用戶動(dòng)態(tài)加載的內(nèi)容。Receive同樣也可以接收常量,或者接收到內(nèi)存中對(duì)應(yīng)的元素的Data數(shù)據(jù)中。除了這兩種基本元素外,PRT-GET還擴(kuò)展了另外兩種元素:Skip和Repeat。Skip能忽略用戶不感興趣的內(nèi)容,Repeat的作用就是重復(fù)進(jìn)行用戶的一些煩瑣的操作,這些對(duì)提高用戶的工作效率有很大的幫助。此外,還有其它一些輔助元素可以指定各種動(dòng)作元素的具體操作內(nèi)容。

2.協(xié)議工作說(shuō)明書(shū)編寫(xiě)要求

編寫(xiě)協(xié)議工作說(shuō)明書(shū)必須滿足以下格式:

Port端口號(hào)

(Element名[輔助元素名]*內(nèi)容)*

協(xié)議說(shuō)明書(shū)的最開(kāi)始應(yīng)該是端口號(hào)說(shuō)明,而后出現(xiàn)的是元素字符串。元素字符串由三部分組成,其中元素名是指該動(dòng)作元素的名稱;輔助元素指定了動(dòng)作元素的一些要求,一個(gè)動(dòng)作元素可以有幾個(gè)輔助元素的存在;第三個(gè)部分就是內(nèi)容,內(nèi)容可以是常量?jī)?nèi)容,也可以是變量,也就是用戶指定的數(shù)據(jù)。

一個(gè)協(xié)議說(shuō)明書(shū)只能由一個(gè)端口號(hào),但是卻可以有多個(gè)元素,不同元素之間用換行隔開(kāi)即可。定義一個(gè)協(xié)議說(shuō)明書(shū)必須以該協(xié)議名稱加上“.prt”為協(xié)議工作說(shuō)明書(shū)名稱,并將其放置在PRT-GET的動(dòng)態(tài)鏈接庫(kù)目錄下的protocol文件夾內(nèi)。

六、應(yīng)用實(shí)例

多協(xié)議服務(wù)器是一個(gè)使用PRT-GET作為通信層的服務(wù)器軟件,以文件映射作為虛擬路徑管理手段。通過(guò)該服務(wù)器軟件可以設(shè)置虛擬目錄,用戶可以指定訪問(wèn)需要使用的網(wǎng)絡(luò)協(xié)議(如HTTP),當(dāng)有客戶端請(qǐng)求時(shí),服務(wù)器調(diào)用PRT-GET創(chuàng)建一個(gè)協(xié)議實(shí)體執(zhí)行通信,并由服務(wù)器解釋請(qǐng)求的URL,將其映射為相關(guān)系統(tǒng)文件,客戶端可以和服務(wù)器進(jìn)行通信,請(qǐng)求服務(wù)器上的文件資源如圖3所示。

圖3利用PRT-GET模擬HTTP通信

七、結(jié)語(yǔ)

本文討論了多協(xié)議模擬器PRT-GET的設(shè)計(jì)思路和方法,并通過(guò)實(shí)例模擬HTTP協(xié)議驗(yàn)證了文中所提設(shè)計(jì)方案的可行性。由于PRT-GET目前的版本設(shè)計(jì)中輔助元素還不夠多,模擬器的交互設(shè)計(jì)還有所欠缺,下一步將增加輔助元素的設(shè)計(jì),豐富模擬器的功能,增強(qiáng)其應(yīng)用的靈活性。

參考文獻(xiàn)

[1]陳富春.中XML數(shù)據(jù)與關(guān)系數(shù)據(jù)的交互技術(shù).現(xiàn)代計(jì)算機(jī).2005(04):P35-37

[2]羅軍舟,黎波濤,楊明等.TCP/IP協(xié)議及網(wǎng)絡(luò)編程技術(shù).北京:清華大學(xué)出版社,2004

[3]陳嫻,劉開(kāi)文,王蓉玲等.項(xiàng)目開(kāi)發(fā)實(shí)踐.北京:中國(guó)鐵道出版社,2003