欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種支持ipv4和ipv6雙協(xié)議棧網(wǎng)絡(luò)通信模塊的實現(xiàn)方法

文檔序號:7962815閱讀:216來源:國知局
專利名稱:一種支持ipv4和ipv6雙協(xié)議棧網(wǎng)絡(luò)通信模塊的實現(xiàn)方法
技術(shù)領(lǐng)域
本發(fā)明涉及計算機(jī)網(wǎng)絡(luò)通信技術(shù)領(lǐng)域,尤其涉及一種支持互聯(lián)網(wǎng)協(xié)議第4版(Internet Protocol version 4,IPv4)和互聯(lián)網(wǎng)協(xié)議第6版(InternetProtocol version 6,IPv6)雙協(xié)議棧網(wǎng)絡(luò)通信模塊的實現(xiàn)方法。
背景技術(shù)
現(xiàn)有的互聯(lián)網(wǎng)主要是在IPv4協(xié)議的基礎(chǔ)上運行的。IPv6協(xié)議是下一版本的互聯(lián)網(wǎng)協(xié)議,它的提出最初是因為隨著互聯(lián)網(wǎng)的迅速發(fā)展,IPv4協(xié)議定義的有限地址空間將被耗盡,而地址空間的不足必將影響互聯(lián)網(wǎng)的進(jìn)一步發(fā)展。為了徹底解決互聯(lián)網(wǎng)的地址危機(jī),Internet工程任務(wù)組(IETF)在20世紀(jì)90年代中期提出了擁有128位地址的IPv6互聯(lián)網(wǎng)協(xié)議,并在1998年進(jìn)行了進(jìn)一步的標(biāo)準(zhǔn)化工作。除了對地址空間的擴(kuò)展以外,還對IPv6協(xié)議地址的結(jié)構(gòu)重新做了定義,采用了與IPv4協(xié)議中使用的CIDR類似的方法分配地址。IPv6協(xié)議還提供了自動配置以及對移動性、安全性和可擴(kuò)展性的更好支持等新的特性。
目前,IPv6協(xié)議已經(jīng)成熟并形成了Internet標(biāo)準(zhǔn)(草案)請求注解(Request for Comments,RFC)文本,作為IPv4協(xié)議的唯一取代者的地位已經(jīng)得到了世界的一致認(rèn)可。國內(nèi)外各大通信設(shè)備廠商都在IPv6協(xié)議的應(yīng)用與研究方面投入了大量的人力和財力,并開發(fā)出了相應(yīng)的軟硬件。例如,早在2001年美國思科公司就正式在其路由器、交換機(jī)上支持IPv6協(xié)議,如今已經(jīng)積累了豐富的實踐經(jīng)驗。當(dāng)今絕大多數(shù)Unix/Linux系統(tǒng)也都支持IPv6協(xié)議,它們都可以實現(xiàn)IPv4/IPv6雙棧運行,有的還具有手工或自動隧道功能。美國微軟公司從Win2000開始推出IPv6 Tech Preview,并在Windows XP上內(nèi)置了商用IPv6協(xié)議,6.0以上版本的IE軟件也支持IPv6協(xié)議。
我國政府對互聯(lián)網(wǎng)信息技術(shù)的發(fā)展和應(yīng)用非常重視,啟動了一系列的研究項目。2002年,作為全球IPv6論壇的成員單位,BII與信息產(chǎn)業(yè)部電信研究院電信傳輸所聯(lián)合發(fā)起并啟動了IPv6電信試驗網(wǎng)(IPv6 TelecomTrial Net,6TNet),開展了許多開拓性的研究。2003年8月,由發(fā)改委、工程院、信息產(chǎn)業(yè)部和教育部以及六大運營商等組織的國家下一代互聯(lián)網(wǎng)(China Next Generation Internet,CNGI)項目目前正在進(jìn)行當(dāng)中,且已經(jīng)建成初期的試驗網(wǎng)??傊琁Pv6協(xié)議的應(yīng)用環(huán)境已經(jīng)逐步成熟,相信很快會進(jìn)入企業(yè)應(yīng)用。
當(dāng)然,盡管從長遠(yuǎn)看IPv6協(xié)議有利于互聯(lián)網(wǎng)的持續(xù)和長久發(fā)展,但其也并非十全十美、一勞永逸,也不可能解決所有問題。IPv6協(xié)議只能在發(fā)展中不斷完善,不可能在一夜之間發(fā)生,過渡需要時間和成本。另外,IPv4和IPv6協(xié)議并不兼容,因此以二者之一為標(biāo)準(zhǔn)設(shè)計的程序和系統(tǒng),無法與以另一個為標(biāo)準(zhǔn)設(shè)計的程序和系統(tǒng)進(jìn)行通信。
現(xiàn)在普遍認(rèn)同的觀點是,IPv6協(xié)議不可能在短時間內(nèi)取代IPv4協(xié)議,IPv6和IPv4協(xié)議將長期共存。原因主要有以下兩個方面一方面,隨著IPv6協(xié)議環(huán)境的日益成熟,要求現(xiàn)有的廣泛存在的大量的基于IPv4協(xié)議的軟件和系統(tǒng)需要進(jìn)行移植和升級的工作,以使之可以支持IPv6協(xié)議。
另一方面,新開發(fā)或者新出現(xiàn)的應(yīng)用在設(shè)計和實現(xiàn)的過程中充分考慮對IPv6協(xié)議支持的同時,也要求不能忽略對IPv4協(xié)議環(huán)境下運行的滿足。
由于上述兩方面的原因,決定了在IPv4與IPv6協(xié)議將長期共存的今天,在網(wǎng)絡(luò)通信相關(guān)的程序設(shè)計和開發(fā)過程中需要設(shè)計一個方便簡潔的過渡方法,使得應(yīng)用在網(wǎng)絡(luò)升級的過程中可以同時在IPv4和IPv6協(xié)議環(huán)境下工作。
盡管現(xiàn)有的網(wǎng)絡(luò)軟件/系統(tǒng)大多僅支持以IPv4協(xié)議通信,但是目前已經(jīng)存在一定數(shù)量的網(wǎng)絡(luò)軟件/系統(tǒng)可以做到同時支持以IPv4和IPv6協(xié)議通信??蛇z憾的是,他們并未能提供一個較通用的、能夠同時支持IPv4/IPv6協(xié)議通信功能的接口,以使得網(wǎng)絡(luò)應(yīng)用程序開發(fā)者可以無需關(guān)心IPv4和IPv6協(xié)議通信的底層細(xì)節(jié)就能輕松編制支持IPv4/IPv6雙棧通信的程序。
當(dāng)前所存在的支持V4/V6雙棧通信功能的設(shè)計方法大致可分為以下兩種一種是混合方式,一種是分離方式。
在混合方式中,設(shè)計者將IPv4和IPv6兩種通信功能在一個模塊內(nèi)實現(xiàn),即在模塊內(nèi)部處理IPv4與IPv6協(xié)議通信的差異。這種方式可以用于全新的支持V4/V6雙棧通信的網(wǎng)絡(luò)軟件/系統(tǒng)的設(shè)計與開發(fā),但是并不能很好的滿足現(xiàn)有的基于IPv4協(xié)議的網(wǎng)絡(luò)軟件/系統(tǒng)向IPv6協(xié)議環(huán)境下的移植與升級的要求。
在分離方式中,設(shè)計者分別應(yīng)用兩個單獨的通信功能模塊實現(xiàn)所需的IPv4通信功能和IPv6通信功能,應(yīng)用層網(wǎng)絡(luò)程序開發(fā)者需要在代碼書寫過程中自己負(fù)責(zé)區(qū)分IPv4和IPv6協(xié)議功能接口的差異。這種方式有利于現(xiàn)有的基于IPv4協(xié)議的網(wǎng)絡(luò)軟件/系統(tǒng)的向IPv6協(xié)議環(huán)境的移植與升級,但是對于新的網(wǎng)絡(luò)應(yīng)用開發(fā)而言其尤其不便,應(yīng)用層網(wǎng)絡(luò)程序開發(fā)者在代碼實現(xiàn)過程中,需要充分熟悉底層的IPv4和IPv6協(xié)議的通信細(xì)節(jié)以及功能接口的差異。
因此,在向IPv6協(xié)議過渡期間,為了更好的滿足的現(xiàn)有網(wǎng)絡(luò)應(yīng)用程序的移植與升級以及新的網(wǎng)絡(luò)應(yīng)用程序的設(shè)計與實現(xiàn),迫切需要有一種好的設(shè)計方法,一套統(tǒng)一的同時支持IPv4和IPv6的雙協(xié)議棧的網(wǎng)絡(luò)通信模塊,其最終可使得網(wǎng)絡(luò)通信程序開發(fā)人員,尤其是僅關(guān)注上層應(yīng)用的網(wǎng)絡(luò)應(yīng)用層業(yè)務(wù)開發(fā)人員,無需關(guān)心冗繁的Socket參數(shù)選擇和設(shè)定以及底層具體的網(wǎng)絡(luò)通信細(xì)節(jié)。

發(fā)明內(nèi)容
(一)要解決的技術(shù)問題針對上述現(xiàn)有技術(shù)存在的不足,本發(fā)明的主要目的在于提供一種支持IPv4和IPv6雙協(xié)議棧網(wǎng)絡(luò)通信模塊的實現(xiàn)方法,以滿足在開發(fā)支持IPv4和IPv6雙協(xié)議棧網(wǎng)絡(luò)應(yīng)用程序或系統(tǒng)過程中對統(tǒng)一底層通信功能接口的迫切需求。
(二)技術(shù)方案為達(dá)到上述目的,本發(fā)明的技術(shù)方案是這樣實現(xiàn)的一種支持IPv4和IPv6雙協(xié)議棧網(wǎng)絡(luò)通信模塊的實現(xiàn)方法,該方法包括
A、設(shè)計和實現(xiàn)支持IPv4和IPv6協(xié)議網(wǎng)絡(luò)通信程序設(shè)計所需的抽象接口父類;B、在所實現(xiàn)抽象接口父類的基礎(chǔ)上,分別設(shè)計和實現(xiàn)支持IPv4和IPv6協(xié)議通信功能的接口類。
所述網(wǎng)絡(luò)通信模塊用于完成網(wǎng)絡(luò)通信中客戶端功能部分,且網(wǎng)絡(luò)通信模塊在Linux平臺下設(shè)計和實現(xiàn),所述步驟A包括利用面向?qū)ο蟮脑O(shè)計思想,根據(jù)上層用戶的實際需求為抽象接口父類至少設(shè)計如下公共Public成員連接遠(yuǎn)程服務(wù)器的接口ConnectServ、斷開與該遠(yuǎn)程服務(wù)器之間連接的接口DisConnectServ、發(fā)送數(shù)據(jù)的接口SendData、接收數(shù)據(jù)的接口RcvData、設(shè)置建立連接超時時間的接口SetTimeout和釋放所有緩沖區(qū)的接口ReleaseBuf,實現(xiàn)支持IPv4和IPv6協(xié)議網(wǎng)絡(luò)通信程序設(shè)計所需的抽象接口父類CClient。
所述抽象接口父類CClient的Public成員至少包括以下接口連接遠(yuǎn)程服務(wù)器的接口ConnectServ、斷開與該遠(yuǎn)程服務(wù)器之間連接的接口DisConnectServ、發(fā)送數(shù)據(jù)的接口SendData、接收數(shù)據(jù)的接口RcvData、設(shè)置建立連接超時時間的接口SetTimeout和釋放所有緩沖區(qū)的接口ReleaseBuf。
所述網(wǎng)絡(luò)通信模塊用于完成網(wǎng)絡(luò)通信中客戶端功能部分,且網(wǎng)絡(luò)通信模塊在windows平臺下設(shè)計和實現(xiàn),所述步驟A包括利用面向?qū)ο蟮脑O(shè)計思想,根據(jù)上層用戶的實際需求為抽象接口父類至少設(shè)計如下Public成員檢查套接字winsock是否已經(jīng)初始化的接口IsInit、初始化winsock的接口Init、連接遠(yuǎn)程服務(wù)器的接口ConnectServ、斷開與該遠(yuǎn)程服務(wù)器之間連接的接口DisConnectServ、發(fā)送數(shù)據(jù)的接口SendData、接收數(shù)據(jù)的接口RcvData、設(shè)置建立連接超時時間的接口SetTimeout和釋放所有緩沖區(qū)的接口ReleaseBuf,實現(xiàn)支持IPv4和IPv6協(xié)議網(wǎng)絡(luò)通信程序設(shè)計所需的抽象接口父類CClient。
所述抽象接口父類CClient的Public成員至少包括以下接口檢查套接字winsock是否已經(jīng)初始化的接口IsInit、初始化winsock的接口Init、連接遠(yuǎn)程服務(wù)器的接口ConnectServ、斷開與該遠(yuǎn)程服務(wù)器之間連接的接口DisConnectServ、發(fā)送數(shù)據(jù)的接口SendData、接收數(shù)據(jù)的接口RcvData、設(shè)置建立連接超時時間的接口SetTimeout和釋放所有緩沖區(qū)的接口ReleaseBuf。
步驟B中所述設(shè)計和實現(xiàn)支持IPv4協(xié)議通信功能的接口類包括利用面向?qū)ο蟮脑O(shè)計思想,根據(jù)抽象接口父類CClient的規(guī)范至少設(shè)計IPv4下的發(fā)送和接收數(shù)據(jù)套接字的屬性SOCKET mySocket、存儲當(dāng)前連接端口號的屬性unsigned int port、存儲消息頭的屬性SMsgHead MsgHead、存儲當(dāng)前序列號的屬性unsigned int CurrSeq、檢查Winsock是否已經(jīng)初始化的接口bool HasInit、檢查套接字狀態(tài)超時時間的接口timeval timeout、存放接收數(shù)據(jù)鏈表的接口CList Result_BuftList、為消息體加消息頭的組包接口SData MakePackage和將消息體和消息頭分開的拆包接口charunpack,實現(xiàn)支持IPv4協(xié)議網(wǎng)絡(luò)通信程序設(shè)計所需的抽象接口類CClientV4。
步驟B中所述設(shè)計和實現(xiàn)支持IPv6協(xié)議通信功能的接口類包括利用面向?qū)ο蟮脑O(shè)計思想,根據(jù)抽象接口父類CClient的規(guī)范至少設(shè)計IPv6下的發(fā)送和接收數(shù)據(jù)套接字的屬性SOCKET mySocket、存儲當(dāng)前連接端口號的屬性unsigned int port、存儲消息頭的屬性SMsgHead MsgHead、存儲當(dāng)前序列號的屬性unsigned int CurrSeq、檢查Winsock是否已經(jīng)初始化的接口bool HasInit、檢查套接字狀態(tài)超時時間的接口timeval timeout、存放接收數(shù)據(jù)鏈表的接口CList Result_BuffList、為消息體加消息頭的組包接口SData MakePackage和將消息體和消息頭分開的拆包接口charunPack,實現(xiàn)支持IPv6協(xié)議網(wǎng)絡(luò)通信程序設(shè)計所需的抽象接口類CClientV6。
所述網(wǎng)絡(luò)通信模塊用于完成網(wǎng)絡(luò)通信中服務(wù)器端功能部分,所述步驟A包括利用面向?qū)ο蟮脑O(shè)計思想,根據(jù)上層用戶的實際需求為抽象接口父類至少設(shè)計如下公共Public成員用于啟動線程的接口Start、用于暫停線程的接口Stop,用于終止線程并釋放資源的接口Release、用于獲取接收數(shù)據(jù)包鏈表中第一個數(shù)據(jù)包的接口GetFirstRcvData、用于刪除接收數(shù)據(jù)包鏈表中第一個數(shù)據(jù)包的接口DelFirstRcvData、用于設(shè)置超時時間的接口SetTimeout和用于設(shè)置偵聽最大連接數(shù)的接口SetMaxConn,實現(xiàn)支持IPv4和IPv6協(xié)議網(wǎng)絡(luò)通信程序設(shè)計所需的抽象接口父類CSrvThread。
所述抽象接口父類CSrvThread的Public成員至少包括以下接口用于啟動線程的接口Start、用于暫停線程的接口Stop,用于終止線程并釋放資源的接口Release、用于獲取接收數(shù)據(jù)包鏈表中第一個數(shù)據(jù)包的接口GetFirstRcvData、用于刪除接收數(shù)據(jù)包鏈表中第一個數(shù)據(jù)包的接口DelFirstRcvData、用于設(shè)置超時時間的接口SetTimeout和用于設(shè)置偵聽最大連接數(shù)的接口SetMaxConn。
步驟B中所述設(shè)計和實現(xiàn)支持IPv4協(xié)議通信功能的接口類包括利用面向?qū)ο蟮脑O(shè)計思想,根據(jù)抽象接口父類CSrvThread的規(guī)范至少設(shè)計IPv4下的偵聽套接字的屬性SOCKET LstSocket、默認(rèn)值為系統(tǒng)所允許最大連接數(shù)的屬性int MaxConn、存儲本地地址的屬性sockaddr LocalAddr、存儲本地端口的屬性unsigned int LocalPort、用于表明已開啟接收數(shù)據(jù)線程鏈表的屬性CList ThreadList、存放接收數(shù)據(jù)包鏈表的屬性CListRcvData_List、初始化winsock并綁定本地地址開始監(jiān)聽的接口boolStartUp和終止ThreadList中線程并釋放空間的接口void CleanUp,實現(xiàn)支持IPv4協(xié)議網(wǎng)絡(luò)通信程序設(shè)計所需的抽象接口類CSrvLstV4Thread。
步驟B中所述設(shè)計和實現(xiàn)支持IPv6協(xié)議通信功能的接口類包括利用面向?qū)ο蟮脑O(shè)計思想,根據(jù)抽象接口父類CSrvThread的規(guī)范至少設(shè)計IPv6下的偵聽套接字的屬性SOCKET LstSocket、默認(rèn)值為系統(tǒng)所允許最大連接數(shù)的屬性int MaxConn、存儲本地端口的屬性unsigned intLocalPort、用于表明已開啟接收數(shù)據(jù)線程鏈表的屬性CList ThreadList、存放接收數(shù)據(jù)包鏈表的屬性CList RcvData_List、初始化winsock并綁定本地地址開始監(jiān)聽的接口bool StartUp和終止ThreadList中線程并釋放空間的接口void CleanUp,實現(xiàn)支持IPv4協(xié)議網(wǎng)絡(luò)通信程序設(shè)計所需的抽象接口類CSrvLstV6Thread。
步驟B中所述設(shè)計和實現(xiàn)支持IPv4和IPv6協(xié)議通信功能的接口類,根據(jù)IPv4和IPv6底層Socket函數(shù)接口和使用方法的不同,分別繼承步驟A中所設(shè)計和實現(xiàn)的抽象接口父類,且沿照統(tǒng)一的接口格式進(jìn)行。
(三)有益效果從上述技術(shù)方案可以看出,本發(fā)明具有以下有益效果1、利用本發(fā)明,通過設(shè)計和實現(xiàn)支持IPv4和IPv6協(xié)議網(wǎng)絡(luò)通信程序設(shè)計所需的抽象接口父類,然后在所實現(xiàn)抽象接口父類的基礎(chǔ)上,分別設(shè)計和實現(xiàn)支持IPv4和IPv6協(xié)議通信功能的接口類,提供了一種支持IPv4和IPv6雙協(xié)議棧網(wǎng)絡(luò)通信模塊的實現(xiàn)方法,滿足了在開發(fā)支持IPv4和IPv6雙協(xié)議棧網(wǎng)絡(luò)應(yīng)用程序或系統(tǒng)過程中,對統(tǒng)一底層通信功能接口的迫切需求。
2、利用本發(fā)明,通過采用本發(fā)明提供的支持IPv4和IPv6雙協(xié)議棧的網(wǎng)絡(luò)通信模塊,很好的屏蔽了底層利用IPv4協(xié)議與IPv6協(xié)議通信的差異,使上層開發(fā)人員能直接使用該套統(tǒng)一的接口進(jìn)行開發(fā),而無需關(guān)心和處理IPv4協(xié)議與IPv6協(xié)議通信的差別。
3、本發(fā)明整合了混合方式和分離方式等現(xiàn)有雙協(xié)議棧通信程序設(shè)計方法各自的優(yōu)點,應(yīng)用面向?qū)ο蟮乃枷牒头椒?,通過將按照統(tǒng)一接口的要求分別獨立實現(xiàn)的IPv4協(xié)議和IPv6協(xié)議通信功能模塊封裝成為通用的網(wǎng)絡(luò)通信模塊,使網(wǎng)絡(luò)通信程序開發(fā)人員,尤其是僅關(guān)注上層應(yīng)用的網(wǎng)絡(luò)應(yīng)用層業(yè)務(wù)開發(fā)人員,無需關(guān)心冗繁的Socket參數(shù)選擇和設(shè)定以及底層具體的網(wǎng)絡(luò)通信細(xì)節(jié),滿足了在開發(fā)支持IPv4和IPv6雙協(xié)議棧網(wǎng)絡(luò)應(yīng)用程序或系統(tǒng)過程中,對統(tǒng)一底層通信功能接口的迫切需求。
4、本發(fā)明提供了一套完整的、核心的且簡單易用的API接口,網(wǎng)絡(luò)通信程序開發(fā)人員利用這些API接口,無需關(guān)心冗繁的Socket參數(shù)選擇和設(shè)定以及底層具體的網(wǎng)絡(luò)通信細(xì)節(jié),可以直接開發(fā)支持IPv4和IPv6雙協(xié)議棧網(wǎng)絡(luò)應(yīng)用程序或系統(tǒng),大大方便了網(wǎng)絡(luò)通信程序開發(fā)人員的使用,非常有利于本發(fā)明的廣泛推廣和應(yīng)用。
5、在本發(fā)明中,多數(shù)通信操作接口被設(shè)計和實現(xiàn)為virtual類型,以支持和實現(xiàn)在具體應(yīng)用中的動態(tài)綁定。同時,上層應(yīng)用程序開發(fā)者還可以根據(jù)本發(fā)明的基本思想,針對自己的應(yīng)用程序通信協(xié)議,在本套基本接口的基礎(chǔ)上輕松地進(jìn)行擴(kuò)展。因此,非常有利于本發(fā)明的廣泛推廣和應(yīng)用。
6、利用本發(fā)明,在用戶需要的情況下,可以以較小的代價實現(xiàn)將現(xiàn)有只支持IPv4協(xié)議通信的應(yīng)用軟件或系統(tǒng)升級為同時支持IPv4和IPv6協(xié)議通信。


圖1為本發(fā)明設(shè)計支持IPv4和IPv6雙協(xié)議棧網(wǎng)絡(luò)通信模塊總體技術(shù)方案的實現(xiàn)流程圖。
具體實施例方式
為使本發(fā)明的目的、技術(shù)方案和優(yōu)點更加清楚明白,以下結(jié)合具體實施例,并參照附圖,對本發(fā)明進(jìn)一步詳細(xì)說明。
本發(fā)明的核心思想是抽象、提煉、設(shè)計并實現(xiàn)一組通用的、可完成底層網(wǎng)絡(luò)通信功能的抽象接口父類,然后在所實現(xiàn)抽象接口父類的基礎(chǔ)上,分別設(shè)計和實現(xiàn)支持IPv4和IPv6協(xié)議通信功能的接口類,實現(xiàn)了支持IPv4和IPv6雙協(xié)議棧的網(wǎng)絡(luò)通信模塊。
如圖1所示,本發(fā)明設(shè)計支持IPv4和IPv6雙協(xié)議棧網(wǎng)絡(luò)通信模塊總體技術(shù)方案的實現(xiàn)流程圖,該方法包括以下步驟步驟101設(shè)計和實現(xiàn)支持IPv4和IPv6協(xié)議網(wǎng)絡(luò)通信程序設(shè)計所需的抽象接口父類;步驟102在所實現(xiàn)抽象接口父類的基礎(chǔ)上,分別設(shè)計和實現(xiàn)支持IPv4和IPv6協(xié)議通信功能的接口類。
上述步驟101中所述設(shè)計和實現(xiàn)支持IPv4和IPv6協(xié)議網(wǎng)絡(luò)通信程序設(shè)計所需的抽象接口父類,根據(jù)具體使用中擔(dān)當(dāng)?shù)姆?wù)器或客戶端角色的不同,可分為以下兩種情況進(jìn)行一種情況是網(wǎng)絡(luò)通信模塊用于完成網(wǎng)絡(luò)通信中客戶端功能部分,另一種情況是網(wǎng)絡(luò)通信模塊用于完成網(wǎng)絡(luò)通信中服務(wù)器端功能部分。
對于網(wǎng)絡(luò)通信模塊用于完成網(wǎng)絡(luò)通信中客戶端功能部分,本發(fā)明中網(wǎng)絡(luò)通信模塊可以在Linux平臺下設(shè)計和實現(xiàn),也可以在windows平臺下設(shè)計和實現(xiàn)。
當(dāng)網(wǎng)絡(luò)通信模塊在Linux平臺下設(shè)計和實現(xiàn)時,所述步驟101包括利用面向?qū)ο蟮脑O(shè)計思想,根據(jù)上層用戶的實際需求為抽象接口父類至少設(shè)計如下公共的Public成員連接遠(yuǎn)程服務(wù)器的接口ConnectServ、斷開與該遠(yuǎn)程服務(wù)器之間連接的接口DisConnectServ、發(fā)送數(shù)據(jù)的接口SendData、接收數(shù)據(jù)的接口RcvData、設(shè)置建立連接超時時間的接口SetTimeout和釋放所有緩沖區(qū)的接口ReleaseBuf,實現(xiàn)支持IPv4和IPv6協(xié)議網(wǎng)絡(luò)通信程序設(shè)計所需的抽象接口父類CClient。
所述抽象接口父類CClient的Public成員至少包括以下接口連接遠(yuǎn)程服務(wù)器的接口ConnectServ、斷開與該遠(yuǎn)程服務(wù)器之間連接的接口DisConnectServ、發(fā)送數(shù)據(jù)的接口SendData、接收數(shù)據(jù)的接口RcvData、設(shè)置建立連接超時時間的接口SetTimeout和釋放所有緩沖區(qū)的接口ReleaseBuf。
當(dāng)網(wǎng)絡(luò)通信模塊在windows平臺下設(shè)計和實現(xiàn)時,所述步驟101包括利用面向?qū)ο蟮脑O(shè)計思想,根據(jù)上層用戶的實際需求為抽象接口父類至少設(shè)計如下公共的Public成員檢查套接字winsock是否已經(jīng)初始化的接口IsInit、初始化winsock的接口Init、連接遠(yuǎn)程服務(wù)器的接口ConnectServ、斷開與該遠(yuǎn)程服務(wù)器之間連接的接口DisConnectServ、發(fā)送數(shù)據(jù)的接口SendData、接收數(shù)據(jù)的接口RcvData、設(shè)置建立連接超時時間的接口SetTimeout和釋放所有緩沖區(qū)的接口ReleaseBuf,實現(xiàn)支持IPv4和IPv6協(xié)議網(wǎng)絡(luò)通信程序設(shè)計所需的抽象接口父類CClient。
所述抽象接口父類CClient的Public成員至少包括以下接口檢查套接字winsock是否已經(jīng)初始化的接口IsInit、初始化winsock的接口Init、連接遠(yuǎn)程服務(wù)器的接口ConnectServ、斷開與該遠(yuǎn)程服務(wù)器之間連接的接口DisConnectServ、發(fā)送數(shù)據(jù)的接口SendData、接收數(shù)據(jù)的接口RcvData、設(shè)置建立連接超時時間的接口SetTimeout和釋放所有緩沖區(qū)的接口ReleaseBuf。
下面以C++語言為例,對設(shè)計和實現(xiàn)支持IPv4和IPv6協(xié)議網(wǎng)絡(luò)通信程序設(shè)計所需的抽象接口父類CClient進(jìn)行詳細(xì)說明。class CClient{Private:……………………Public:
CClient();
~CClient();
virtual bool IsInit(); //檢查winsock是否初始化了virtual void Init();//初始化winsockvirtual char*ConnectServ(char*IP,int_port); //連接服務(wù)器virtual bool DisConnectServ(int port);//斷開連接,并釋放socket所占資源virtual void SendData(char*data,int len); //發(fā)送數(shù)據(jù)virtual char*RcvData(); //接收數(shù)據(jù)virtual void SetTimeout(int sec,int usec); //設(shè)置連接超時時間virtual void ReleaseBuf(char*buff); //釋放所有的緩沖區(qū)…………};
其中,多數(shù)通信操作接口被設(shè)計和實現(xiàn)為virtual類型,以支持和實現(xiàn)在具體應(yīng)用中的動態(tài)綁定。同時,上層應(yīng)用程序開發(fā)者還可以根據(jù)本發(fā)明的基本思想,針對自己的應(yīng)用程序通信協(xié)議,在本套基本接口的基礎(chǔ)上輕松地進(jìn)行擴(kuò)展。
對于網(wǎng)絡(luò)通信模塊用于完成網(wǎng)絡(luò)通信中客戶端功能部分,步驟102中所述設(shè)計和實現(xiàn)支持IPv4協(xié)議通信功能的接口類包括利用面向?qū)ο蟮脑O(shè)計思想,根據(jù)抽象接口父類CClient的規(guī)范至少設(shè)計IPv4下的發(fā)送和接收數(shù)據(jù)套接字的屬性SOCKET mySocket、存儲當(dāng)前連接端口號的屬性unsigned int port、存儲消息頭的屬性SMsgHeadMsgHead、存儲當(dāng)前序列號的屬性unsigned int CurrSeq、檢查Winsock是否已經(jīng)初始化的接口bool HasInit、檢查套接字狀態(tài)超時時間的接口timevaltimeout、存放接收數(shù)據(jù)鏈表的接口CList Result_BuffList、為消息體加消息頭的組包接口SData MakePackage和將消息體和消息頭分開的拆包接口char unPack,實現(xiàn)支持IPv4協(xié)議網(wǎng)絡(luò)通信程序設(shè)計所需的抽象接口類CClientV4。
支持IPv4協(xié)議通信功能的接口類CClientV4繼承自抽象接口父類CClient,接口類CClientV4所提供的接口方法與抽象接口父類CClient所規(guī)定的接口方法完全相同,但其具體底層實現(xiàn)完全依照IPv4協(xié)議下的Socket函數(shù)接口給出。
下面以C++語言為例,對設(shè)計和實現(xiàn)支持IPv4協(xié)議通信功能的接口類CClientV4進(jìn)行詳細(xì)說明。class CClientV4:public CClient{Private:
SOCKET mySocket;//發(fā)送和接收數(shù)據(jù)的套接字unsigned int port; //存儲當(dāng)前連接端口號SMsgHead*MsgHead; //存儲消息頭unsigned int CurrSeq; //存儲當(dāng)前序列號,用于消息匹配bool HasInit; //檢查Winsock是否已經(jīng)初始化timeval*timeout;//檢查套接字狀態(tài)的超時時間CList*Result BuftList; //存放接收數(shù)據(jù)的鏈表SData*MakePackage(char*data,int len);//為消息體加消息頭的組包char*unpack(SData*data);//將消息體和消息頭分開的拆包………Public:
CClient();
~CClient();
virtual bool IsInit();//檢查winsock是否初始化了virtual void Init(); //初始化winsockvirtual char*ConnectServ(char*IP,int_port);//連接服務(wù)器virtual bool DisConnectServ(int port); //斷開連接,并釋放socket所占資源virtual void SendData(char*data,int len);//發(fā)送數(shù)據(jù)virtual char*RcvData(); //接收數(shù)據(jù)
virtual void SetTimeout(intsec,int usec); //設(shè)置連接超時時間virtual void ReleaseBuf(char*buff);//釋放所有的緩沖區(qū)…………};
其中,SMsgHead為應(yīng)用層開發(fā)者所制訂的通信協(xié)議中規(guī)定的消息頭結(jié)構(gòu),SData為添加了消息頭的通信數(shù)據(jù)包結(jié)構(gòu)。接口ConnectServ()提供連接遠(yuǎn)程IPv4服務(wù)器的功能,其內(nèi)部實現(xiàn)流程為首先需要使用Init()初始化winsock,然后使用socket()函數(shù)創(chuàng)建socket,接下來使用ioctlsocket()設(shè)置非阻塞的連接方式,再使用bind()將該socket綁定到本地地址,使用connect()向遠(yuǎn)程IPv4服務(wù)器發(fā)起連接請求,設(shè)置超時,然后調(diào)用select()檢查是否可讀,成功后調(diào)用ioctlsocket()將該socket設(shè)置為阻塞模式。
對于網(wǎng)絡(luò)通信模塊用于完成網(wǎng)絡(luò)通信中客戶端功能部分,步驟102中所述設(shè)計和實現(xiàn)支持IPv6協(xié)議通信功能的接口類包括利用面向?qū)ο蟮脑O(shè)計思想,根據(jù)抽象接口父類CClient的規(guī)范至少設(shè)計IPv6下的發(fā)送和接收數(shù)據(jù)套接字的屬性SOCKET mySocket、存儲當(dāng)前連接端口號的屬性unsigned int port、存儲消息頭的屬性SMsgHeadMsgHead、存儲當(dāng)前序列號的屬性unsigned int CurrSeq、檢查Winsock是否已經(jīng)初始化的接口bool HasInit、檢查套接字狀態(tài)超時時間的接口timevaltimeout、存放接收數(shù)據(jù)鏈表的接口CList Result_BuffList、為消息體加消息頭的組包接口SData MakePackage和將消息體和消息頭分開的拆包接口char unPack,實現(xiàn)支持IPv6協(xié)議網(wǎng)絡(luò)通信程序設(shè)計所需的抽象接口類CClientV6。
支持IPv6協(xié)議通信功能的接口類CClientV6繼承自抽象接口父類CClient,接口類CClientV6所提供的接口方法與抽象接口父類CClient所規(guī)定的接口方法完全相同。所不同的是,其具體底層實現(xiàn)完全依照IPv6下的Socket函數(shù)接口給出。
下面以C++語言為例,對設(shè)計和實現(xiàn)支持IPv6協(xié)議通信功能的接口類CClientV6進(jìn)行詳細(xì)說明。
SOCKET mySocket;//發(fā)送和接收數(shù)據(jù)的套接字unsigned int port; //存儲當(dāng)前連接端口號SMsgHead*MsgHead; //存儲消息頭unsigned int CurrSeq; //存儲當(dāng)前序列號,用于消息匹配bool HasInit; //檢查Winsock是否已經(jīng)初始化timeval*timeout;//檢查套接字狀態(tài)的超時時間CList*Result BuffList; //存放接收數(shù)據(jù)的鏈表SData*MakePackage(char*data,int len);//為消息體加消息頭的組包char*unPack(SData*data); //將消息體和消息頭分開的拆包…………Public:
CClientV6();
~CClientV6();
virtual bool IsInit();//檢查winsock是否初始化了virtual void Init(); //初始化winsockvirtual char*ConnectServ(char*IP,int_port);//連接服務(wù)器virtual bool DisConnectServ(int port);//斷開連接,并釋放socket所占資源virtual void SendData(char*data,int len);//發(fā)送數(shù)據(jù)virtual char*RcvData(); //接收數(shù)據(jù)virtual void SetTimeout(int sec,int usec); //設(shè)置連接超時時間virtual void ReleaseBuf(char*buff); //釋放所有的緩沖區(qū)…………};
其中,SMsgHead為應(yīng)用層開發(fā)者所制訂的通信協(xié)議中規(guī)定的消息頭結(jié)構(gòu),SData為添加了消息頭的通信數(shù)據(jù)包結(jié)構(gòu),與上述設(shè)計和實現(xiàn)接口類CClient V4時的相同。接口ConnectServ()提供連接遠(yuǎn)程IPv6服務(wù)器的功能,其內(nèi)部實現(xiàn)流程與上述設(shè)計和實現(xiàn)接口類CClient V4時有較大差異首先需要使用Init()初始化winsock,然后填寫模板,準(zhǔn)備創(chuàng)建用于連接服務(wù)器的socket,再調(diào)用getaddrinfo()解析服務(wù)器地址,然后使用socket()函數(shù)創(chuàng)建socket,接下來使用ioctlsocket()設(shè)置非阻塞的連接方式,再使用connect()向遠(yuǎn)程IPv6服務(wù)器發(fā)起連接請求,設(shè)置超時,然后調(diào)用select()檢查是否可讀,調(diào)用freeaddrinfo()釋放解析地址時返回的地址列表,成功后調(diào)用ioctlsocket()將該socket設(shè)置為阻塞模式。
對于網(wǎng)絡(luò)通信模塊用于完成網(wǎng)絡(luò)通信中服務(wù)器端功能部分,所述步驟101包括利用面向?qū)ο蟮脑O(shè)計思想,根據(jù)上層用戶的實際需求為抽象接口父類至少設(shè)計如下公共Public成員用于啟動線程的接口Start、用于暫停線程的接口Stop,用于終止線程并釋放資源的接口Release、用于獲取接收數(shù)據(jù)包鏈表中第一個數(shù)據(jù)包的接口GetFirstRcvData、用于刪除接收數(shù)據(jù)包鏈表中第一個數(shù)據(jù)包的接口DelFirstRcvData、用于設(shè)置超時時間的接口SetTimeout和用于設(shè)置偵聽最大連接數(shù)的接口SetMaxConn,實現(xiàn)支持IPv4和IPv6協(xié)議網(wǎng)絡(luò)通信程序設(shè)計所需的抽象接口父類CSrvThread。
所述抽象接口父類CSrvThread的Public成員至少包括以下接口用于啟動線程的接口Start、用于暫停線程的接口Stop,用于終止線程并釋放資源的接口Release、用于獲取接收數(shù)據(jù)包鏈表中第一個數(shù)據(jù)包的接口GetFirstRcvData、用于刪除接收數(shù)據(jù)包鏈表中第一個數(shù)據(jù)包的接口DelFirstRcvData、用于設(shè)置超時時間的接口SetTimeout和用于設(shè)置偵聽最大連接數(shù)的接口SetMaxConn。
下面以C++語言為例,對設(shè)計和實現(xiàn)支持IPv4和IPv6協(xié)議網(wǎng)絡(luò)通信程序設(shè)計所需的抽象接口父類CSrvThread進(jìn)行詳細(xì)說明。class CSrvThread:public CThread{Private:
…………Protected:
void_Execute();
…………Public:
CSrvThread(void*handle,bool CreateSuspended=true);
virtual void Start();//啟動線程virtual void Stop(); //暫停線程virtual void Release(); //停止線程,釋放資源virtual char*GetFirstRcvData(); //獲取數(shù)據(jù)包鏈表中的第一個包virtual void DelFirstRcvData(); //刪除數(shù)據(jù)包鏈表中的第一個包virtual void SetTimeout(long sec,long u_sec);//設(shè)置超時時間virtual void SetMaxConn(int maxconn); //設(shè)置偵聽的最大連接數(shù)…………};
其中,多數(shù)通信操作接口被設(shè)計和實現(xiàn)為virtual類型,以支持和實現(xiàn)在具體應(yīng)用中的動態(tài)綁定。同時,上層應(yīng)用程序開發(fā)者還可以根據(jù)本發(fā)明的基本思想,針對自己的應(yīng)用程序通信協(xié)議,在本套基本接口的基礎(chǔ)上輕松地進(jìn)行擴(kuò)展。
對于網(wǎng)絡(luò)通信模塊用于完成網(wǎng)絡(luò)通信中服務(wù)器端功能部分,步驟102中所述設(shè)計和實現(xiàn)支持IPv4協(xié)議通信功能的接口類包括利用面向?qū)ο蟮脑O(shè)計思想,根據(jù)抽象接口父類CSrvThread的規(guī)范至少設(shè)計IPv4下的偵聽套接字的屬性SOCKET LstSocket、默認(rèn)值為系統(tǒng)所允許最大連接數(shù)的屬性int MaxConn、存儲本地地址的屬性sockaddrLocalAddr、存儲本地端口的屬性unsigned int LocalPort、用于表明已開啟接收數(shù)據(jù)線程鏈表的屬性CList ThreadList、存放接收數(shù)據(jù)包鏈表的屬性CList RcvData_List、初始化winsock并綁定本地地址開始監(jiān)聽的接口boolStartUp和終止ThreadList中線程并釋放空間的接口void CleanUp,實現(xiàn)支持IPv4協(xié)議網(wǎng)絡(luò)通信程序設(shè)計所需的抽象接口類CSrvLstV4Thread。
支持IPv4協(xié)議通信功能的接口類CSrvLstV4Thread繼承自抽象接口父類CSrvLstThread,接口類CSrvLstV4Thread所提供的接口方法與抽象接口父類CSrvLstThread所規(guī)定的接口方法完全相同,但其具體底層實現(xiàn)完全依照IPv4協(xié)議下的Socket函數(shù)接口給出。
下面以C++語言為例,對設(shè)計和實現(xiàn)支持IPv4協(xié)議通信功能的接口類CSrvLstV4Thread進(jìn)行詳細(xì)說明。class CSrvLstV4Thread:public CSrvThread{Private:
SOCKET LstSocket;//偵聽套接字int MaxConn; //默認(rèn)值為系統(tǒng)所允許的最大連接數(shù)sockaddr*LocalAddr; //存儲本地地址unsigned int LocalPort; //存儲本地端口CList*ThreadList;//用于表明已開啟接收數(shù)據(jù)的線程鏈表CList*RcvData_List; //存放接收的數(shù)據(jù)包鏈表bool StartUp(); //初始化winsock并綁定本地地址開始監(jiān)聽void CleanUp(); //終止ThreadList中線程并釋放空間…………Protected:
void_Execute();
…………Public:
CSrvThread(void*handle,bool CreateSuspended=true);
virtual void Start();//啟動線程virtual void Stop(); //暫停線程virtual void Release(); //停止線程,釋放資源virtual char*GetFirstRcvData(); //獲取數(shù)據(jù)包鏈表中的第一個包virtual void DelFirstRcvData(); //刪除數(shù)據(jù)包鏈表中的第一個包virtual void SetTimeout(long sec,long u_sec);//設(shè)置超時時間virtual void SetMaxConn(int maxconn);//設(shè)置偵聽的最大連接數(shù)…………};
其中,CList為鏈表類型,接口StartUp()主要實現(xiàn)如下功能初始化winsock、綁定本地地址并開始偵聽。其實現(xiàn)流程為首先調(diào)用WSAStartup()函數(shù)初始化winsock,創(chuàng)建socket準(zhǔn)備進(jìn)行偵聽,依次調(diào)用gethostname()和gethostbyname()函數(shù),再調(diào)用bind()將該socket綁定到本地指定端口,最后調(diào)用listen()開始偵聽。
與此偵聽線程類關(guān)系非常密切的是接收線程類,利用C++語言,接收線程接口類的設(shè)計原型描述如下class CSrvV4RcvThread:public CThread{Private:
SOCKET RcvSocket;//接收數(shù)據(jù)套接字sockaddr*RemoteAddr; //遠(yuǎn)程地址timeval*timeout; //超時時間CSrvLstV4Thread*Srv; //偵聽線程char*RcvData(); //接收數(shù)據(jù)void SendData(char*data,int len);//發(fā)送數(shù)據(jù)…………Protected:
void_Execute();
…………Public:
CSrvV4RcvThread(CSrvLstV4Thread*SrvLst,bool Suspended=true);
………};
其中,SendData()用來接收數(shù)據(jù),其實現(xiàn)流程主要包括調(diào)用select()和send()函數(shù)。RcvData()亦類似實現(xiàn)。
對于網(wǎng)絡(luò)通信模塊用于完成網(wǎng)絡(luò)通信中客戶端功能部分,步驟102中所述設(shè)計和實現(xiàn)支持IPv6協(xié)議通信功能的接口類包括利用面向?qū)ο蟮脑O(shè)計思想,根據(jù)抽象接口父類CSrvThread的規(guī)范至少設(shè)計IPv6下的偵聽套接字的屬性SOCKET LstSocket、默認(rèn)值為系統(tǒng)所允許最大連接數(shù)的屬性int MaxConn、存儲本地端口的屬性unsigned intLocalPort、用于表明已開啟接收數(shù)據(jù)線程鏈表的屬性CList ThreadList、存放接收數(shù)據(jù)包鏈表的屬性CList RcvData_List、初始化winsock并綁定本地地址開始監(jiān)聽的接口bool StartUp和終止ThreadList中線程并釋放空間的接口void CleanUp,實現(xiàn)支持IPv4協(xié)議網(wǎng)絡(luò)通信程序設(shè)計所需的抽象接口類CSrvLstV6Thread。
支持IPv6協(xié)議通信功能的接口類CSrvLstV6Thread繼承自抽象接口父類CSrvLstThread,接口類CSrvLstV6Thread所提供的接口方法與抽象接口父類CSrvLstV6Thread所規(guī)定的接口方法完全相同。所不同的是,其具體底層實現(xiàn)完全依照IPv6下的Socket函數(shù)接口給出。
下面以C++語言為例,對設(shè)計和實現(xiàn)支持IPv6協(xié)議通信功能的接口類CSrvLstV6Thread進(jìn)行詳細(xì)說明。class CSrvLstV6Thread:public CSrvThread{Private:
SOCKET LstSocket;//偵聽套接字int MaxConn; //默認(rèn)值為系統(tǒng)所允許的最大連接數(shù)unsigned int LocalPort; //存儲本地端口CList*ThreadList;//用于表明已開啟接收數(shù)據(jù)的線程鏈表CList*RcvData_List; //存放接收的數(shù)據(jù)包鏈表bool StartUp(); //初始化winsock并綁定本地地址開始監(jiān)聽void CleanUp(); //終止ThreadList中線程并釋放空間………Protected:
void_Execute();
…………Public:
CSrvThread(void*handle,bool CreateSuspended=true);
virtual void Start(); //啟動線程virtual void Stop(); //暫停線程virtual void Release(); //停止線程,釋放資源virtual char*GetFirstRcvData(); //獲取數(shù)據(jù)包鏈表中的第一個包virtual void DelFirstRcvData(); //刪除數(shù)據(jù)包鏈表中的第一個包virtual void SetTimeout(long sec,long u_sec);//設(shè)置超時時間virtual void SetMaxConn(int maxconn);//設(shè)置偵聽的最大連接數(shù)…………};
其中,StartUp()實現(xiàn)如下功能初始化winsock、綁定本地地址并開始偵聽。其實現(xiàn)流程為首先調(diào)用WSAStartup()函數(shù)初始化winsock,然后調(diào)用getaddrinfo()解析服務(wù)器地址,接著創(chuàng)建socket準(zhǔn)備進(jìn)行偵聽,再調(diào)用bind()將該socket綁定到本地指定端口,最后調(diào)用listen()開始偵聽并調(diào)用freeaddrinfo()釋放解析服務(wù)器地址時獲得的地址列表。
同樣,利用C++語言,將與此偵聽線程類相應(yīng)的接收線程接口類的設(shè)計原型描述如下class CSrvV6RcvThread:public CThread{Private:
SOCKET RcvSocket; //接收數(shù)據(jù)套接字SOCKADDR_STORAGE*RemoteAddr;//遠(yuǎn)程地址timeval*timeout; //超時時間CSrvLstV6Thread*Srv; //偵聽線程char*RcvData();//接收數(shù)據(jù)void SendData(char*data,int len);//發(fā)送數(shù)據(jù)…………Protected:
void_Execute();
…………Public:
CSrvV6RcvThread(CSrvLstV6Thread*SrvLst,bool Suspended=true);
…………};
其中,SendData()用來接收數(shù)據(jù),其實現(xiàn)流程主要包括調(diào)用select()和send()函數(shù)。RcvData()亦類似實現(xiàn)。
由上可見,不管網(wǎng)絡(luò)通信功能部分是將被用作客戶端還是服務(wù)器端程序,該部分都可以采用此種設(shè)計方法。
另外,步驟102中所述設(shè)計和實現(xiàn)支持IPv4和IPv6協(xié)議通信功能的接口類,根據(jù)IPv4和IPv6底層Socket函數(shù)接口和使用方法的不同,分別繼承步驟101中所設(shè)計和實現(xiàn)的抽象接口父類且沿照統(tǒng)一的接口格式進(jìn)行。
為了更加清楚的說明采用本發(fā)明技術(shù)方案能夠滿足在開發(fā)支持IPv4和IPv6雙協(xié)議棧網(wǎng)絡(luò)應(yīng)用程序或系統(tǒng)過程中,對統(tǒng)一底層通信功能接口的迫切需求,以下結(jié)合本發(fā)明具體的應(yīng)用對本發(fā)明提供的技術(shù)方案進(jìn)一步詳細(xì)說明。
假設(shè)需要同時與遠(yuǎn)程服務(wù)器進(jìn)行IPv4和IPv6的通信,則可以非常容易地應(yīng)用本發(fā)明給出的接口類CClient、CClientV4、CClientV6,用C++語言描述一個在Windows平臺下的應(yīng)用實例如下void main(){//創(chuàng)建客戶端網(wǎng)絡(luò)組件并初始化CClient*clientCom1=new CClientV4();//創(chuàng)建IPv4客戶端網(wǎng)絡(luò)組件if(NULL==clientCom1){//出錯處理,給出提示信息并返回}CClient*clientCom2=new CClientV6();//創(chuàng)建IPv6客戶端網(wǎng)絡(luò)組件
if(NULL==clientCom2){//出錯處理,給出提示信息并返回}char*echo=NULL;
clientCom1->Init();
clientCom2->Init();
∥連接遠(yuǎn)程IPv4服務(wù)器echo=clientCom1->ConnectServ(“202.197.4.33”,5000)).
if(echo==NULL){//出錯處理,給出提示信息并返回}//連接遠(yuǎn)程IPv6服務(wù)器echo=clientCom2->ConnectServ(“2001:250:f007:c:213:72ff:feb6:b179”,5000)).
if(echo==NULL){//出錯處理,給出提示信息并返回}//開始與服務(wù)器進(jìn)行數(shù)據(jù)通信clientCom1->.SendData(“Hello!”,6);
clientCom2->.SendData(“World!”,6);
……//斷開連接clientCom1->.DisConnPro();
clientCom2->.DisConnPro();
……}同樣,本發(fā)明給出的接口類CSrvThread、CSrvLstV4Thread、CSrvLstV6Thread的使用方法也類似于上面這個例子,在此就不再舉例說明。
以上所述的具體實施例,對本發(fā)明的目的、技術(shù)方案和有益效果進(jìn)行了進(jìn)一步詳細(xì)說明,所應(yīng)理解的是,以上所述僅為本發(fā)明的具體實施例而已,并不用于限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所做的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
另外,需要說明的是,在本發(fā)明說明書涉及的各段程序語言中,都是基于Windows平臺實現(xiàn)的,如果基于Linux平臺實現(xiàn)本發(fā)明提供的技術(shù)方案,只需將上述各段程序語言中的初始化winsock的語句去掉,即可直接應(yīng)用到Linux平臺上。
權(quán)利要求
1.一種支持IPv4和IPv6雙協(xié)議棧網(wǎng)絡(luò)通信模塊的實現(xiàn)方法,其特征在于,該方法包括A、設(shè)計和實現(xiàn)支持IPv4和IPv6協(xié)議網(wǎng)絡(luò)通信程序設(shè)計所需的抽象接口父類;B、在所實現(xiàn)抽象接口父類的基礎(chǔ)上,分別設(shè)計和實現(xiàn)支持IPv4和IPv6協(xié)議通信功能的接口類。
2.根據(jù)權(quán)利要求1所述的支持IPv4和IPv6雙協(xié)議棧網(wǎng)絡(luò)通信模塊的實現(xiàn)方法,其特征在于,所述網(wǎng)絡(luò)通信模塊用于完成網(wǎng)絡(luò)通信中客戶端功能部分,且網(wǎng)絡(luò)通信模塊在Linux平臺下設(shè)計和實現(xiàn),所述步驟A包括利用面向?qū)ο蟮脑O(shè)計思想,根據(jù)上層用戶的實際需求為抽象接口父類至少設(shè)計如下公共Public成員連接遠(yuǎn)程服務(wù)器的接口ConnectServ、斷開與該遠(yuǎn)程服務(wù)器之間連接的接口DisConnectServ、發(fā)送數(shù)據(jù)的接口SendData、接收數(shù)據(jù)的接口RcvData、設(shè)置建立連接超時時間的接口SetTimeout和釋放所有緩沖區(qū)的接口ReleaseBuf,實現(xiàn)支持IPv4和IPv6協(xié)議網(wǎng)絡(luò)通信程序設(shè)計所需的抽象接口父類CClient。
3.根據(jù)權(quán)利要求2所述的支持IPv4和IPv6雙協(xié)議棧網(wǎng)絡(luò)通信模塊的實現(xiàn)方法,其特征在于,所述抽象接口父類CClient的Public成員至少包括以下接口連接遠(yuǎn)程服務(wù)器的接口ConnectServ、斷開與該遠(yuǎn)程服務(wù)器之間連接的接口DisConnectServ、發(fā)送數(shù)據(jù)的接口SendData、接收數(shù)據(jù)的接口RcvData、設(shè)置建立連接超時時間的接口SetTimeout和釋放所有緩沖區(qū)的接口ReleaseBuf。
4.根據(jù)權(quán)利要求1所述的支持IPv4和IPv6雙協(xié)議棧網(wǎng)絡(luò)通信模塊的實現(xiàn)方法,其特征在于,所述網(wǎng)絡(luò)通信模塊用于完成網(wǎng)絡(luò)通信中客戶端功能部分,且網(wǎng)絡(luò)通信模塊在windows平臺下設(shè)計和實現(xiàn),所述步驟A包括利用面向?qū)ο蟮脑O(shè)計思想,根據(jù)上層用戶的實際需求為抽象接口父類至少設(shè)計如下Public成員檢查套接字winsock是否已經(jīng)初始化的接口IsInit、初始化winsock的接口Init、連接遠(yuǎn)程服務(wù)器的接口ConnectServ、斷開與該遠(yuǎn)程服務(wù)器之間連接的接口DisConnectServ、發(fā)送數(shù)據(jù)的接口SendData、接收數(shù)據(jù)的接口RcvData、設(shè)置建立連接超時時間的接口SetTimeout和釋放所有緩沖區(qū)的接口ReleaseBuf,實現(xiàn)支持IPv4和IPv6協(xié)議網(wǎng)絡(luò)通信程序設(shè)計所需的抽象接口父類CClient。
5.根據(jù)權(quán)利要求4所述的支持IPv4和IPv6雙協(xié)議棧網(wǎng)絡(luò)通信模塊的實現(xiàn)方法,其特征在于,所述抽象接口父類CClient的Public成員至少包括以下接口檢查套接字winsock是否已經(jīng)初始化的接口IsInit、初始化winsock的接口Init、連接遠(yuǎn)程服務(wù)器的接口ConnectServ、斷開與該遠(yuǎn)程服務(wù)器之間連接的接口DisConnectServ、發(fā)送數(shù)據(jù)的接口SendData、接收數(shù)據(jù)的接口RcvData、設(shè)置建立連接超時時間的接口SetTimeout和釋放所有緩沖區(qū)的接口ReleaseBuf。
6.根據(jù)權(quán)利要求2至5中任一項所述支持IPv4和IPv6雙協(xié)議棧網(wǎng)絡(luò)通信模塊的實現(xiàn)方法,其特征在于,步驟B中所述設(shè)計和實現(xiàn)支持IPv4協(xié)議通信功能的接口類包括利用面向?qū)ο蟮脑O(shè)計思想,根據(jù)抽象接口父類CClient的規(guī)范至少設(shè)計IPv4下的發(fā)送和接收數(shù)據(jù)套接字的屬性SOCKET mySocket、存儲當(dāng)前連接端口號的屬性unsigned int port、存儲消息頭的屬性SMsgHeadMsgHead、存儲當(dāng)前序列號的屬性unsigned int CurrSeq、檢查Winsock是否已經(jīng)初始化的接口bool HasInit、檢查套接字狀態(tài)超時時間的接口timevaltimeout、存放接收數(shù)據(jù)鏈表的接口CList Result_BuffList、為消息體加消息頭的組包接口SData MakePackage和將消息體和消息頭分開的拆包接口char unPack,實現(xiàn)支持IPv4協(xié)議網(wǎng)絡(luò)通信程序設(shè)計所需的抽象接口類CClientV4。
7.根據(jù)權(quán)利要求2至5中任一項所述支持IPv4和IPv6雙協(xié)議棧網(wǎng)絡(luò)通信模塊的實現(xiàn)方法,其特征在于,步驟B中所述設(shè)計和實現(xiàn)支持IPv6協(xié)議通信功能的接口類包括利用面向?qū)ο蟮脑O(shè)計思想,根據(jù)抽象接口父類CClient的規(guī)范至少設(shè)計IPv6下的發(fā)送和接收數(shù)據(jù)套接字的屬性SOCKET mySocket、存儲當(dāng)前連接端口號的屬性unsigned int port、存儲消息頭的屬性SMsgHeadMsgHead、存儲當(dāng)前序列號的屬性unsigned int CurrSeq、檢查Winsock是否已經(jīng)初始化的接口bool HasInit、檢查套接字狀態(tài)超時時間的接口timevaltimeout、存放接收數(shù)據(jù)鏈表的接口CList Result_BuffList、為消息體加消息頭的組包接口SData MakePackage和將消息體和消息頭分開的拆包接口char unPack,實現(xiàn)支持IPv6協(xié)議網(wǎng)絡(luò)通信程序設(shè)計所需的抽象接口類CClientV6。
8.根據(jù)權(quán)利要求1所述的支持IPv4和IPv6雙協(xié)議棧網(wǎng)絡(luò)通信模塊的實現(xiàn)方法,其特征在于,所述網(wǎng)絡(luò)通信模塊用于完成網(wǎng)絡(luò)通信中服務(wù)器端功能部分,所述步驟A包括利用面向?qū)ο蟮脑O(shè)計思想,根據(jù)上層用戶的實際需求為抽象接口父類至少設(shè)計如下公共Public成員用于啟動線程的接口Start、用于暫停線程的接口Stop,用于終止線程并釋放資源的接口Release、用于獲取接收數(shù)據(jù)包鏈表中第一個數(shù)據(jù)包的接口GetFirstRcvData、用于刪除接收數(shù)據(jù)包鏈表中第一個數(shù)據(jù)包的接口DelFirstRcvData、用于設(shè)置超時時間的接口SetTimeout和用于設(shè)置偵聽最大連接數(shù)的接口SetMaxConn,實現(xiàn)支持IPv4和IPv6協(xié)議網(wǎng)絡(luò)通信程序設(shè)計所需的抽象接口父類CSrvThread。
9.根據(jù)權(quán)利要求8所述的支持IPv4和IPv6雙協(xié)議棧網(wǎng)絡(luò)通信模塊的實現(xiàn)方法,其特征在于,所述抽象接口父類CSrvThread的Public成員至少包括以下接口用于啟動線程的接口Start、用于暫停線程的接口Stop,用于終止線程并釋放資源的接口Release、用于獲取接收數(shù)據(jù)包鏈表中第一個數(shù)據(jù)包的接口GetFirstRcvData、用于刪除接收數(shù)據(jù)包鏈表中第一個數(shù)據(jù)包的接口DelFirstRcvData、用于設(shè)置超時時間的接口SetTimeout和用于設(shè)置偵聽最大連接數(shù)的接口SetMaxConn。
10.根據(jù)權(quán)利要求8或9所述的支持IPv4和IPv6雙協(xié)議棧網(wǎng)絡(luò)通信模塊的實現(xiàn)方法,其特征在于,步驟B中所述設(shè)計和實現(xiàn)支持IPv4協(xié)議通信功能的接口類包括利用面向?qū)ο蟮脑O(shè)計思想,根據(jù)抽象接口父類CSrvThread的規(guī)范至少設(shè)計IPv4下的偵聽套接字的屬性SOCKET LstSocket、默認(rèn)值為系統(tǒng)所允許最大連接數(shù)的屬性int MaxConn、存儲本地地址的屬性sockaddrLocalAddr、存儲本地端口的屬性unsigned int LocalPort、用于表明已開啟接收數(shù)據(jù)線程鏈表的屬性CList ThreadList、存放接收數(shù)據(jù)包鏈表的屬性CList RcvData_List、初始化winsock并綁定本地地址開始監(jiān)聽的接口boolStartUp和終止ThreadList中線程并釋放空間的接口void CleanUp,實現(xiàn)支持IPv4協(xié)議網(wǎng)絡(luò)通信程序設(shè)計所需的抽象接口類CSrvLstV4Thread。
11.根據(jù)權(quán)利要求8或9所述的支持IPv4和IPv6雙協(xié)議棧網(wǎng)絡(luò)通信模塊的實現(xiàn)方法,其特征在于,步驟B中所述設(shè)計和實現(xiàn)支持IPv6協(xié)議通信功能的接口類包括利用面向?qū)ο蟮脑O(shè)計思想,根據(jù)抽象接口父類CSrvThread的規(guī)范至少設(shè)計IPv6下的偵聽套接字的屬性SOCKET LstSocket、默認(rèn)值為系統(tǒng)所允許最大連接數(shù)的屬性int MaxConn、存儲本地端口的屬性unsigned intLocalPort、用于表明已開啟接收數(shù)據(jù)線程鏈表的屬性CList ThreadList、存放接收數(shù)據(jù)包鏈表的屬性CList RcvData_List、初始化winsock并綁定本地地址開始監(jiān)聽的接口bool StartUp和終止ThreadList中線程并釋放空間的接口void CleanUp,實現(xiàn)支持IPv4協(xié)議網(wǎng)絡(luò)通信程序設(shè)計所需的抽象接口類CSrvLstV6Thread。
12.根據(jù)權(quán)利要求1所述的支持IPv4和IPv6雙協(xié)議棧網(wǎng)絡(luò)通信模塊的實現(xiàn)方法,其特征在于,步驟B中所述設(shè)計和實現(xiàn)支持IPv4和IPv6協(xié)議通信功能的接口類,根據(jù)IPv4和IPv6底層Socket函數(shù)接口和使用方法的不同,分別繼承步驟A中所設(shè)計和實現(xiàn)的抽象接口父類,且沿照統(tǒng)一的接口格式進(jìn)行。
全文摘要
本發(fā)明公開了一種支持IPv4和IPv6雙協(xié)議棧網(wǎng)絡(luò)通信模塊的實現(xiàn)方法,該方法包括A.設(shè)計和實現(xiàn)支持IPv4和IPv6協(xié)議網(wǎng)絡(luò)通信程序設(shè)計所需的抽象接口父類;B.在所實現(xiàn)抽象接口父類的基礎(chǔ)上,分別設(shè)計和實現(xiàn)支持IPv4和IPv6協(xié)議通信功能的接口類。利用本發(fā)明,滿足了在開發(fā)支持IPv4和IPv6雙協(xié)議棧網(wǎng)絡(luò)應(yīng)用程序或系統(tǒng)過程中,對統(tǒng)一底層通信功能接口的迫切需求,很好的屏蔽了底層利用IPv4協(xié)議與IPv6協(xié)議通信的差異,使上層開發(fā)人員能直接使用該套統(tǒng)一的接口進(jìn)行開發(fā),而無需關(guān)心和處理IPv4協(xié)議與IPv6協(xié)議通信的差別。
文檔編號H04L12/66GK1870654SQ20061008934
公開日2006年11月29日 申請日期2006年6月21日 優(yōu)先權(quán)日2006年6月21日
發(fā)明者彭達(dá), 張廣興, 李振宇, 楊建華, 謝高崗 申請人:中國科學(xué)院計算技術(shù)研究所
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
仁怀市| 成都市| 正镶白旗| 南阳市| 宁城县| 明星| 云浮市| 仲巴县| 镶黄旗| 安仁县| 吉木萨尔县| 镇宁| 丘北县| 和政县| 南木林县| 秦皇岛市| 康保县| 乃东县| 灵宝市| 密云县| 航空| 临湘市| 萨嘎县| 三都| 揭阳市| 图木舒克市| 南昌县| 射阳县| 金寨县| 池州市| 开远市| 屏边| 美姑县| 遂溪县| 呼和浩特市| 正阳县| 昆山市| 姜堰市| 谢通门县| 陆河县| 通河县|