一種網(wǎng)絡(luò)傳輸服務(wù)構(gòu)件及網(wǎng)絡(luò)傳輸系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及通信技術(shù)領(lǐng)域,特別涉及一種網(wǎng)絡(luò)傳輸服務(wù)構(gòu)件及網(wǎng)絡(luò)傳輸系統(tǒng)。
【背景技術(shù)】
[0002]在通信網(wǎng)絡(luò)中,網(wǎng)絡(luò)傳輸服務(wù)是實(shí)現(xiàn)各業(yè)務(wù)數(shù)據(jù)交互的必要技術(shù),實(shí)現(xiàn)網(wǎng)絡(luò)上多臺(tái)機(jī)器間的數(shù)據(jù)交互功能。當(dāng)前常用的網(wǎng)絡(luò)傳輸協(xié)議有TCP協(xié)議、UDP協(xié)議等。一般情況下,各網(wǎng)絡(luò)傳輸協(xié)議提供的接口名稱、使用方法均不相同,不同操作系統(tǒng)、編碼語(yǔ)言下的同一網(wǎng)絡(luò)傳輸協(xié)議接口名稱通常也存在一定差異,這些都對(duì)網(wǎng)絡(luò)編程帶來(lái)一定的影響,從而延長(zhǎng)了研發(fā)周期,并在項(xiàng)目開(kāi)發(fā)、后期維護(hù)、系統(tǒng)迀移等過(guò)程中生成大量不必要成本。
[0003]目前各網(wǎng)絡(luò)傳輸服務(wù)一般都是由網(wǎng)絡(luò)中的發(fā)送端比如終端或服務(wù)器對(duì)使用的某一類特定網(wǎng)絡(luò)傳輸協(xié)議進(jìn)行單獨(dú)封裝,完成該特定網(wǎng)絡(luò)協(xié)議下的所有完整的封裝處理,接收端也必須完成對(duì)應(yīng)某一類特定網(wǎng)絡(luò)傳輸協(xié)議的所有解封裝的處理及解析過(guò)程,從而無(wú)法為用戶提供統(tǒng)一的網(wǎng)絡(luò)傳輸服務(wù),并導(dǎo)致各協(xié)議網(wǎng)接口不同,用戶的封裝處理過(guò)于復(fù)雜。
[0004]另外,當(dāng)系統(tǒng)需要迀移、網(wǎng)絡(luò)協(xié)議需要更換時(shí),現(xiàn)有技術(shù)對(duì)每一個(gè)特定的網(wǎng)絡(luò)傳輸協(xié)議單獨(dú)封裝方式必然使得研發(fā)周期延長(zhǎng),帶來(lái)不必要的項(xiàng)目投入。
【發(fā)明內(nèi)容】
[0005]本發(fā)明提供一種網(wǎng)絡(luò)傳輸服務(wù)構(gòu)件及網(wǎng)絡(luò)傳輸方法,能夠提供統(tǒng)一的網(wǎng)絡(luò)傳輸服務(wù)。
[0006]網(wǎng)絡(luò)傳輸服務(wù)構(gòu)件,包括:
[0007]構(gòu)件動(dòng)態(tài)庫(kù),存儲(chǔ)有網(wǎng)絡(luò)傳輸使用的至少一種協(xié)議的協(xié)議實(shí)例,每一個(gè)協(xié)議實(shí)例被按照規(guī)定的接口進(jìn)行封裝,且每一個(gè)協(xié)議實(shí)例包括與該協(xié)議實(shí)例對(duì)應(yīng)的初始化函數(shù)模塊、接收函數(shù)模塊以及發(fā)送函數(shù)模塊;
[0008]網(wǎng)絡(luò)初始化接口,提供用于調(diào)用所述構(gòu)件動(dòng)態(tài)庫(kù)中目標(biāo)協(xié)議對(duì)應(yīng)的初始化函數(shù)模塊的接口 ;
[0009]數(shù)據(jù)發(fā)送接口,提供用于調(diào)用所述構(gòu)件動(dòng)態(tài)庫(kù)中目標(biāo)協(xié)議對(duì)應(yīng)的發(fā)送函數(shù)模塊的接口 ;
[0010]數(shù)據(jù)接收接口,提供用于調(diào)用所述構(gòu)件動(dòng)態(tài)庫(kù)中目標(biāo)協(xié)議對(duì)應(yīng)的接收函數(shù)模塊的接口 ;
[0011 ] 外部協(xié)議加載接口,提供用于向所述構(gòu)件動(dòng)態(tài)庫(kù)中加載新增協(xié)議的實(shí)例的接口。
[0012]所述構(gòu)件動(dòng)態(tài)庫(kù)中,每一個(gè)協(xié)議實(shí)例進(jìn)一步包括對(duì)應(yīng)該協(xié)議實(shí)例的消息解析函數(shù)模塊;其中,所述構(gòu)件動(dòng)態(tài)庫(kù)中,
[0013]所述初始化函數(shù)模塊用于提供對(duì)應(yīng)協(xié)議的實(shí)例指針,并執(zhí)行對(duì)應(yīng)協(xié)議的網(wǎng)絡(luò)傳輸?shù)某跏蓟僮鳎?br>[0014]所述網(wǎng)絡(luò)初始化接口用于根據(jù)該協(xié)議實(shí)例指針調(diào)用所述初始化函數(shù);
[0015]所述接收函數(shù)模塊,用于在初始化時(shí)啟動(dòng),并執(zhí)行對(duì)應(yīng)協(xié)議的所述網(wǎng)絡(luò)傳輸?shù)慕邮詹僮鳎?br>[0016]所述發(fā)送函數(shù)模塊,用于執(zhí)行對(duì)應(yīng)協(xié)議的所述網(wǎng)絡(luò)傳輸?shù)陌l(fā)送操作;
[0017]所述消息解析函數(shù)模塊,用于格式化數(shù)據(jù)。
[0018]所述構(gòu)件動(dòng)態(tài)庫(kù),每一個(gè)協(xié)議實(shí)例被按照INetTool類規(guī)定的接口進(jìn)行封裝。
[0019]所述至少一種協(xié)議的協(xié)議實(shí)例包括:TCP協(xié)議的協(xié)議實(shí)例、UDP協(xié)議的協(xié)議實(shí)例及自定義協(xié)議的協(xié)議實(shí)例。
[0020]所有協(xié)議的協(xié)議實(shí)例緩存在同一塊內(nèi)存中。
[0021]所述構(gòu)件通過(guò)定義父類,各協(xié)議實(shí)例繼承父類定義的接口實(shí)現(xiàn)網(wǎng)絡(luò)傳輸。
[0022]網(wǎng)絡(luò)傳輸系統(tǒng),包括:發(fā)送端,接收端以及上述任一種網(wǎng)絡(luò)傳輸服務(wù)構(gòu)件,其中,
[0023]所述發(fā)送端,用于通過(guò)所述網(wǎng)絡(luò)初始化接口調(diào)用所述構(gòu)件動(dòng)態(tài)庫(kù)中的初始化函數(shù)模塊,填充協(xié)議類型及初始化信息;通過(guò)所述數(shù)據(jù)發(fā)送接口調(diào)用所述構(gòu)件動(dòng)態(tài)庫(kù)中的發(fā)送函數(shù)模塊,填充接收方地址信息以及需要發(fā)送的內(nèi)容信息;
[0024]所述接收端,用于通過(guò)所述網(wǎng)絡(luò)初始化接口調(diào)用所述構(gòu)件動(dòng)態(tài)庫(kù)中的初始化函數(shù)模塊,填充協(xié)議類型及初始化信息;用于通過(guò)所述數(shù)據(jù)接收接口調(diào)用所述構(gòu)件動(dòng)態(tài)庫(kù)中的接收函數(shù)模塊,填充接收數(shù)據(jù)所需的內(nèi)存信息。
[0025]所述發(fā)送函數(shù)模塊,執(zhí)行在短報(bào)文的數(shù)據(jù)發(fā)送失敗時(shí),使用套接字在設(shè)定時(shí)間內(nèi)進(jìn)行嘗試重連,重連成功后將數(shù)據(jù)重新發(fā)送出去;在長(zhǎng)報(bào)文的數(shù)據(jù)發(fā)送時(shí),執(zhí)行在第一次發(fā)送的報(bào)文塊中增加了一個(gè)隨機(jī)碼作為報(bào)文標(biāo)識(shí),如果在傳輸過(guò)程中斷線,則在重連后在斷點(diǎn)處將該隨機(jī)碼重新加入到報(bào)文塊中進(jìn)行發(fā)送;
[0026]所述接收函數(shù)模塊,執(zhí)行當(dāng)接收到報(bào)文塊后,判斷報(bào)文塊的隨機(jī)碼是否與未接收完的長(zhǎng)報(bào)文的隨機(jī)碼相同,如果相同,則表明該報(bào)文塊為該長(zhǎng)報(bào)文的后續(xù)部分,接收端將報(bào)文塊進(jìn)行重組,從而還原成一個(gè)完整的長(zhǎng)報(bào)文。
[0027]本發(fā)明實(shí)施例提供了一種網(wǎng)絡(luò)傳輸服務(wù)構(gòu)件及網(wǎng)絡(luò)傳輸系統(tǒng),能夠針對(duì)網(wǎng)絡(luò)傳輸使用的協(xié)議預(yù)先定義在網(wǎng)絡(luò)傳輸中需要使用的初始化函數(shù)模塊、接收函數(shù)模塊以及發(fā)送函數(shù)模塊,及調(diào)用這些函數(shù)模塊的接口。這樣,當(dāng)發(fā)送端和接收端需要通過(guò)某一種具體的協(xié)議收發(fā)數(shù)據(jù)時(shí),發(fā)送端和接收端只需要通過(guò)相應(yīng)的接口調(diào)用相應(yīng)的函數(shù),并給出針對(duì)當(dāng)前數(shù)據(jù)發(fā)送的參數(shù)即可,而無(wú)需進(jìn)行針對(duì)當(dāng)前使用協(xié)議的完整的封裝、解封裝和對(duì)應(yīng)協(xié)議的處理過(guò)程,比如,發(fā)送端無(wú)需執(zhí)行針對(duì)當(dāng)前使用協(xié)議的數(shù)據(jù)封裝過(guò)程,而是由網(wǎng)絡(luò)傳輸服務(wù)構(gòu)件中預(yù)先定義的發(fā)送函數(shù)模塊來(lái)執(zhí)行,接收端無(wú)需執(zhí)行針對(duì)當(dāng)前使用協(xié)議的數(shù)據(jù)解封裝過(guò)程,而是由網(wǎng)絡(luò)傳輸服務(wù)構(gòu)件中預(yù)先定義的接收函數(shù)模塊來(lái)執(zhí)行。因此,能夠?yàn)橛脩籼峁┙y(tǒng)一的網(wǎng)絡(luò)傳輸服務(wù),無(wú)論各協(xié)議網(wǎng)接口是否不同,發(fā)送端和接收端的處理都很簡(jiǎn)單。另外,當(dāng)系統(tǒng)需要迀移、網(wǎng)絡(luò)協(xié)議需要更換時(shí),也能夠減少研發(fā)周期。
【附圖說(shuō)明】
[0028]圖1是本發(fā)明一個(gè)實(shí)施例中網(wǎng)絡(luò)傳輸服務(wù)構(gòu)件的結(jié)構(gòu)示意圖。
[0029]圖2是本發(fā)明一個(gè)實(shí)施例中協(xié)議類之間的依賴關(guān)系。
[0030]圖3是本發(fā)明一個(gè)實(shí)施例中網(wǎng)絡(luò)傳輸系統(tǒng)的結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0031]下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述。顯然,所描述的實(shí)施例僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例。基于本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
[0032]本發(fā)明一個(gè)實(shí)施例提出了一種網(wǎng)絡(luò)傳輸服務(wù)構(gòu)件,參見(jiàn)圖1,包括:
[0033]構(gòu)件動(dòng)態(tài)庫(kù)101,存儲(chǔ)有網(wǎng)絡(luò)傳輸使用的至少一種協(xié)議的協(xié)議實(shí)例,每一個(gè)協(xié)議實(shí)例被按照規(guī)定的接口進(jìn)行封裝,且每一個(gè)協(xié)議實(shí)例包括與該協(xié)議實(shí)例對(duì)應(yīng)的初始化函數(shù)模塊、接收函數(shù)模塊以及發(fā)送函數(shù)模塊;
[0034]網(wǎng)絡(luò)初始化接口 102,提供用于調(diào)用所述構(gòu)件動(dòng)態(tài)庫(kù)101中目標(biāo)協(xié)議對(duì)應(yīng)的初始化函數(shù)模塊的接口;
[0035]數(shù)據(jù)發(fā)送接口 103,提供用于調(diào)用所述構(gòu)件動(dòng)態(tài)庫(kù)101中目標(biāo)協(xié)議對(duì)應(yīng)的發(fā)送函數(shù)模塊的接口;
[0036]數(shù)據(jù)接收接口 104,提供用于調(diào)用所述構(gòu)件動(dòng)態(tài)庫(kù)101中目標(biāo)協(xié)議對(duì)應(yīng)的接收函數(shù)模塊的接口;
[0037]外部協(xié)議加載接口 105,提供用于向所述構(gòu)件動(dòng)態(tài)庫(kù)101中加載新增協(xié)議的實(shí)例的接口。
[0038]可見(jiàn),本發(fā)明實(shí)施例提供的網(wǎng)絡(luò)傳輸服務(wù)構(gòu)件,能夠針對(duì)網(wǎng)絡(luò)傳輸使用的協(xié)議預(yù)先存儲(chǔ)在網(wǎng)絡(luò)傳輸中需要使用的初始化函數(shù)模塊、接收函數(shù)模塊以及發(fā)送函數(shù)模塊,并提供調(diào)用這些函數(shù)模塊的接口。這樣,使用該網(wǎng)絡(luò)傳輸服務(wù)構(gòu)件,當(dāng)發(fā)送端和接收端需要通過(guò)某一種具體的協(xié)議收發(fā)數(shù)據(jù)時(shí),發(fā)送端和接收端只需要通過(guò)相應(yīng)的接口調(diào)用相應(yīng)的函數(shù),并給出針對(duì)當(dāng)前數(shù)據(jù)發(fā)送的參數(shù)即可,而無(wú)需進(jìn)行針對(duì)當(dāng)前使用協(xié)議的完整的封裝、解封裝和對(duì)應(yīng)協(xié)議的處理過(guò)程,服務(wù)是由網(wǎng)絡(luò)傳輸服務(wù)構(gòu)件中預(yù)先定義的函數(shù)模塊來(lái)執(zhí)行。因此,能夠?yàn)橛脩籼峁┙y(tǒng)一的網(wǎng)絡(luò)傳輸服務(wù)。
[0039]在本發(fā)明的一個(gè)實(shí)施例中,構(gòu)件動(dòng)態(tài)庫(kù)101中,每一個(gè)協(xié)議實(shí)例進(jìn)一步包括對(duì)應(yīng)該協(xié)議實(shí)例的消息解析函數(shù)模塊;其中,所述構(gòu)件動(dòng)態(tài)庫(kù)101中,
[0040]所述初始化函數(shù)模塊,比如NetTool::1nit O函數(shù),用于提供對(duì)應(yīng)協(xié)議的實(shí)例指針,并執(zhí)行對(duì)應(yīng)協(xié)議的網(wǎng)絡(luò)傳輸?shù)某跏蓟僮鳎?br>[0041]所述網(wǎng)絡(luò)初始化接口 102用于根據(jù)該協(xié)議實(shí)例指針調(diào)用所述初始化函數(shù);
[0042]所述接收函數(shù)模塊,比如NetTool::RecvMsgO函數(shù),用于在初始化時(shí)啟動(dòng),并執(zhí)行對(duì)應(yīng)協(xié)議的所述網(wǎng)絡(luò)傳輸?shù)慕邮詹僮鳎?br>[0043]所述發(fā)送函數(shù)模塊,比如NetTool:: SendMsg O函數(shù),用于執(zhí)行對(duì)應(yīng)協(xié)議的所述網(wǎng)絡(luò)傳輸?shù)陌l(fā)送操作;
[0044]所述消息解析函數(shù)模塊,用于格式化數(shù)據(jù)。
[0045]在本發(fā)明的一個(gè)實(shí)施例中,所述構(gòu)件動(dòng)態(tài)庫(kù)101,每一個(gè)協(xié)議實(shí)例被按照INetTool類規(guī)定的接口進(jìn)行封裝。
[0046]在本發(fā)明的一個(gè)實(shí)施例中,可以預(yù)先在構(gòu)件動(dòng)態(tài)庫(kù)101中存儲(chǔ)已有的所有網(wǎng)絡(luò)傳輸協(xié)議的協(xié)議實(shí)例,比如包括TCP協(xié)議的協(xié)議實(shí)例、UDP協(xié)議的協(xié)議實(shí)例。
[0047]在本發(fā)明的一個(gè)實(shí)施例中,還可以通過(guò)外部協(xié)議加載接口 105向構(gòu)件動(dòng)態(tài)庫(kù)101中新增并存儲(chǔ)自定義協(xié)議的協(xié)議實(shí)例。比如,用戶自定義協(xié)議需要用戶按照父類(比如INetTool類)定義的接口實(shí)現(xiàn)協(xié)議實(shí)例,自定義協(xié)議需要實(shí)現(xiàn)的接口及功能如下:
[0048](自定義協(xié)議類)Init():初始化自定義協(xié)議所需的網(wǎng)絡(luò)環(huán)境;
[0049](自定義協(xié)議類)SendMsgO:實(shí)現(xiàn)自定義協(xié)議發(fā)送信息的過(guò)程;
[0050](自定義協(xié)議類)RecvO:接收線程函數(shù),實(shí)現(xiàn)自定義協(xié)議下的接收過(guò)程,接收到完整報(bào)文后使用父類定義的INetTool: =MsgInQueueO函數(shù)將報(bào)文進(jìn)行存儲(chǔ);
[0051]上述三個(gè)功能實(shí)現(xiàn)后,用戶實(shí)例化一個(gè)自定義協(xié)