飞鸽传书文件传输实现原理
飛鴿傳書文件傳輸實(shí)現(xiàn)原理,企業(yè)即時(shí)通訊軟件飛鴿傳書,是一款基于TCP/IP協(xié)議、基于局域網(wǎng)廣播消息模式的通訊軟件,適合企業(yè)或政府部門局域網(wǎng)內(nèi)部使用。飛鴿傳書用戶可在企業(yè)內(nèi)部或外部通過該軟件進(jìn)行工作上的交流,軟件支持消息發(fā)送、文件傳輸、語音對(duì)話等。支持統(tǒng)一的用戶管理,并且通訊記錄可保存于服務(wù)器,查詢方便。為您提供安全,穩(wěn)定的即時(shí)通訊解決方案。
此文由飛鴿傳書于2009-5-12發(fā)布,已有1140人閱讀。開發(fā)多年的飛鴿,在他的基礎(chǔ)上增加了些許功能,例如語音對(duì)話,這里繼續(xù)討論FreeEIM(飛鴿傳書),前幾天,詳細(xì)的了解了FreeEIM(飛鴿傳書)的網(wǎng)絡(luò)協(xié)議,詳細(xì)分析并且實(shí)現(xiàn)了FreeEIM(飛鴿傳書)的消息傳遞過程,這里就FreeEIM(飛鴿傳書)中的文件和文件夾的傳輸做詳細(xì)的說明。
在FreeEIM(飛鴿傳書)中,如果要進(jìn)行文件或者文件夾的傳輸,首先需要做的就是消息的應(yīng)答,通過UDP發(fā)送文件傳輸報(bào)文,另外的FreeEIM(飛鴿傳書)客戶端收到報(bào)文后,使用TCP協(xié)議發(fā)送應(yīng)答報(bào)文,這樣就開始進(jìn)行文件的傳輸了。
這里開啟兩個(gè)線程,線程1負(fù)責(zé)文件的傳送,線程2負(fù)責(zé)文件的接受,下邊做一一說明。
首先,我們知道,可以發(fā)送多個(gè)文件,這些文件需要建立鏈表保存信息。
typedef struct file_info
{
??? struct file_info *next; //雙向鏈表
??? struct file_info *forward;
??? char *file;? //文件名
??? int type;? //文件類型:文件或者文件夾
??? int size;? //文件大小
??? struct sockaddr_in addr;? //目標(biāo)網(wǎng)絡(luò)信息
} FILE_INFO;
文件傳送鏈表由專門的線程維護(hù),這樣,線程1就可以專心進(jìn)行處理文件傳輸隊(duì)列就可以了,線程1始終查詢這個(gè)鏈表,如果表頭為NULL,就說明沒有要傳輸?shù)奈募?#xff0c;表頭非空,就開始發(fā)送報(bào)文,獲得正確的應(yīng)答后,就可以開始文件的傳輸了,文件傳輸結(jié)束,將相應(yīng)的鏈表節(jié)點(diǎn)刪除。這里借鑒了很多程序中使用非常廣泛的“命名池”相關(guān)的概念,只不過這里我們使用的是“文件池”,可以這么認(rèn)為,如果有文件要傳輸,可以不用考慮是否有文件正在傳輸,只要把要傳輸?shù)奈募湃?“文件池”就可以了 , 同時(shí),不用考慮“文件池”的大小,線程1是文件池的服務(wù)線程,它檢測(cè)文件池的大小,如果非空,就會(huì)逐次傳輸文件。
這里需要特別注意的就是關(guān)于文件夾的傳輸,這個(gè)FreeEIM(飛鴿傳書)一個(gè)難點(diǎn),應(yīng)為對(duì)與文件夾的內(nèi)容是沒有顯示的,需要我們逐次的判斷,在飛鴿傳書中是這么處理的,如果是一個(gè)文件夾,就發(fā)送文件屬性為IPMSG_FILE_DIR的信息包,FreeEIM(飛鴿傳書)客戶端收到這個(gè)信息包后,就創(chuàng)建這個(gè)文件夾,然后發(fā)起發(fā)送的FreeEIM(飛鴿傳書)客戶端,進(jìn)入文件夾,傳送文件夾內(nèi)的文件,如果該文件夾下,還有文件夾,使用相同的方法,在文件夾內(nèi)的文件傳送結(jié)束后,就發(fā)送FREEEIM_FILE_RETPARENT信息包,接受的FREEEI_FILE_RETP報(bào)文的FreeEIM(飛鴿傳書)客戶端,執(zhí)行返回上一級(jí)目錄,發(fā)送端,就需發(fā)送目錄下的文件。這樣循環(huán)操作,最終完成文件的傳輸,這個(gè)過程比較難以理解。
有了上邊的知識(shí),開發(fā)文件傳輸功能就變得簡(jiǎn)單多了,文件的接受也可以類推了,同樣開啟一個(gè)線程維護(hù)接受文件鏈表,逐次接受身下的文件,鏈表為空時(shí)。文件傳輸會(huì)遇到文件讀寫問題,有的文件發(fā)送是被打開了,飛鴿傳書這樣會(huì)造成訪問違規(guī),所以要有相應(yīng)的處理,才能讓程序更加穩(wěn)健。
總結(jié)
以上是生活随笔為你收集整理的飞鸽传书文件传输实现原理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 闲记(一)
- 下一篇: 飞秋下载2010正式版_飞秋下载