多協(xié)議模擬器設(shè)計論文
時間:2022-12-16 10:23:00
導(dǎo)語:多協(xié)議模擬器設(shè)計論文一文來源于網(wǎng)友上傳,不代表本站觀點,若需要原創(chuàng)文章可咨詢客服老師,歡迎參考。
摘要:目前,很多網(wǎng)絡(luò)工具在遇到新的網(wǎng)絡(luò)協(xié)議出現(xiàn)的時候,很難將新的協(xié)議快速集成到現(xiàn)有的網(wǎng)絡(luò)工具中,從而給用戶造成很多使用上的不方便。本文設(shè)計的一種網(wǎng)絡(luò)協(xié)議模擬器PRT-GET可以很好的解決上述問題,PRT-GET按照自定義的協(xié)議工作說明書工作,它可以方便的把新協(xié)議加入到PRT-GET中,從而方便用戶使用新的網(wǎng)絡(luò)協(xié)議來完成通信工作。
關(guān)鍵詞:網(wǎng)絡(luò)協(xié)議動態(tài)鏈接庫協(xié)議工作說明書
一、引言
PRT-GET定義為一個協(xié)議模擬器,所謂協(xié)議模擬器就是通過某種途徑模擬各式各樣的網(wǎng)絡(luò)通信協(xié)議從而可以進行具體而實際的網(wǎng)絡(luò)通信,最終達到同時支持多種通信協(xié)議的目的。PRT-GET不同于現(xiàn)今網(wǎng)上存在的各種網(wǎng)絡(luò)工具,使用它可以編寫基本上所有的基于Socket應(yīng)用層的通信協(xié)議,PRT-GET的設(shè)計解決了用戶使用網(wǎng)絡(luò)工具時難以支持新出現(xiàn)的協(xié)議的問題。
二、PRT-GET的特點
作為一個優(yōu)秀的協(xié)議模擬器,PRT-GET具備以下的幾個特點:
1.PRT-GET是一個動態(tài)鏈接庫??紤]到應(yīng)用程序的擴展極其的不方便,所以沒有把PRT-GET設(shè)計成應(yīng)用程序的形式,而采用動態(tài)鏈接庫的方式,該方式可以方便地進行二次開發(fā),也方便擴展軟件的功能。
2.PRT-GET是完全面向?qū)ο蟮?。PRT-GET是一個可二次開發(fā)的動態(tài)鏈接庫,所以面向?qū)ο蟮脑O(shè)計模式能令二次開發(fā)更加高效。
3.PRT-GET的代碼擴展性高。使用PRT-GET時,如果PRT-GET本身提供的功能不夠,那么用戶可以通過擴展PRT-GET中對應(yīng)的類,以實現(xiàn)自定義的功能。
4.PRT-GET支持自定義協(xié)議。PRT-GET的最大特色就是支持用戶自定義應(yīng)用層協(xié)議,通過用戶編寫的協(xié)議工作說明書,PRT-GET忠實地執(zhí)行用戶在說明書中指定的每一個操作,也就是說,用戶無需編寫任何一句代碼就可以使PRT-GET支持自定義協(xié)議。
5.PRT-GET的使用方便。PRT-GET使用時只需要調(diào)用動態(tài)鏈接庫就可以輕松地使用其中的協(xié)議控制類。
三、PRT-GET的設(shè)計
1.PRT-GET的工作層次
PRT-GET設(shè)計為一個動態(tài)鏈接庫,它為系統(tǒng)應(yīng)用程序提供中間層服務(wù),使得應(yīng)用程序無需了解網(wǎng)絡(luò)通信的具體邏輯,只需把網(wǎng)絡(luò)的內(nèi)容當作本地的內(nèi)容操作即可,從這點看起來PRT-GET也是一個協(xié)議,而且更是一個能提供很多協(xié)議服務(wù)的協(xié)議支持軟件。PRT-GET在網(wǎng)絡(luò)中的工作層次如圖1所示。
對于使用PRT-GET作為網(wǎng)絡(luò)通信協(xié)議的應(yīng)用程序來說,用戶可以指定PRT-GET使用哪個協(xié)議進行工作,因為PRT-GET是在需要使用時才加載協(xié)議內(nèi)容的,所以用戶可以隨時動態(tài)指定PRT-GET使用的協(xié)議,甚至可以動態(tài)修改PRT-GET使用的協(xié)議內(nèi)容。當協(xié)議組里面包含的協(xié)議不滿足用戶要求時,用戶還可以添加新的協(xié)議,這只需要添加一個協(xié)議工作說明書到協(xié)議組里面就可以了。
應(yīng)用程序
計算機
PRT-GET
協(xié)議組
協(xié)議內(nèi)容
服務(wù)器
服務(wù)程序
用戶
圖1PRT-GET工作層次
PRT-GET工作時根據(jù)用戶指定的協(xié)議加載協(xié)議工作說明書,然后再依照協(xié)議說明書內(nèi)容與遠端服務(wù)器/客戶端協(xié)作工作。對于PRT-GET來說,遠端機器是透明的,PRT-GET的機器透明性是基于工作在TCP協(xié)議上的Socket的,所以對于PRT-GET來說沒有機器的差別,沒有平臺的差別。
2.PRT-GET的幾個概念
在PRT-GET中,有一些基本概念貫穿于整個PRT-GET的設(shè)計和實現(xiàn)過程中。
(1)協(xié)議
PRT-GET中的協(xié)議對應(yīng)著一個網(wǎng)絡(luò)協(xié)議。協(xié)議在PRT-GET程序中只是一個邏輯的存在,并沒有具體的某個協(xié)議的實現(xiàn),所以如果要使PRT-GET支持某個協(xié)議的話,需要編寫一個具體的協(xié)議工作說明書與PRT-GET相配合。也就是說協(xié)議工作說明書是PRT-GET的具體協(xié)議的載體,也是PRT-GET支持協(xié)議的體現(xiàn)。
(2)元素
元素是PRT-GET的一個新概念。所有的協(xié)議都是一些基本通信單元的組合,而PRT-GET就是通過將協(xié)議分解成一個個的基本單元從而做到支持各種協(xié)議的。這種基本單元就是元素。元素是PRT-GET中協(xié)議構(gòu)成的基本單位,一個PRT-GET的協(xié)議本質(zhì)上就是一些PRT-GET的元素序列,同樣的,對元素的不同組合可以生成不同的協(xié)議,這就是PRT-GET可以支持不同協(xié)議的本質(zhì)原因。
程序中的一個元素類的對象對應(yīng)著協(xié)議工作說明書的實際一行,也就是代表著通信交互中的一個基本交互單元。協(xié)議工作說明書中指定了每一個通信單元應(yīng)當使用的元素類,并執(zhí)行相應(yīng)動作實現(xiàn)對應(yīng)的通訊單元。
為更好的實現(xiàn)通訊單元的分割和減少通信協(xié)議工作說明書的編寫難度,定義了動作元素和輔助元素這兩個概念。
動作元素:對應(yīng)著一個通訊基本操作,它指明了對于本次操作應(yīng)該如何進行。
輔助元素:對動作單元進行輔助處理的單元,它是從屬于動作單元,一個動作元素可以有零個或多個輔助元素。
動作元素和輔助元素指定了協(xié)議的一個通信單元的工作方式,而本次通信的內(nèi)容就由內(nèi)容項指定了。一個元素由動作元素和輔助元素、內(nèi)容三項組成,其結(jié)構(gòu)如下:
動作單元[輔助單元]*[內(nèi)容]
(3)分析器
PRT-GET中并沒有協(xié)議的實體存在,代替的是用協(xié)議工作說明書作為協(xié)議的載體,而協(xié)議工作說明書只是一個文本文件,如何將這個協(xié)議工作說明書的內(nèi)容加載到內(nèi)存并轉(zhuǎn)變?yōu)橐粋€一個對應(yīng)的元素,這個工作是由分析器來解決的。
分析器有協(xié)議分析器和元素分析器兩種,分別用于不同用途。
協(xié)議分析器:協(xié)議分析器主要的工作是分析協(xié)議工作說明書并創(chuàng)建該說明書對應(yīng)的元素序列,輔助Protocol實體的創(chuàng)建。
元素分析器:元素分析器的工作是從一個字符串中分解出輔助元素和內(nèi)容,以支持元素類的動作。
PRT-GET工作流程
PRT-GET的使用非常的方便,只需要使用URL創(chuàng)建出具體的一個協(xié)議對象則可以與主機通信,而此URL的要求為“protocol://host:port/file”格式,其中port并不是必須的,如果沒有指定的話就會使用對應(yīng)協(xié)議的協(xié)議工作說明書中指定的默認端口。
PRT-GET工作時,將會根據(jù)用戶提交的協(xié)議名檢查其協(xié)議說明書庫中是否有該協(xié)議,如果發(fā)現(xiàn)對應(yīng)的協(xié)議不存在則拋出一個異常提示用戶。找到指定協(xié)議后,PRT-GET將創(chuàng)建一個協(xié)議對象以實現(xiàn)通信,并將協(xié)議工作說明書加載進內(nèi)存中,分析生成一個元素序列,最后就執(zhí)行元素序列以實現(xiàn)實際通信目的,其工作流程如圖2所示。
是
讀取
否
開始
結(jié)束
查找協(xié)議工作說明書
協(xié)議組
協(xié)議存在
拋出異常
創(chuàng)建協(xié)議對象
分析工作說明書
執(zhí)行元素動作
圖2PRT-GET工作流程圖
四、主要包的設(shè)計
對PRT-GET的設(shè)計采用按功能結(jié)構(gòu)分包的方式,將功能相近的類放置在一起,并按邏輯位置將其放在不同的命名空間之中。
PRT-GET中最核心的三個包分別是Element(元素包)、Analyze(分析工具包)和Util(其他工具包),此外,還有ProtocolManager和Protocol兩個核心類。
PRT-GET將網(wǎng)絡(luò)操作分為基本的單元——元素,在程序中的體現(xiàn)就是元素(Element對象),PRT-GET將所有的元素類都放置在Element包中,并通過接口IElement實現(xiàn)元素動作的統(tǒng)一。
Analyze包是一個存放存放分析器的包。PRT-GET經(jīng)常需要對協(xié)議工作說明文件進行分析,這就需要一個分析器專門對協(xié)議中的字符串進行分析,Analyze包中的類就是負責此類工作。
PRT-GET在進行一些處理時經(jīng)常會用到一些方法,為增加代碼的重用率,將所有經(jīng)常使用到的方法或操作封裝為類存放在Util包中。
五、協(xié)議工作說明書
協(xié)議工作說明書是協(xié)議的真正載體,它以“協(xié)議名+.prt”為文件名存放在PRT-GET動態(tài)鏈接庫目錄的“protocol”文件夾下,PRT-GET加載協(xié)議時到這查找該協(xié)議是否存在,當查找到時就會加載為一個協(xié)議實體。
1.協(xié)議工作說明書的組成
網(wǎng)絡(luò)通信主要是發(fā)送內(nèi)容和接收內(nèi)容,PRT-GET的主要作用就是屏蔽了這一層中繁瑣的通信,使得用戶可以直接對通信的有用內(nèi)容進行處理。
基于網(wǎng)絡(luò)通信只有發(fā)送和接收兩種情況,協(xié)議工作說明書也只有兩種基本元素:Send和Receive。Send發(fā)送數(shù)據(jù),而發(fā)送的數(shù)據(jù)可以是在協(xié)議說明書中指定的常量,也可以是用戶動態(tài)加載的內(nèi)容。Receive同樣也可以接收常量,或者接收到內(nèi)存中對應(yīng)的元素的Data數(shù)據(jù)中。除了這兩種基本元素外,PRT-GET還擴展了另外兩種元素:Skip和Repeat。Skip能忽略用戶不感興趣的內(nèi)容,Repeat的作用就是重復(fù)進行用戶的一些煩瑣的操作,這些對提高用戶的工作效率有很大的幫助。此外,還有其它一些輔助元素可以指定各種動作元素的具體操作內(nèi)容。
2.協(xié)議工作說明書編寫要求
編寫協(xié)議工作說明書必須滿足以下格式:
Port端口號
(Element名[輔助元素名]*內(nèi)容)*
協(xié)議說明書的最開始應(yīng)該是端口號說明,而后出現(xiàn)的是元素字符串。元素字符串由三部分組成,其中元素名是指該動作元素的名稱;輔助元素指定了動作元素的一些要求,一個動作元素可以有幾個輔助元素的存在;第三個部分就是內(nèi)容,內(nèi)容可以是常量內(nèi)容,也可以是變量,也就是用戶指定的數(shù)據(jù)。
一個協(xié)議說明書只能由一個端口號,但是卻可以有多個元素,不同元素之間用換行隔開即可。定義一個協(xié)議說明書必須以該協(xié)議名稱加上“.prt”為協(xié)議工作說明書名稱,并將其放置在PRT-GET的動態(tài)鏈接庫目錄下的protocol文件夾內(nèi)。
六、應(yīng)用實例
多協(xié)議服務(wù)器是一個使用PRT-GET作為通信層的服務(wù)器軟件,以文件映射作為虛擬路徑管理手段。通過該服務(wù)器軟件可以設(shè)置虛擬目錄,用戶可以指定訪問需要使用的網(wǎng)絡(luò)協(xié)議(如HTTP),當有客戶端請求時,服務(wù)器調(diào)用PRT-GET創(chuàng)建一個協(xié)議實體執(zhí)行通信,并由服務(wù)器解釋請求的URL,將其映射為相關(guān)系統(tǒng)文件,客戶端可以和服務(wù)器進行通信,請求服務(wù)器上的文件資源如圖3所示。
圖3利用PRT-GET模擬HTTP通信
七、結(jié)語
本文討論了多協(xié)議模擬器PRT-GET的設(shè)計思路和方法,并通過實例模擬HTTP協(xié)議驗證了文中所提設(shè)計方案的可行性。由于PRT-GET目前的版本設(shè)計中輔助元素還不夠多,模擬器的交互設(shè)計還有所欠缺,下一步將增加輔助元素的設(shè)計,豐富模擬器的功能,增強其應(yīng)用的靈活性。
參考文獻
[1]陳富春.中XML數(shù)據(jù)與關(guān)系數(shù)據(jù)的交互技術(shù).現(xiàn)代計算機.2005(04):P35-37
[2]羅軍舟,黎波濤,楊明等.TCP/IP協(xié)議及網(wǎng)絡(luò)編程技術(shù).北京:清華大學(xué)出版社,2004
[3]陳嫻,劉開文,王蓉玲等.項目開發(fā)實踐.北京:中國鐵道出版社,2003