国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于XML的通用接口通信調(diào)試系統(tǒng)設(shè)計(jì)實(shí)現(xiàn)

2022-09-09 05:50張國(guó)超金巧園何旭代中華
電子技術(shù)與軟件工程 2022年12期
關(guān)鍵詞:通信協(xié)議字段報(bào)文

張國(guó)超 金巧園 何旭 代中華

(中國(guó)船舶重工集團(tuán)公司第七二六研究所 上海市 201108)

1 研究現(xiàn)狀

今年來(lái)計(jì)算機(jī)技術(shù)和網(wǎng)絡(luò)應(yīng)用的蓬勃發(fā)展,各類基于網(wǎng)絡(luò)編程技術(shù)的應(yīng)用軟件也伴隨著各種應(yīng)用場(chǎng)景大規(guī)模的涌現(xiàn)出來(lái),網(wǎng)絡(luò)應(yīng)用軟件編寫好后除了自身軟件的調(diào)試外,還需要利用網(wǎng)絡(luò)接口模擬器驗(yàn)證網(wǎng)絡(luò)通信功能的正確性,因此隨之而來(lái)的網(wǎng)絡(luò)開(kāi)發(fā)調(diào)試的需求越來(lái)越迫切。傳統(tǒng)的做法是根據(jù)每個(gè)項(xiàng)目的需求和具體的協(xié)議要求編寫不同的網(wǎng)絡(luò)接口調(diào)試模擬器,綁定指定的IP地址和端口號(hào),并根據(jù)需求設(shè)計(jì)界面顯示內(nèi)容,網(wǎng)絡(luò)接收到數(shù)據(jù)后根據(jù)約定好的接口通信協(xié)議進(jìn)行網(wǎng)絡(luò)數(shù)據(jù)報(bào)文的解析,將解析后的數(shù)據(jù)送到顯示界面進(jìn)行顯示,數(shù)據(jù)報(bào)文的發(fā)送根據(jù)實(shí)際協(xié)議要求定制進(jìn)行發(fā)送。上述做法的優(yōu)點(diǎn)是設(shè)計(jì)的通信接口模擬器能夠很好的匹配實(shí)際應(yīng)用場(chǎng)景,能夠?qū)崿F(xiàn)與真實(shí)設(shè)備最接近的模擬測(cè)試環(huán)境,發(fā)送報(bào)文也能夠最大限度的與實(shí)際需求相符合,但是這種做法的主要缺點(diǎn)是只要有一個(gè)新的網(wǎng)絡(luò)應(yīng)用軟件出現(xiàn)就需要開(kāi)發(fā)一個(gè)與之配套的網(wǎng)絡(luò)接口調(diào)試模擬器,無(wú)法實(shí)現(xiàn)軟件的重用,軟件的復(fù)用性很低,大大增加了軟件開(kāi)發(fā)調(diào)試的時(shí)間成本和人力成本,與此同時(shí)網(wǎng)絡(luò)接口模擬器本身也需要調(diào)試,增加了開(kāi)發(fā)調(diào)試的復(fù)雜性。

針對(duì)一些簡(jiǎn)單網(wǎng)絡(luò)應(yīng)用的調(diào)試,可以采用網(wǎng)絡(luò)抓包工具例如應(yīng)用最為廣泛的Wireshark軟件和EtherPeek NX軟件等,還有基于命令行的抓包工具例如tcpdump等,這種做法的優(yōu)勢(shì)是能夠?qū)?bào)文的正確性進(jìn)行驗(yàn)證而不需要定制網(wǎng)絡(luò)接口模擬器軟件,節(jié)省了模擬器軟件的開(kāi)發(fā)成本,但是缺點(diǎn)也很明顯,缺點(diǎn)就是接收到的報(bào)文解析需要對(duì)照人工按照網(wǎng)絡(luò)通信接口協(xié)議拼接字節(jié)后依次進(jìn)行解析,很耗費(fèi)時(shí)間精力而且容易解析失誤,另外一個(gè)缺點(diǎn)就是無(wú)法實(shí)現(xiàn)網(wǎng)絡(luò)報(bào)文的發(fā)送,無(wú)法完全覆蓋網(wǎng)絡(luò)通信功能。目前還有一種網(wǎng)絡(luò)調(diào)試手段就是利用網(wǎng)絡(luò)調(diào)試助手軟件,網(wǎng)絡(luò)調(diào)試助手軟件集成了網(wǎng)絡(luò)報(bào)文抓取的基本功能,能夠抓取網(wǎng)絡(luò)報(bào)文序列,同時(shí)支持簡(jiǎn)單的報(bào)文發(fā)送功能,該方法的主要缺點(diǎn)與網(wǎng)絡(luò)抓包軟件的方法類似,需要人工進(jìn)行字段的解析,比較復(fù)雜而且容易出錯(cuò)。

針對(duì)上述三種常用的網(wǎng)絡(luò)接口通信調(diào)試方法的主要缺點(diǎn),本文提出了一種基于XML的通用接口通信調(diào)試系統(tǒng),利用XML技術(shù)進(jìn)行網(wǎng)絡(luò)接口通信協(xié)議的存儲(chǔ),實(shí)現(xiàn)不同協(xié)議只需要修改稍作修改即可以使用,不需要重新編寫接口模擬器軟件,重新運(yùn)行即可。接口通信調(diào)試系統(tǒng)按照功能主要軟件模塊包括接口通信協(xié)議存儲(chǔ)模塊、接口通信協(xié)議加載模塊、網(wǎng)絡(luò)數(shù)據(jù)報(bào)文捕獲模塊、界面顯示控制模塊、網(wǎng)絡(luò)數(shù)據(jù)報(bào)文發(fā)送模塊、網(wǎng)絡(luò)數(shù)據(jù)報(bào)文過(guò)濾解析模塊。本文針對(duì)接口通信調(diào)試系統(tǒng)的各個(gè)軟件模塊分別進(jìn)行了詳細(xì)設(shè)計(jì),并開(kāi)展驗(yàn)證試驗(yàn)驗(yàn)證軟件的可行性,在文章最后給出了試驗(yàn)結(jié)果及結(jié)果分析。

2 TCP/IP介紹

近年來(lái)計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)得到了長(zhǎng)足發(fā)展,移動(dòng)互聯(lián)網(wǎng)更是深刻影響現(xiàn)代人們的日常生活,互聯(lián)網(wǎng)由可聯(lián)網(wǎng)設(shè)備(包括計(jì)算機(jī)、移動(dòng)聯(lián)網(wǎng)設(shè)備等)、鏈路聯(lián)通設(shè)備(路由器、交換機(jī)和集線器)等結(jié)點(diǎn)連接的鏈路組成,網(wǎng)絡(luò)也可以通過(guò)路由器、交換機(jī)等網(wǎng)絡(luò)互聯(lián)設(shè)備與另外一個(gè)網(wǎng)絡(luò)向連接,形成更大的網(wǎng)絡(luò),所謂因特網(wǎng)就是全球所有網(wǎng)絡(luò)的連接形成的最大的互聯(lián)網(wǎng)。由于互聯(lián)網(wǎng)連接的設(shè)備是多樣的,可以是計(jì)算機(jī)、手機(jī)、智能設(shè)備等,與此同時(shí)各個(gè)網(wǎng)絡(luò)結(jié)點(diǎn)的硬件環(huán)境和操作系統(tǒng)都存在巨大的差異性,因此如果沒(méi)有統(tǒng)一的網(wǎng)絡(luò)通信方式會(huì)導(dǎo)致網(wǎng)絡(luò)通信軟件編寫過(guò)于復(fù)雜而難于維護(hù),互聯(lián)網(wǎng)的標(biāo)準(zhǔn)化工作使得互聯(lián)網(wǎng)通信變得更容易,從而促進(jìn)了互聯(lián)網(wǎng)的蓬勃發(fā)展。

所有的互聯(lián)網(wǎng)標(biāo)準(zhǔn)都是通過(guò)RFC的形式對(duì)公眾發(fā)布的,任何人都可以免費(fèi)下載?;ヂ?lián)網(wǎng)上的任意兩個(gè)通信設(shè)備被稱為兩個(gè)端(end),端與端之間的通信可以看作兩個(gè)主機(jī)的進(jìn)程之間的通信,在端系統(tǒng)中運(yùn)行的軟件之間網(wǎng)絡(luò)通信方式可以分為客戶端服務(wù)器模式(C/S架構(gòu))和對(duì)等模式(P2P架構(gòu)),客戶端服務(wù)器模式是應(yīng)用最為廣泛的網(wǎng)絡(luò)通信模式,如果瀏覽器作為客戶端就變成客戶端服務(wù)器模式的特殊形態(tài)瀏覽器服務(wù)器模式(B/S架構(gòu))。對(duì)等模式也得到了廣泛應(yīng)用,這種模式主要優(yōu)點(diǎn)是不需要中心服務(wù)器,被廣泛用于下載等類型應(yīng)用中。OSI將互聯(lián)網(wǎng)通信分為物理層、數(shù)據(jù)鏈路層、網(wǎng)絡(luò)層、傳輸層、會(huì)話層、表示層、應(yīng)用層七個(gè)抽象層次,但作為事實(shí)上的互聯(lián)網(wǎng)通信標(biāo)準(zhǔn)TCP/IP協(xié)議將網(wǎng)絡(luò)分為物理層、數(shù)據(jù)鏈路層、網(wǎng)絡(luò)層、傳輸層和應(yīng)用層五個(gè)層次。由于TCP/IP協(xié)議的實(shí)用性,成為全球應(yīng)用最為廣泛的網(wǎng)絡(luò)通信標(biāo)準(zhǔn)協(xié)議。TCP/IP協(xié)議簇顧名思義,包括傳輸控制協(xié)議(TCP協(xié)議)和網(wǎng)際協(xié)議(IP協(xié)議),不僅僅包括TCP協(xié)議和IP協(xié)議,還包括用戶數(shù)據(jù)報(bào)協(xié)議(UDP協(xié)議)、地址解析協(xié)議(ARP協(xié)議)、文件傳輸協(xié)議(FTP協(xié)議)、遠(yuǎn)程連接協(xié)議(Telnet協(xié)議)。TCP/IP協(xié)議簇最核心的協(xié)議是IP協(xié)議,IP協(xié)議是很多其他協(xié)議的基礎(chǔ),例如UDP和TCP協(xié)議就是IP協(xié)議前面添加了標(biāo)準(zhǔn)的報(bào)文頭。IP協(xié)議是一種無(wú)連接的網(wǎng)絡(luò)數(shù)據(jù)傳輸協(xié)議,提供盡力發(fā)送的不可靠傳輸方式,傳輸過(guò)程中出現(xiàn)校驗(yàn)錯(cuò)誤時(shí)采取的處理方法是直接丟棄錯(cuò)誤報(bào)文。IP協(xié)議頭部由20個(gè)字節(jié)組成,分別用來(lái)存儲(chǔ)IP協(xié)議的版本、數(shù)據(jù)總長(zhǎng)度、源IP地址和端口號(hào)、目的IP地址和端口號(hào)、數(shù)據(jù)校驗(yàn)和等。UDP協(xié)議報(bào)文頭部包括8個(gè)字節(jié),是一種不可靠的傳輸層協(xié)議,如果需要可靠的數(shù)據(jù)傳輸,需要應(yīng)用TCP協(xié)議,TCP協(xié)議頭部包括20字節(jié)報(bào)文頭,TCP通過(guò)三次握手的方式保證了TCP報(bào)文的可靠傳輸,如果發(fā)送超時(shí)會(huì)自動(dòng)重復(fù)發(fā)送。TCP/IP協(xié)議的實(shí)現(xiàn)有很多版本,最著名的實(shí)現(xiàn)版本是由伯克利(Berkeley)的加利福尼亞大學(xué)計(jì)算機(jī)系統(tǒng)研究組提供的實(shí)現(xiàn),伯克利的TCP/IP協(xié)議棧是在Unix操作系統(tǒng)實(shí)現(xiàn)的,很多非Unix或者類Unix操作系統(tǒng)都是基于伯克利實(shí)現(xiàn)的TCP/IP協(xié)議棧開(kāi)展的。伯克利實(shí)現(xiàn)的協(xié)議棧利用套接字(socket)進(jìn)行編程,提供一套用戶接口完成網(wǎng)絡(luò)通信的功能,很多非Unix系統(tǒng)完成了伯克利套接字的移植工作,使得套接字應(yīng)用接口成為網(wǎng)絡(luò)編程的通用用戶接口。

套接字的類型包括TCP類型、UDP類型和原始套接字(Raw Socket)類型,在創(chuàng)建時(shí)候指定。使用接口函數(shù)socket創(chuàng)建套接字,對(duì)于C/S架構(gòu)軟件服務(wù)器端需要綁定IP地址和端口號(hào)首先啟動(dòng)進(jìn)程在綁定IP和端口號(hào)等待客戶端網(wǎng)絡(luò)數(shù)據(jù),客戶端向指定的IP地址和端口號(hào),對(duì)于套接字被指定為原始套接字類型的套接字能夠接收所有經(jīng)過(guò)網(wǎng)卡的IP數(shù)據(jù)包,常常被用于網(wǎng)絡(luò)報(bào)文抓取。

3 XML簡(jiǎn)介

XML的全名是可擴(kuò)展標(biāo)簽語(yǔ)言(Extensible Markup Language),XML是標(biāo)準(zhǔn)通用標(biāo)記語(yǔ)言的一個(gè)子集,是一種與HTML類似的純文本標(biāo)記語(yǔ)言,XML利用結(jié)構(gòu)性的標(biāo)簽屬性和屬性數(shù)值來(lái)表達(dá)數(shù)據(jù)物理含義。HTML語(yǔ)言也是標(biāo)記語(yǔ)言,XML和HTML主要區(qū)別是擴(kuò)展性、結(jié)構(gòu)性、校驗(yàn)性,在擴(kuò)展性方面HTML標(biāo)簽屬性是固定的不可修改的,但XML能夠根據(jù)需要表示數(shù)據(jù)的含義自定義添加標(biāo)簽屬性,大大豐富了數(shù)據(jù)表達(dá)的能力;在結(jié)構(gòu)性方面HTML無(wú)法實(shí)現(xiàn)復(fù)雜結(jié)構(gòu),而XML的標(biāo)簽結(jié)構(gòu)支持復(fù)雜的嵌套,能夠清晰的反應(yīng)要表達(dá)數(shù)據(jù)的層級(jí)關(guān)系;在校驗(yàn)?zāi)芰Ψ矫鍴TML使用語(yǔ)言文法做文件結(jié)構(gòu)的校驗(yàn),但是沒(méi)有相應(yīng)的標(biāo)準(zhǔn)化校驗(yàn)文件對(duì)其進(jìn)行約束,XML有很多標(biāo)準(zhǔn)文件規(guī)定XML的正確性校驗(yàn),從而保證了XML的校驗(yàn)?zāi)芰?。XML編寫方法是創(chuàng)建后綴為“xml”的純文本文件,根據(jù)實(shí)際情況創(chuàng)建標(biāo)簽,組成元素包括標(biāo)簽的版本描述、起止標(biāo)記、標(biāo)記的字符數(shù)據(jù)部分、標(biāo)簽注釋、文檔類型聲明(DTD,Document Type Definition)等。由于XML具有容易理解、便于維護(hù)修改、支持復(fù)雜層次結(jié)構(gòu)、純文本編寫方式具有系統(tǒng)無(wú)關(guān)的跨平臺(tái)性,因此XML被廣泛應(yīng)用于配置文件的編寫,使用XML配置的軟件不需要進(jìn)行重新編譯,修改配置后只需要軟件重新啟動(dòng)即可,具有很好的封裝性。

XML文件包括文檔對(duì)象模型(Document Object Model)解析方式、簡(jiǎn)易APIXML(simple API for XML)解析方式、DOM4J解析方式、Java文檔對(duì)象模型(Java Document Object Model)解析方式。對(duì)于XML文件的讀取和處理可以采取自己寫代碼打開(kāi)文件,讀取所有XML行數(shù)據(jù),然后根據(jù)XML標(biāo)簽成對(duì)規(guī)則,逐個(gè)標(biāo)簽進(jìn)行解析,比較復(fù)雜而容易出錯(cuò),因此現(xiàn)在有很多軟件庫(kù),提供簡(jiǎn)單方便的應(yīng)用程序接口,通過(guò)接口的調(diào)用就可以很方便快捷的解析XML文件信息,Java、C++、PHP等各種主流編程語(yǔ)言都有很多優(yōu)秀的XML解析庫(kù)可用。Qt是全球應(yīng)用最為廣泛的C++界面開(kāi)發(fā)庫(kù)之一,設(shè)計(jì)為一款跨平臺(tái)的GUI開(kāi)發(fā)庫(kù),目前已經(jīng)發(fā)展成為一個(gè)集界面開(kāi)發(fā)、支持多進(jìn)程/線程技術(shù)、支持?jǐn)?shù)據(jù)庫(kù)接口、網(wǎng)絡(luò)通信處理、文件IO操作等功能的完備C++函數(shù)庫(kù)。Qt對(duì)XML提供了一個(gè)Qt類庫(kù)QDomDocument,可以調(diào)用QDomDocument類的接口進(jìn)行XML文件的讀取解析和寫入工作。

4 接口通信調(diào)試系統(tǒng)總體設(shè)計(jì)

接口通信調(diào)試系統(tǒng)主要功能是完成網(wǎng)絡(luò)應(yīng)用程序的接口通信調(diào)試,首先需要完成通過(guò)網(wǎng)卡數(shù)據(jù)的截取,然后根據(jù)設(shè)置好的過(guò)濾條件完成報(bào)文的過(guò)濾并存儲(chǔ)到內(nèi)存中,然后根據(jù)接口通信協(xié)議內(nèi)容進(jìn)行報(bào)文的解析和顯示,支持通過(guò)界面方式進(jìn)行接口協(xié)議的定義、過(guò)濾條件的定義,支持通過(guò)界面進(jìn)行數(shù)據(jù)報(bào)文的發(fā)送功能。按照功能接口通信調(diào)試系統(tǒng)可以分為以下幾個(gè)軟件功能模塊:網(wǎng)絡(luò)接收軟件模塊、網(wǎng)絡(luò)數(shù)據(jù)過(guò)濾軟件模塊、網(wǎng)絡(luò)數(shù)據(jù)處理軟件模塊、界面顯示軟件模塊、協(xié)議定義軟件模塊、網(wǎng)絡(luò)數(shù)據(jù)發(fā)送軟件模塊。下面針對(duì)這幾個(gè)軟件模塊開(kāi)展詳細(xì)設(shè)計(jì)。

4.1 網(wǎng)絡(luò)接收模塊設(shè)計(jì)

網(wǎng)絡(luò)接收模塊主要功能是接收所有經(jīng)過(guò)網(wǎng)卡的數(shù)據(jù),采用的技術(shù)是原始套接字的方式。首先利用socket()函數(shù)創(chuàng)建類型為RawSocket的原始套接字,然后創(chuàng)建網(wǎng)絡(luò)接收線程,以死循環(huán)方式在網(wǎng)絡(luò)接收線程中調(diào)用recvfrom()函數(shù)阻塞式接收網(wǎng)絡(luò)數(shù)據(jù),接收到的數(shù)據(jù)存儲(chǔ)在網(wǎng)絡(luò)接收緩存中,作為參數(shù)傳遞給網(wǎng)絡(luò)數(shù)據(jù)過(guò)濾模塊,等待數(shù)據(jù)過(guò)濾和處理。

4.2 網(wǎng)絡(luò)數(shù)據(jù)過(guò)濾模塊設(shè)計(jì)

網(wǎng)絡(luò)數(shù)據(jù)過(guò)濾模塊主要功能是讀取和寫入過(guò)濾條件到配置文件,負(fù)責(zé)軟件過(guò)濾條件的寫入存儲(chǔ)和讀取加載工作。實(shí)現(xiàn)技術(shù)主要采用XML作為配置文件,軟件啟動(dòng)時(shí)可以利用界面的方式對(duì)XML配置文件進(jìn)行寫入和加載。過(guò)濾條件包括:源IP地址、源端口號(hào)。過(guò)濾條件的存儲(chǔ)利用的是XML文件存儲(chǔ),XML的過(guò)濾條件的標(biāo)簽名稱源IP地址標(biāo)簽SRC_IP,端口號(hào)標(biāo)簽名稱SRC_PORT。過(guò)濾條件XML的存儲(chǔ)可以直接修改配置文件的SRC_IP和SRC_PORT標(biāo)簽字段的值,值以字符串的方式存儲(chǔ),軟件重啟后生效,另外一種方式是軟件啟動(dòng)后通過(guò)界面方式修改過(guò)濾條件,界面?zhèn)魅氪薷牡脑碔P地址和源端口號(hào),確定修改后,利用Qt自帶的XML寫入接口函數(shù)將修改字段寫入到SRC_IP和SRC_PORT標(biāo)簽對(duì)應(yīng)位置,完成過(guò)濾條件的XML文件存盤工作。

4.3 通信協(xié)議定義軟件模塊

通信協(xié)議定義模塊主要功能是完成通信接口協(xié)議的定義寫入到接口協(xié)議XML配置文件,支持直接修改接口協(xié)議配置文件,也支持通過(guò)界面以可視化的方式新增或者修改通信協(xié)議條目。

通信協(xié)議XML標(biāo)簽結(jié)構(gòu)包括協(xié)議名稱字段標(biāo)簽名稱PROTOCOL_NAME用于標(biāo)志協(xié)議的名稱(取值為中文字符串,用于界面顯示協(xié)議名稱),協(xié)議名稱包括屬性為PROTOCOL_INDEX用來(lái)標(biāo)識(shí)協(xié)議唯一標(biāo)志(取值從0開(kāi)始,后面如有新的協(xié)議字段該屬性值自動(dòng)加一),協(xié)議名稱的第二個(gè)屬性為PROTOCOL_KEYOFFSET用來(lái)表示協(xié)議每一個(gè)數(shù)據(jù)報(bào)文的唯一數(shù)據(jù)標(biāo)志的相對(duì)于首個(gè)字節(jié)的偏移量,協(xié)議名稱的第三個(gè)屬性是PROTOCOL_KEYLEN用于表示數(shù)據(jù)報(bào)文唯一數(shù)據(jù)標(biāo)志的數(shù)據(jù)長(zhǎng)度;協(xié)議的下一級(jí)包括協(xié)議條目字段標(biāo)簽名稱為PROITEM用來(lái)定義報(bào)文的任意字段,協(xié)議條目字段包括屬性PROITEM_INDEX用來(lái)標(biāo)識(shí)各個(gè)條目的索引號(hào)(取值從0開(kāi)始,后面的條目字段數(shù)值加一),PROITEM_NAME屬性用來(lái)標(biāo)識(shí)字段的名稱(取值為字符串,用于界面顯示使用),PROITEM_KEY屬性用來(lái)標(biāo)識(shí)該字段是否是協(xié)議條目是否為報(bào)文唯一標(biāo)志號(hào)(屬性字段如果為true代表該字段為協(xié)議唯一標(biāo)識(shí)字段,屬性值為false代表該字段為普通字段),PROITEM_TYPE屬性用來(lái)標(biāo)識(shí)字段的數(shù)據(jù)類型,協(xié)議字段類型包括有符號(hào)字符類型(1個(gè)字節(jié)長(zhǎng)度)、有符號(hào)短整數(shù)型(2個(gè)字節(jié)長(zhǎng)度)、有符號(hào)整數(shù)型(4個(gè)字節(jié)長(zhǎng)度)、有符號(hào)長(zhǎng)整數(shù)型(8個(gè)字節(jié)長(zhǎng)度)、單精度浮點(diǎn)型(4個(gè)字節(jié)長(zhǎng)度)、雙精度浮點(diǎn)型(8個(gè)字節(jié)長(zhǎng)度)、無(wú)符號(hào)字符類型(1個(gè)字節(jié)長(zhǎng)度)、無(wú)符號(hào)短整數(shù)型(2個(gè)字節(jié)長(zhǎng)度)、無(wú)符號(hào)整數(shù)型(4個(gè)字節(jié)長(zhǎng)度)、無(wú)符號(hào)長(zhǎng)整數(shù)型(8個(gè)字節(jié)長(zhǎng)度),分別利用類型屬性值char、short、int、long、float、double、uchar、ushort、uint、ulong來(lái)表示。通信協(xié)議XML文件的寫入可采取人工直接編輯通信協(xié)議XML文件來(lái)完成,編輯時(shí)候需要注意協(xié)議條目字段的索引字段要手動(dòng)加一,防止與前面索引字段取值重復(fù),標(biāo)簽也需要仔細(xì)核對(duì),有一定的難度和復(fù)雜性,因此推薦的方式是利用圖形界面的協(xié)議設(shè)置窗口完成協(xié)議的新增修改或者刪除操作。網(wǎng)絡(luò)調(diào)試系統(tǒng)軟件啟動(dòng)后會(huì)自動(dòng)到指定路徑打開(kāi)并讀取通信協(xié)議XML文件,如果文件不存在會(huì)創(chuàng)建一個(gè)空的通信協(xié)議XML配置文件。讀取通信協(xié)議XML文件后,利用Qt的XML文件解析類進(jìn)行XML文件的讀取和解析,將XML的所有標(biāo)簽讀取到內(nèi)存中建立協(xié)議解析,首先將協(xié)議條目的唯一標(biāo)志的偏移量和數(shù)據(jù)長(zhǎng)度存儲(chǔ)到局部變量中,然后建立協(xié)議條目數(shù)據(jù)結(jié)構(gòu)表。協(xié)議條目結(jié)構(gòu)體字段包括字符串型條目名稱(itemName)、布爾型條目標(biāo)識(shí)符號(hào)(bKeyitem)、整數(shù)型條目長(zhǎng)度(itemLen)、QString類型條目顯示數(shù)值(itemValue)。通信協(xié)議XML文件讀取進(jìn)來(lái)后,建立一個(gè)協(xié)議條目標(biāo)識(shí)數(shù)值和協(xié)議條目結(jié)構(gòu)體鏈表為序列對(duì)的QMap數(shù)據(jù)結(jié)構(gòu)作為協(xié)議解析列表。后續(xù)的網(wǎng)絡(luò)報(bào)文處理模塊根據(jù)建立好的協(xié)議解析列表進(jìn)行報(bào)文的解析和顯示。

4.4 網(wǎng)絡(luò)數(shù)據(jù)處理軟件模塊

網(wǎng)絡(luò)數(shù)據(jù)處理模塊的功能是根據(jù)網(wǎng)絡(luò)通信協(xié)議字段的定義對(duì)接收到的網(wǎng)絡(luò)數(shù)據(jù)進(jìn)行處理,處理后的結(jié)果作為界面顯示的輸入,完成協(xié)議字段的現(xiàn)實(shí)功能。首先根據(jù)協(xié)議條目的唯一標(biāo)志的數(shù)據(jù)偏移量和數(shù)據(jù)長(zhǎng)度解析出當(dāng)前數(shù)據(jù)報(bào)文的報(bào)文標(biāo)志,然后在建立好的網(wǎng)絡(luò)通信協(xié)議結(jié)構(gòu)表中查詢是否存在該標(biāo)志的協(xié)議條目,如果查詢不到則忽略改條報(bào)文,如果查詢成功,則獲取對(duì)應(yīng)數(shù)據(jù)標(biāo)志的協(xié)議條目結(jié)構(gòu),將數(shù)據(jù)報(bào)文的對(duì)應(yīng)到結(jié)構(gòu)體鏈表的每一個(gè)節(jié)點(diǎn),節(jié)點(diǎn)的數(shù)值根據(jù)節(jié)點(diǎn)結(jié)構(gòu)體的字節(jié)數(shù)目進(jìn)行字節(jié)拼接得到,解析后的數(shù)據(jù)發(fā)送信號(hào)到界面線程用于驅(qū)動(dòng)界面顯示。

4.5 界面顯示及操作控制軟件模塊

界面顯示及操作控制模塊主要功能是顯示接收到網(wǎng)絡(luò)數(shù)據(jù)信息,顯示報(bào)文的標(biāo)志以及各個(gè)數(shù)據(jù)段的數(shù)值,同時(shí)可以通過(guò)界面設(shè)置通信協(xié)議、設(shè)置過(guò)濾條件,輸入發(fā)送數(shù)據(jù)配合完成向目標(biāo)IP地址和端口號(hào)發(fā)送網(wǎng)絡(luò)數(shù)據(jù)任務(wù)。界面顯示基于Qt框架進(jìn)行開(kāi)發(fā),基類選擇QMainWindow類,因?yàn)樽詭Р藛伪容^適合網(wǎng)絡(luò)調(diào)試軟件的需求,網(wǎng)絡(luò)數(shù)據(jù)顯示部分選擇控件QTableWidget,以分行顯示的方式顯示所有的符合條件網(wǎng)絡(luò)報(bào)文(類似抓包軟件一樣),如果希望看到網(wǎng)絡(luò)報(bào)文的詳細(xì)信息,只需要用鼠標(biāo)在需要查看的條目用鼠標(biāo)雙擊操作,就可以彈出詳細(xì)的字段信息,顯示內(nèi)容是改條網(wǎng)絡(luò)數(shù)據(jù)報(bào)文對(duì)應(yīng)通信協(xié)議解析后的每一個(gè)字段的顯示,每一個(gè)顯示字段分為兩個(gè)部分,第一部分是字段本身的名稱(選用QLabel控件),第二部分是字段在本條數(shù)據(jù)報(bào)文的數(shù)值(選用QLabel控件)。協(xié)議設(shè)置界面是在菜單里面選擇協(xié)議設(shè)置,彈出協(xié)議設(shè)置界面,界面主要包括協(xié)議名稱、協(xié)議條目唯一標(biāo)志偏移量、協(xié)議唯一標(biāo)志數(shù)據(jù)長(zhǎng)度。軟件啟動(dòng)后自動(dòng)讀取協(xié)議配置XML文件,利用通信協(xié)議定義軟件模塊建立網(wǎng)絡(luò)協(xié)議結(jié)構(gòu)表,界面顯示模塊完成網(wǎng)絡(luò)協(xié)議的樹(shù)形結(jié)構(gòu)的顯示任務(wù),顯示在界面的左側(cè),應(yīng)用Qt自帶的樹(shù)形結(jié)構(gòu)控件QTreeWidget完成協(xié)議樹(shù)形結(jié)構(gòu)的顯示,顯示層級(jí)包括頂級(jí)節(jié)點(diǎn)協(xié)議名稱,展開(kāi)后下一級(jí)是每一個(gè)報(bào)文結(jié)構(gòu)名稱,報(bào)文結(jié)構(gòu)的下一級(jí)是改條報(bào)文的所有協(xié)議字段。界面顯示控制模塊支持通過(guò)鼠標(biāo)右鍵菜單的方式對(duì)協(xié)議條目和報(bào)文任意字段的增加、刪除、修改等工作,增、刪、改的結(jié)果會(huì)自動(dòng)寫入通信協(xié)議XML配置文件中,下次軟件啟動(dòng)后自動(dòng)同步更新。界面中網(wǎng)絡(luò)發(fā)送控制區(qū)域主要完成待發(fā)送網(wǎng)絡(luò)數(shù)據(jù)的輸入,輸入目標(biāo)IP地址和目標(biāo)端口號(hào)、發(fā)送按鈕,同時(shí)支持讀取編輯好的發(fā)送文件,將文件內(nèi)容發(fā)送到目標(biāo)IP地址和目標(biāo)端口。

4.6 網(wǎng)絡(luò)數(shù)據(jù)發(fā)送軟件模塊

網(wǎng)絡(luò)數(shù)據(jù)發(fā)送模塊主要功能是讀取界面中網(wǎng)絡(luò)發(fā)送控制區(qū)域的輸入數(shù)據(jù),利用套接字向界面中指定的IP地址和端口號(hào)發(fā)送界面中讀取的待發(fā)送網(wǎng)絡(luò)數(shù)據(jù)或者加載的發(fā)送文件內(nèi)容。首先利用socket()函數(shù)創(chuàng)建類型為RawSocket的原始套接字,然后創(chuàng)建網(wǎng)絡(luò)發(fā)送線程,以死循環(huán)方式在阻塞式等待在網(wǎng)絡(luò)發(fā)送消息隊(duì)列中,如果隊(duì)列有數(shù)據(jù),則取隊(duì)列首部元素,并調(diào)用sendto()函數(shù)向指定的IP地址和端口號(hào)發(fā)送隊(duì)列中的數(shù)據(jù),直至隊(duì)列數(shù)據(jù)為空。當(dāng)界面網(wǎng)絡(luò)發(fā)送區(qū)域用戶設(shè)置好目標(biāo)IP地址和端口號(hào),輸入完待發(fā)送網(wǎng)絡(luò)數(shù)據(jù)或者加載好待發(fā)送文件后,鼠標(biāo)點(diǎn)擊發(fā)送數(shù)據(jù)按鈕,就會(huì)將待發(fā)送的網(wǎng)絡(luò)數(shù)據(jù)加入到網(wǎng)絡(luò)發(fā)送數(shù)據(jù)消息隊(duì)列中,從而驅(qū)動(dòng)網(wǎng)絡(luò)發(fā)送線程完成網(wǎng)絡(luò)數(shù)據(jù)發(fā)送任務(wù)。

5 試驗(yàn)環(huán)境搭建和試驗(yàn)結(jié)果展示

根據(jù)本文章節(jié)4給出的網(wǎng)絡(luò)調(diào)試系統(tǒng)的總體設(shè)計(jì)和詳細(xì)設(shè)計(jì)可以完成網(wǎng)絡(luò)調(diào)試系統(tǒng)軟件的編寫,需要設(shè)計(jì)試驗(yàn)對(duì)軟件的可用性和正確性進(jìn)行驗(yàn)證。本文提出的網(wǎng)絡(luò)調(diào)試系統(tǒng)方法是一種通用的、跨平臺(tái)的方法,應(yīng)用Qt和C++進(jìn)行開(kāi)發(fā),操作系統(tǒng)支持Windows操作系統(tǒng)、Linux操作系統(tǒng)、VxWorks操作系統(tǒng)等。不失一般性的本文試驗(yàn)環(huán)境選用Windows7操作系統(tǒng)進(jìn)行演示,首先安裝VS2010(Microsoft Visual Studio 2010)軟件,然后到Qt官方下載網(wǎng)站下載Qt5.0版本的x86軟件安裝包可執(zhí)行文件,并在Win7下進(jìn)行Qt5的安裝,為了將Qt集成到VS2010上,需要下載安裝Qt的VS2010插件,該插件也可以在Qt官方網(wǎng)站下載獲得,安裝好插件后,打開(kāi)VS2010就可以在菜單欄出現(xiàn)Qt標(biāo)志,表明插件安裝成功。為了驗(yàn)證調(diào)試軟件的功能,定義一個(gè)協(xié)議名稱為“接口協(xié)議1”,包括協(xié)議條目1(接收)、協(xié)議條目2(接收)、協(xié)議條目3(接收)、協(xié)議條目4(接收)、協(xié)議條目5(發(fā)送),協(xié)議條目1-4包括字段1(無(wú)符號(hào)整數(shù)型)、字段2(有符號(hào)整數(shù)型)、字段3(無(wú)符號(hào)長(zhǎng)整數(shù)型)、字段4(單精度浮點(diǎn)數(shù))、字段5(雙精度浮點(diǎn)數(shù)),協(xié)議條目5包括字段1(單精度浮點(diǎn)數(shù))、字段2(雙精度浮點(diǎn)數(shù))、字段3(有符號(hào)整數(shù)型)。按照上述測(cè)試協(xié)議編寫網(wǎng)絡(luò)模擬器(綁定本地IP地址為192.9.30.66,端口號(hào)9856)發(fā)送UDP報(bào)文到目標(biāo)機(jī),目標(biāo)機(jī)捕獲報(bào)文后解析結(jié)構(gòu)截圖如圖1所示。

圖1:試驗(yàn)結(jié)果顯示截圖

6 試驗(yàn)結(jié)果分析

試驗(yàn)結(jié)果表明本文提出的網(wǎng)絡(luò)調(diào)試系統(tǒng)能夠?qū)崿F(xiàn)通用的網(wǎng)絡(luò)數(shù)據(jù)的接收、解析以及顯示功能,不僅能夠在網(wǎng)絡(luò)數(shù)據(jù)接收區(qū)域顯示所有接收到的報(bào)文條目,也可以通過(guò)點(diǎn)擊某一條關(guān)注的報(bào)文標(biāo)志報(bào)文查看報(bào)文的各個(gè)字段數(shù)據(jù)信息,在右側(cè)的報(bào)文字段顯示區(qū)域顯示,同時(shí)支持網(wǎng)絡(luò)數(shù)據(jù)的發(fā)送功能和協(xié)議的配置等功能。本文提出的網(wǎng)絡(luò)調(diào)試系統(tǒng)具有協(xié)議低耦合度,可以根據(jù)實(shí)際情況設(shè)置協(xié)議配置文件,重啟軟件就可以實(shí)現(xiàn)一個(gè)符合新協(xié)議定義的接口調(diào)試軟件,具有很高的軟件復(fù)用性,使網(wǎng)絡(luò)接口調(diào)試工作變得更簡(jiǎn)單便捷,具備很高的實(shí)用價(jià)值。

猜你喜歡
通信協(xié)議字段報(bào)文
基于J1939 協(xié)議多包報(bào)文的時(shí)序研究及應(yīng)用
圖書館中文圖書編目外包數(shù)據(jù)質(zhì)量控制分析
CTCS-2級(jí)報(bào)文數(shù)據(jù)管理需求分析和實(shí)現(xiàn)
淺析反駁類報(bào)文要點(diǎn)
基于Z-Stack通信協(xié)議棧的紅外地溫采集電路設(shè)計(jì)
ATS與列車通信報(bào)文分析
基于DMX512通信協(xié)議的多路轉(zhuǎn)發(fā)器設(shè)計(jì)與研究
基于NS-3的PLC多頻通信協(xié)議仿真平臺(tái)設(shè)計(jì)與實(shí)現(xiàn)
CNMARC304字段和314字段責(zé)任附注方式解析
無(wú)正題名文獻(xiàn)著錄方法評(píng)述