專利名稱::基于單向廣播網(wǎng)絡(luò)的可靠文件接收系統(tǒng)的斷點(diǎn)續(xù)傳的方法
技術(shù)領(lǐng)域:
:本發(fā)明屬于計(jì)算機(jī)設(shè)計(jì)與應(yīng)用
技術(shù)領(lǐng)域:
,尤其涉及一種基于單向廣播網(wǎng)絡(luò)的可靠文件接收系統(tǒng)的斷點(diǎn)續(xù)傳的方法。
背景技術(shù):
:在單向廣播網(wǎng)絡(luò)接收大文件時(shí),接收到此文件的一大部分后,由于特殊事務(wù)發(fā)生,需要斷開傳輸,稍后再重新連接到該網(wǎng)絡(luò)。再次從發(fā)送端進(jìn)行接收時(shí),由于不能與前端服務(wù)器進(jìn)行交互,傳統(tǒng)的基于雙向網(wǎng)絡(luò)的文件斷點(diǎn)續(xù)傳技術(shù)再此不能適用,結(jié)果將導(dǎo)致重新開始接收整個(gè)文件,使得文件會(huì)重復(fù)接收重復(fù)寫入,這種情況下,完整接收整個(gè)文件需要較長時(shí)間,且客戶端CPU占用率較高,磁盤讀寫頻繁。文件接收端只是在第一個(gè)應(yīng)用數(shù)據(jù)單元(ADU)到來時(shí)創(chuàng)建文件并寫入第一個(gè)ADU,然后依次按偏移量(包含在ADU的Trailer中的元數(shù)據(jù)中)寫入接收到的ADU塊。一旦一個(gè)文件在一輪中接收不完全,斷開連接后,下一輪時(shí)接收端還是會(huì)接收所有ADU塊,然后將每個(gè)ADU再次寫入磁盤。這將造成接收端大量的重復(fù)勞動(dòng)(尤其是寫入磁盤這一低速過程),考慮一種極端情況,一個(gè)大文件被劃成n個(gè)應(yīng)用數(shù)據(jù)單元,若第一輪中只剩一個(gè)ADU未接收全,若此時(shí)中斷接收,那么下次接收時(shí)還得把所有ADU全部重新接收后又全部重新寫入磁盤,由于寫入磁盤的速度是相對較慢的,這樣會(huì)大大加重客戶端的負(fù)擔(dān),而且增加對客戶端CPU和網(wǎng)絡(luò)處理能力的要求?;诖朔N情況,考慮對單向廣播網(wǎng)絡(luò)接收文件技術(shù)進(jìn)行改進(jìn),尋找一種方法,盡可能減小CPU占用率,降低過于頻繁的磁盤讀寫,提高中途斷開接收后重新連接時(shí)的文件接收性能。為降低接收端的負(fù)擔(dān),并能在中斷的情況下繼續(xù)接收文件,同時(shí)增強(qiáng)接收端處理文件的效率,因此需要對文件接收端增加斷點(diǎn)續(xù)傳功能。
發(fā)明內(nèi)容本發(fā)明的目的是克服現(xiàn)有技術(shù)的不足,提供一種基于單向廣播網(wǎng)絡(luò)的可靠文件接收系統(tǒng)的斷點(diǎn)續(xù)傳的方法。基于單向廣播網(wǎng)絡(luò)的可靠文件接收系統(tǒng)的斷點(diǎn)續(xù)傳的方法包括如下步驟l)將待發(fā)送文件按照固定大小分片,每一文件分片附加該片文件的偏移信息和校驗(yàn)信息;2)把分片的文件與該分片文件的偏移量信息和附加校驗(yàn)信息組合成應(yīng)用數(shù)據(jù)單元,提交到可靠多播層;3)可靠多播層把應(yīng)用數(shù)據(jù)單元分割成數(shù)據(jù)塊,對這些數(shù)據(jù)塊進(jìn)行編碼,生成相應(yīng)的冗余數(shù)據(jù)塊,文件發(fā)送服務(wù)端將亂序發(fā)送所有數(shù)據(jù)塊;4)用戶端接收該文件時(shí),創(chuàng)建該文件對應(yīng)的信息索引文件,每當(dāng)接收完成一個(gè)應(yīng)用數(shù)據(jù)單元,則將其寫入分配給該文件的對應(yīng)磁盤空間中;5)當(dāng)發(fā)生意外導(dǎo)致接收中斷后重新開始接收時(shí),檢查信息記錄文件是否存在,如果存在,表明尚未接收完成,需要進(jìn)行續(xù)傳;6)當(dāng)所有應(yīng)用數(shù)據(jù)單元接收完畢并寫入磁盤后,文件接收完成,刪除對應(yīng)的信息記錄文件。所述的將待發(fā)送文件按照固定大小分片,每一文件分片附加該片文件的偏移信息和校驗(yàn)信息步驟根據(jù)系統(tǒng)性能確定文件分片的大小,把待發(fā)送文件按照該大小依次分割,最后一塊文件如果大小不足則用零填充,分割時(shí)記錄每塊文件基于文件起始位置的偏移量,并計(jì)算該文件的校驗(yàn)值,把所得數(shù)據(jù)附加在該分片文件的尾部。所述的將應(yīng)用數(shù)據(jù)單元分割成數(shù)據(jù)塊,對這些數(shù)據(jù)塊進(jìn)行編碼,生成相應(yīng)的冗余數(shù)據(jù)塊,文件發(fā)送服務(wù)端將亂序發(fā)送所有數(shù)據(jù)塊的步驟根據(jù)系統(tǒng)性能將應(yīng)用數(shù)據(jù)單元分割為等長的數(shù)據(jù)塊,若最后一個(gè)數(shù)據(jù)塊長度小于所需長度,則填充零,對所有數(shù)據(jù)單元采用前向糾錯(cuò)編碼計(jì)算,根據(jù)冗余度生成相應(yīng)數(shù)量的冗余糾錯(cuò)數(shù)據(jù)塊,所有源數(shù)據(jù)塊與冗余數(shù)據(jù)塊亂序排列,由前端平臺(tái)的文件發(fā)送服務(wù)器逐一發(fā)送。所述的用戶端接收該文件時(shí),創(chuàng)建該文件對應(yīng)的信息索引文件,每當(dāng)接收完成一個(gè)應(yīng)用數(shù)據(jù)單元,則將其寫入分配給該文件的對應(yīng)磁盤空間的步驟用戶端接收該文件時(shí)創(chuàng)建該文件對應(yīng)的信息索引文件,該索引文件記錄已經(jīng)接收到的應(yīng)用數(shù)據(jù)單元情況,每當(dāng)接收到一個(gè)應(yīng)用數(shù)據(jù)單元,首先計(jì)算校驗(yàn)該數(shù)據(jù)是否正確,然后根據(jù)應(yīng)用數(shù)據(jù)單元所攜帶的文件偏移信息,將其寫入分配給該文件的磁盤空間中的對應(yīng)的位置。所述的當(dāng)發(fā)生意外導(dǎo)致接收中斷后重新開始接收時(shí),檢查信息記錄文件是否存在,如果存在,表明該文件尚未接收完全所有的應(yīng)用數(shù)據(jù)單元,需要進(jìn)行續(xù)傳步驟當(dāng)一個(gè)新的進(jìn)程打開后傳輸同樣的文件時(shí),通過讀取該信息記錄文件中的應(yīng)用數(shù)據(jù)單元接收情況來進(jìn)行續(xù)傳,當(dāng)一個(gè)應(yīng)用數(shù)據(jù)單元被接收時(shí),先通過該應(yīng)用數(shù)據(jù)單元的的偏移位來索引信息記錄文件中該應(yīng)用數(shù)據(jù)單元的接收狀態(tài),如已接收完成,則跳過寫入磁盤動(dòng)作并返回,如未接收完成,則先寫入磁盤,寫入成功后在信息記錄文件中把該應(yīng)用數(shù)據(jù)單元的接收情況設(shè)置為已接收狀態(tài),重復(fù)進(jìn)行該過程,直至最終文件接收完成,刪除對應(yīng)的信息記錄文件。本發(fā)明加入接收端的斷點(diǎn)續(xù)傳功能,可以在斷點(diǎn)處繼續(xù)接收并跳過冗余且耗時(shí)的寫入操作,減少磁盤寫入次數(shù),保護(hù)磁盤,從而達(dá)到減少I/O次數(shù)和CPU占用率,節(jié)約接收端硬件資源的目的。另外該方法的實(shí)現(xiàn)可以通過Java,C+十等多種語言來具體實(shí)現(xiàn)。圖1是本發(fā)明的可靠多播文件傳輸協(xié)議棧;圖2是本發(fā)明的文件接收過程示意圖。具體實(shí)施例方式基于單向廣播網(wǎng)絡(luò)的可靠文件接收系統(tǒng)的斷點(diǎn)續(xù)傳的方法包括如下步驟-1)將待發(fā)送文件按照固定大小分片,每一文件分片附加該片文件的偏移信息和校驗(yàn)信息;2)把分片的文件與該分片文件的偏移量信息和附加校驗(yàn)信息組合成應(yīng)用數(shù)據(jù)單元,提交到可靠多播層;3)可靠多播層把應(yīng)用數(shù)據(jù)單元分割成數(shù)據(jù)塊,對這些數(shù)據(jù)塊進(jìn)行編碼,生成相應(yīng)的冗余數(shù)據(jù)塊,文件發(fā)送服務(wù)端將亂序發(fā)送所有數(shù)據(jù)塊;4)用戶端接收該文件時(shí),創(chuàng)建該文件對應(yīng)的信息索引文件,每當(dāng)接收完成一個(gè)應(yīng)用數(shù)據(jù)單元,則將其寫入分配給該文件的對應(yīng)磁盤空間中;5)當(dāng)發(fā)生意外導(dǎo)致接收中斷后重新開始接收時(shí),檢查信息記錄文件是否存在,如果存在,表明尚未接收完成,需要進(jìn)行續(xù)傳;6)當(dāng)所有應(yīng)用數(shù)據(jù)單元接收完畢并寫入磁盤后,文件接收完成,刪除對應(yīng)的信息記錄文件。所述的將待發(fā)送文件按照固定大小分片,每一文件分片附加該片文件的偏移信息和校驗(yàn)信息步驟根據(jù)系統(tǒng)性能確定文件分片的大小,把待發(fā)送文件按照該大小依次分割,最后一塊文件如果大小不足則用零填充,分割時(shí)記錄每塊文件基于文件起始位置的偏移量,并計(jì)算該文件的校驗(yàn)值,把所得數(shù)據(jù)附加在該分片文件的尾部。所述的將應(yīng)用數(shù)據(jù)單元分割成數(shù)據(jù)塊,對這些數(shù)據(jù)塊進(jìn)行編碼,生成相應(yīng)的冗余數(shù)據(jù)塊,文件發(fā)送服務(wù)端將亂序發(fā)送所有數(shù)據(jù)塊的步驟根據(jù)系統(tǒng)性能將應(yīng)用數(shù)據(jù)單元分割為等長的數(shù)據(jù)塊,若最后一個(gè)數(shù)據(jù)塊長度小于所需長度,則填充零,對所有數(shù)據(jù)單元采用前向糾錯(cuò)編碼計(jì)算,根據(jù)冗余度生成相應(yīng)數(shù)量的冗余糾錯(cuò)數(shù)據(jù)塊,所有源數(shù)據(jù)塊與冗余數(shù)據(jù)塊亂序排列,由前端平臺(tái)的文件發(fā)送服務(wù)器逐一發(fā)送。所述的用戶端接收該文件時(shí),創(chuàng)建該文件對應(yīng)的信息索引文件,每當(dāng)接收完成一個(gè)應(yīng)用數(shù)據(jù)單元,則將其寫入分配給該文件的對應(yīng)磁盤空間的步驟用戶端接收該文件時(shí)創(chuàng)建該文件對應(yīng)的信息索引文件,該索引文件記錄已經(jīng)接收到的應(yīng)用數(shù)據(jù)單元情況,每當(dāng)接收到一個(gè)應(yīng)用數(shù)據(jù)單元,首先計(jì)算校驗(yàn)該數(shù)據(jù)是否正確,然后根據(jù)應(yīng)用數(shù)據(jù)單元所攜帶的文件偏移信息,將其寫入分配給該文件的磁盤空間中的對應(yīng)的位置。所述的當(dāng)發(fā)生意外導(dǎo)致接收中斷后重新開始接收時(shí),檢查信息記錄文件是否存在,如果存在,表明該文件尚未接收完全所有的應(yīng)用數(shù)據(jù)單元,需要進(jìn)行續(xù)傳步驟當(dāng)一個(gè)新的進(jìn)程打開后傳輸同樣的文件時(shí),通過讀取該信息記錄文件中的應(yīng)用數(shù)據(jù)單元接收情況來進(jìn)行續(xù)傳,當(dāng)一個(gè)應(yīng)用數(shù)據(jù)單元被接收時(shí),先通過該應(yīng)用數(shù)據(jù)單元的的偏移位來索引信息記錄文件中該應(yīng)用數(shù)據(jù)單元的接收狀態(tài),如已接收完成,則跳過寫入磁盤動(dòng)作并返回,如未接收完成,則先寫入磁盤,寫入成功后在信息記錄文件中把該應(yīng)用數(shù)據(jù)單元的接收情況設(shè)置為已接收狀態(tài),重復(fù)進(jìn)行該過程,直至最終文件接收完成,刪除對應(yīng)的信息記錄文件。實(shí)施例本發(fā)明方法的應(yīng)用于多播環(huán)境,適用的網(wǎng)絡(luò)為單向廣播網(wǎng)絡(luò),不具備反饋交互回路,類似的網(wǎng)絡(luò)如有線電視網(wǎng)絡(luò),衛(wèi)星傳輸網(wǎng)絡(luò)等,該單向廣播網(wǎng)絡(luò)采用的網(wǎng)絡(luò)協(xié)議為TCP/IP,支持多播應(yīng)用數(shù)據(jù)的傳輸,所采用的多播通信模型為一對多可靠多播通信,即組里只有一個(gè)發(fā)送者和若干個(gè)接收者。按照上述
發(fā)明內(nèi)容所述,下面將描述具體應(yīng)用方案,包括文件的分割,文件在單向廣播網(wǎng)絡(luò)環(huán)境下的發(fā)送,文件的接收與組裝和斷點(diǎn)續(xù)傳的處理幾方面內(nèi)容。(1)待發(fā)送文件的分割發(fā)送端發(fā)送一個(gè)對象時(shí),如是一個(gè)目錄,則遞歸發(fā)送其目錄下的每個(gè)子文件,最終是以文件為單位,先將文件分為固定大小的fragment,然后循環(huán)對每一個(gè)fragment進(jìn)行如下過程先對fragment加上Trailer信息(包括所屬文件的MD5校驗(yàn)信息,該文件片的偏移量信息,文件名,存儲(chǔ)路徑信息等),再對fragment進(jìn)行CRC32計(jì)算,將計(jì)算結(jié)果放在Trailer的后面,最終將上述內(nèi)容拼裝成應(yīng)用數(shù)據(jù)單元ADU(即Fragment+Trailer十CRC32),提交給可靠多播層進(jìn)行發(fā)送??煽慷嗖訉DU先分成固定大小的文件塊blocks,然后將每個(gè)塊分成1024字節(jié)大小的SourceDUs,然后按Reed-Solomon編碼標(biāo)準(zhǔn)對SourceDUs進(jìn)行前向糾錯(cuò)編碼,生成相同數(shù)量的FECDUs。然后可靠多播庫將ADU下的所有的SourceDUs和FECDUs打亂順序放入單層發(fā)送,發(fā)送前,先對每個(gè)DU(無論是SourceDU還是FECDU)加上ALC/LCT頭,然后做為UDP的數(shù)據(jù)單元發(fā)送出去。(2)網(wǎng)絡(luò)協(xié)議棧與協(xié)議時(shí)序單向廣播網(wǎng)絡(luò)可靠文件傳輸系統(tǒng)主要由文件傳輸層、可靠多播層及其下的UDP組播及IP層組成。如圖1所示。文件傳輸協(xié)議只涉及文件傳輸層及可靠多播層兩層。文件傳輸協(xié)議時(shí)序發(fā)送端根據(jù)組播地址、組播端口、網(wǎng)絡(luò)接口地址三個(gè)參數(shù)打開一個(gè)發(fā)送session,然后對每個(gè)session,執(zhí)行如下過程1.首先,發(fā)送端剛開始發(fā)送時(shí),將所有的DU包的ALC/LCT頭部分加上NEW型的擴(kuò)展頭,表示現(xiàn)在正在仍有新的ADU即將到來。接收端接收到此類型的包便知道當(dāng)前的接收狀態(tài)處于正在接收新的ADU的狀態(tài)中。2.當(dāng)發(fā)送端決定停止發(fā)送時(shí),首先將還未發(fā)完的DU包的包頭改為加上NO_NEW—ADU型的擴(kuò)展頭,表示沒有新的ADU了,這些DU包都是屬于以前的ADU的。接收端接收到此類型的包便可以知道發(fā)送端現(xiàn)在開始發(fā)送來的DU包均屬于以前的ADU。3.當(dāng)發(fā)送端所有剩余DU全部發(fā)送完畢時(shí),發(fā)送端發(fā)送CLOSE類型的包給發(fā)送端,表示此session結(jié)束。接收端接收到CLOSE類型的包便停止接收。(3)文件的發(fā)送流程用組播地址,組播端口,本機(jī)IP地址生成一個(gè)sessionid,然后利用sessionid對每個(gè)目錄,遞歸對每一個(gè)文件進(jìn)行如下處理處理文件順序按文件創(chuàng)建時(shí)間順序。對每個(gè)文件,先將文件分為大小為64kB的fragments,然后循環(huán)此文件的所有的Fragments,對第i個(gè)fragment進(jìn)行如下操作開始對Fragments[I]加Trailer(包括計(jì)算的文件MD5信息)計(jì)算Fragments[I]的CRC32;依次拼接Fragments[I],Trailer,CRC32,為ADU;下面發(fā)送ADU(將ADU分為大小為64KB的blocks,對每個(gè)block的所有DUs進(jìn)行FEC計(jì)算,得出此block的所有FECDUs;對ADU的所有blocks的所有DUs(sourceDUs+FECDUs)打亂順序;對亂序的每個(gè)DU:加上ALC/LCT頭;將加了頭的DU作為UDP數(shù)據(jù)單元發(fā)送給UDP層發(fā)送。結(jié)束當(dāng)發(fā)送端發(fā)送完一輪時(shí),緊接著發(fā)送下一輪,無限循環(huán)下去,直到發(fā)送端主動(dòng)終止此過程。當(dāng)發(fā)送端主動(dòng)終止時(shí),若DU還沒發(fā)完,則發(fā)送NONEWADU類型包;等DU全部發(fā)完時(shí),發(fā)送CLOSE類型包,表示session終止。分包及發(fā)送過程示意如圖2。(4)文件組裝及接收流程文件傳輸層請求可靠多播層接收一個(gè)ADU數(shù)據(jù)塊,若還沒接收完全,必須等待。可靠多播層接收ADU過程如下接收數(shù)據(jù)包到接收緩沖區(qū);對這個(gè)數(shù)據(jù)包進(jìn)行頭部結(jié)構(gòu)解析;處理該結(jié)構(gòu)中的信號(hào)字段主要包括CLOSE(停止發(fā)送)、NONEWADU(表示已發(fā)送完所有新的ADU,接收端若已經(jīng)收全這些ADU,則表明己經(jīng)收全了所有當(dāng)前發(fā)送的內(nèi)容,便可以終止接收)、NEW(表示當(dāng)前發(fā)送的數(shù)據(jù)包屬于新的ADU)等控制信息。創(chuàng)建一個(gè)新的DU,并從接收包中去掉ALC頭的數(shù)據(jù)段;尋找它所屬于的ADU和block,插入相應(yīng)的ADU的block列表中的DU列表。當(dāng)收到足夠的DU后,通過FEC解碼算法得到block,當(dāng)收完一個(gè)ADU的所有block之后,便遞交給文件傳輸層。文件傳輸層接收過程如下當(dāng)從可靠多播層接收到一個(gè)ADU后,解出ADU的CRC32部分,并進(jìn)行校驗(yàn),如CRC32校驗(yàn)失敗,則通知可靠多播層重新接收此編號(hào)的ADU。如CRC32校驗(yàn)成功,則解出Trailer元信息,并依據(jù)元信息中的文件名,文件路徑、偏移量、分片數(shù)等相關(guān)信息進(jìn)行創(chuàng)建文件(如文件不存在)及寫入此ADU等操作。當(dāng)文件所有ADU全部寫入后,校驗(yàn)文件的MD5(通過與ADU的Trailer中傳過來的文件MD5信息進(jìn)行比對),如文件MD5信息正確,表示文件正確傳輸,否則表示文件傳輸中有錯(cuò)誤,刪除整個(gè)文件,并再次接收此文件的所有ADU。文件接收完畢判斷-a)block大小為固定,而DU大小也固定,因此只要收到(block大小/DU大小)的DUs就表示此block接收完畢b)ADU大小固定,而block大小也固定,因此只要收到(ADU大小/block大小)的blocks就表示此ADU下的所有block接收完畢。c)文件接收完成通過ADU中的元信息得出,因?yàn)樵畔⒅杏挟?dāng)前文件包含的ADU個(gè)數(shù),所以很容易通過計(jì)數(shù)的方法判斷文件是否全部寫入完畢。(5)斷點(diǎn)續(xù)傳處理在接收到新文件的最先接收到的ADU時(shí)(注不一定是最前面的ADU,任一新文件的ADU即可),將創(chuàng)建記錄文件信息的索引文件,該索引文件采用.ior作為文件后綴。由于ADU中包含Trailer和CRC,因此在校驗(yàn)完CRC后,對Trailer中的一些信息進(jìn)行保存到索引文件中,如文件路徑名,文件名,文件大小,此文件總共多少個(gè)ADU,此ADU序號(hào)等信息,此文件結(jié)構(gòu)采用如下數(shù)據(jù)結(jié)構(gòu)記錄Header:頭部structiorheader{charior[3];〃始終為"IOR",標(biāo)識(shí)此為ior文件charversion;〃ior文件的版本號(hào),初始版本號(hào)為1charis—finished;〃1:finishedreceiving,0:unfinishedcharfile一base[128];〃Filebasepathcharfile—name[256];〃Filenamelonglongfile—size;〃Filesizeinbyteslongtotal—cnt;她isfilehavetotal—cntADUslongrecv一cnt;〃recv—cntADUshavebeenreceived.longcreate—time;〃originfilecreatetimelonglastmodjime;〃lastmodifiedtimeoforiginfilelongaccum—down—time;〃accumulateddownloadtimecharext[160];〃160bytesforfUtureuse};上述頭部總計(jì)577bytes,從偏移量第578個(gè)字節(jié)開始,接下來剩余部分為位數(shù)組bit[tota1—cnt],每一位標(biāo)識(shí)第i(Oi<=total—cnt-l)個(gè)ADU是否完成(1表示完成,O表示未完成)。<table>tableseeoriginaldocumentpage11</column></row><table>注原文件不存在,ior文件存在這種情況不會(huì)主動(dòng)發(fā)生,除非用戶在文件下載完成之前誤刪除原文件,此時(shí)再接收會(huì)發(fā)生接收文件是錯(cuò)誤的情況(不加整個(gè)文件校驗(yàn)時(shí))。解決方法是刪除原文件和ior文件(若存在),然后重新接收。當(dāng)收到文件的最先收到的ADU時(shí),先看是否存在同前綴名的ior文件,若存在,則表示尚未收完,則繼續(xù)收,若不存在,有兩種情況l.當(dāng)原文件存在時(shí),表示傳輸完成;2.當(dāng)原文件不存在時(shí),表示接收到新文件了。當(dāng)表示收到新文件的時(shí),新建同前綴文件名的ior文件并初始化相關(guān)字段。寫入文件名,文件大小,總ADU數(shù)等,并把原始文件的創(chuàng)建時(shí)間寫入create—time字段,初始化已接收ADU數(shù)為recv一cnt為O,置所有位數(shù)組的位為0。每次在ADU寫入磁盤之前,先檢查ior文件中的該ADU的seq的bitmap位(bit[seq-l]),若此位為0,表示此ADU尚未寫入,于是立即進(jìn)入寫入,寫入成功后置此bit標(biāo)記位為1,并將recv—cnt++,然后檢測此時(shí)(recv—cnt==total—cnt)若相等,則置此is一fmished為1。然后檢査ior文件中的is—finished是否為1,若為1表示所有ADU塊全部接收完畢,則刪除此ior文件。若不為l,貝lj用當(dāng)前時(shí)間填充lastmod—time字段,并計(jì)算accum一down一time=■lastmod一time—createtime,若累禾只下載時(shí)間accum_down_time>5天,則關(guān)閉ior文件,關(guān)閉原始文件,然后刪除原始文件,刪除ior文件。當(dāng)斷點(diǎn)發(fā)生時(shí),由于只有在ADU寫入磁盤成功后,才置標(biāo)記比特位為l,那么只要iOT文件存在,我們即可以進(jìn)行續(xù)傳,具體情況如下當(dāng)一個(gè)新的進(jìn)程打開后傳輸同樣的文件時(shí),由于ior文件已經(jīng)存在,原始文件已經(jīng)被部分寫入。我們通過讀取ior文件中的bitmap來進(jìn)行續(xù)傳。當(dāng)一個(gè)ADU被接收時(shí),先通過ADU的s叫對應(yīng)的bit位判斷此ADU有沒有已被接收完成,如已接收完成,則跳過寫入磁盤動(dòng)作并返回。如未接收完成,則先寫入磁盤,寫入成功后置此bit標(biāo)記位為1,并將recv—cnt++,然后檢測此時(shí)(recv一cnttotal—cnt)若相等,則置此is—finished為1。然后檢查ior文件中的is—finished是否為1,若為1表示所有ADU塊全部接收完畢,則刪除此ior文件。若不為1,則用當(dāng)前時(shí)間土真充lastmod—time字段,并計(jì)算accum—down—time=lastmod—time-createtime,若累積下載時(shí)間accum—down—time>5天,則關(guān)閉ior文件,關(guān)閉原始文件,然后刪除原始文件,刪除ior文件。權(quán)利要求1.一種基于單向廣播網(wǎng)絡(luò)的可靠文件接收系統(tǒng)的斷點(diǎn)續(xù)傳的方法,其特征在于包括如下步驟1)將待發(fā)送文件按照固定大小分片,每一文件分片附加該片文件的偏移信息和校驗(yàn)信息;2)把分片的文件與該分片文件的偏移量信息和附加校驗(yàn)信息組合成應(yīng)用數(shù)據(jù)單元,提交到可靠多播層;3)可靠多播層把應(yīng)用數(shù)據(jù)單元分割成數(shù)據(jù)塊,對這些數(shù)據(jù)塊進(jìn)行編碼,生成相應(yīng)的冗余數(shù)據(jù)塊,文件發(fā)送服務(wù)端將亂序發(fā)送所有數(shù)據(jù)塊;4)用戶端接收該文件時(shí),創(chuàng)建該文件對應(yīng)的信息索引文件,每當(dāng)接收完成一個(gè)應(yīng)用數(shù)據(jù)單元,則將其寫入分配給該文件的對應(yīng)磁盤空間中;5)當(dāng)發(fā)生意外導(dǎo)致接收中斷后重新開始接收時(shí),檢查信息記錄文件是否存在,如果存在,表明尚未接收完成,需要進(jìn)行續(xù)傳;6)當(dāng)所有應(yīng)用數(shù)據(jù)單元接收完畢并寫入磁盤后,文件接收完成,刪除對應(yīng)的信息記錄文件。2.根據(jù)權(quán)利要求1所述的一種基于單向廣播網(wǎng)絡(luò)的可靠文件接收系統(tǒng)的斷點(diǎn)續(xù)傳的方法,其特征在于所述的將待發(fā)送文件按照固定大小分片,每一文件分片附加該片文件的偏移信息和校驗(yàn)信息步驟根據(jù)系統(tǒng)性能確定文件分片的大小,把待發(fā)送文件按照該大小依次分割,最后一塊文件如果大小不足則用零填充,分割時(shí)記錄每塊文件基于文件起始位置的偏移量,并計(jì)算該文件的校驗(yàn)值,把所得數(shù)據(jù)附加在該分片文件的尾部。3.根據(jù)權(quán)利要求1所述的一種基于單向廣播網(wǎng)絡(luò)的可靠文件接收系統(tǒng)的斷點(diǎn)續(xù)傳的方法,其特征在于所述的將應(yīng)用數(shù)據(jù)單元分割成數(shù)據(jù)塊,對這些數(shù)據(jù)塊進(jìn)行編碼,生成相應(yīng)的冗余數(shù)據(jù)塊,文件發(fā)送服務(wù)端將亂序發(fā)送所有數(shù)據(jù)塊的步驟根據(jù)系統(tǒng)性能將應(yīng)用數(shù)據(jù)單元分割為等長的數(shù)據(jù)塊,若最后一個(gè)數(shù)據(jù)塊長度小于所需長度,則填充零,對所有數(shù)據(jù)單元采用前向糾錯(cuò)編碼計(jì)算,根據(jù)冗余度生成相應(yīng)數(shù)量的冗余糾錯(cuò)數(shù)據(jù)塊,所有源數(shù)據(jù)塊與冗余數(shù)據(jù)塊亂序排列,由前端平臺(tái)的文件發(fā)送服務(wù)器逐一發(fā)送。4.根據(jù)權(quán)利要求1所述的一種基于單向廣播網(wǎng)絡(luò)的可靠文件接收系統(tǒng)的斷點(diǎn)續(xù)傳的方法,其特征在于所述的用戶端接收該文件時(shí),創(chuàng)建該文件對應(yīng)的信息索引文件,每當(dāng)接收完成一個(gè)應(yīng)用數(shù)據(jù)單元,則將其寫入分配給該文件的對應(yīng)磁盤空間的步驟用戶端接收該文件時(shí)創(chuàng)建該文件對應(yīng)的信息索引文件,該索引文件記錄已經(jīng)接收到的應(yīng)用數(shù)據(jù)單元情況,每當(dāng)接收到一個(gè)應(yīng)用數(shù)據(jù)單元,首先計(jì)算校驗(yàn)該數(shù)據(jù)是否正確,然后根據(jù)應(yīng)用數(shù)據(jù)單元所攜帶的文件偏移信息,將其寫入分配給該文件的磁盤空間中的對應(yīng)的位置。5.根據(jù)權(quán)利要求1所述的一種基于單向廣播網(wǎng)絡(luò)的可靠文件接收系統(tǒng)的斷點(diǎn)續(xù)傳的方法,其特征在于所述的當(dāng)發(fā)生意外導(dǎo)致接收中斷后重新開始接收時(shí),檢查信息記錄文件是否存在,如果存在,表明該文件尚未接收完全所有的應(yīng)用數(shù)據(jù)單元,需要進(jìn)行續(xù)傳步驟當(dāng)一個(gè)新的進(jìn)程打開后傳輸同樣的文件時(shí),通過讀取該信息記錄文件中的應(yīng)用數(shù)據(jù)單元接收情況來進(jìn)行續(xù)傳,當(dāng)一個(gè)應(yīng)用數(shù)據(jù)單元被接收時(shí),先通過該應(yīng)用數(shù)據(jù)單元的的偏移位來索引信息記錄文件中該應(yīng)用數(shù)據(jù)單元的接收狀態(tài),如已接收完成,則跳過寫入磁盤動(dòng)作并返回,如未接收完成,則先寫入磁盤,寫入成功后在信息記錄文件中把該應(yīng)用數(shù)據(jù)單元的接收情況設(shè)置為已接收狀態(tài),重復(fù)進(jìn)行該過程,直至最終文件接收完成,刪除對應(yīng)的信息記錄文件。全文摘要本發(fā)明公開了一種基于單向廣播網(wǎng)絡(luò)的可靠文件接收系統(tǒng)的斷點(diǎn)續(xù)傳的方法。首先將待發(fā)送文件按照固定大小分片,每個(gè)分片的文件附加其偏移信息和校驗(yàn)信息,組合應(yīng)用數(shù)據(jù)單元提交到可靠多播層,在該層把應(yīng)用數(shù)據(jù)單元分割成數(shù)據(jù)塊,對這些數(shù)據(jù)塊進(jìn)行編碼,生成相應(yīng)的冗余數(shù)據(jù)塊,文件發(fā)送服務(wù)端亂序發(fā)送所有數(shù)據(jù)塊。當(dāng)用戶端接收該文件時(shí),創(chuàng)建該文件信息索引文件用于記錄文件數(shù)據(jù)塊的接收情況。當(dāng)接收中斷后重新接收時(shí),通過檢查信息記錄文件來判斷是否需要續(xù)傳,根據(jù)附加的文件信息續(xù)傳。采用本發(fā)明可以在文件接收斷點(diǎn)處繼續(xù)接收并跳過冗余且耗時(shí)的寫入操作,減少磁盤寫入次數(shù),保護(hù)磁盤,從而達(dá)到減少I/O次數(shù)和CPU占用率,節(jié)約接收端硬件資源的目的。文檔編號(hào)H04H60/76GK101436919SQ20081016281公開日2009年5月20日申請日期2008年12月11日優(yōu)先權(quán)日2008年12月11日發(fā)明者江肖強(qiáng),董云峰,衛(wèi)邢,魯東明,治黃申請人:浙江大學(xué)