下載工具的設(shè)計(jì)與開(kāi)發(fā)畢業(yè)論文.doc_第1頁(yè)
下載工具的設(shè)計(jì)與開(kāi)發(fā)畢業(yè)論文.doc_第2頁(yè)
下載工具的設(shè)計(jì)與開(kāi)發(fā)畢業(yè)論文.doc_第3頁(yè)
下載工具的設(shè)計(jì)與開(kāi)發(fā)畢業(yè)論文.doc_第4頁(yè)
下載工具的設(shè)計(jì)與開(kāi)發(fā)畢業(yè)論文.doc_第5頁(yè)
已閱讀5頁(yè),還剩49頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

下載工具的設(shè)計(jì)與開(kāi)發(fā)摘要在BT軟件以及電驢等P2P工具日益發(fā)展的今天,不管你有多少帶寬他都會(huì)100%的占用。這類(lèi)P2P軟件的下載速度完全依賴(lài)帶寬,然而,如何在不提高帶寬的前提下提高局域網(wǎng)的下載速度是一個(gè)符合實(shí)際的問(wèn)題,本文就基于該問(wèn)題提出并實(shí)現(xiàn)了“分布式下載工具”系統(tǒng)。該系統(tǒng)很好的解決了局域網(wǎng)被限速的問(wèn)題,大大提高了下載速度?!胺植际较螺d工具”聯(lián)合局域網(wǎng)內(nèi)的幾臺(tái)客戶機(jī)同時(shí)去下載Internet網(wǎng)上的同一資源的不同數(shù)據(jù)塊,下載完后按順序統(tǒng)一整合。它有下載客戶機(jī)與服務(wù)器的功能,分別運(yùn)用VC和VB.Net開(kāi)發(fā)設(shè)計(jì)??蛻魴C(jī)完成下載與連接其他用戶的功能;而服務(wù)器則管理用戶和資源情況,供客戶機(jī)提供在線用戶的數(shù)據(jù),并且服務(wù)器能夠?qū)τ脩艉唾Y源進(jìn)行控制。比如:封鎖某些不合法的資源、禁止某些不合法的用戶使用等。本系統(tǒng)設(shè)計(jì)完成后,并與其他下載軟件進(jìn)行了測(cè)試比較,提升效果明顯,有一定推廣使用價(jià)值。關(guān)鍵詞:下載速度;下載軟件;局域網(wǎng)The Development of Distributed Download Tool ABSTRACTP2P download tools like BT and e-Mule became increasingly developed nowadays. No matter how much bandwidth you have, 100 percent fully of it will be the occupied. Download speed of such p2p software is totally depends on the bandwidth. However, how to boost speed of LAN on the actuality of bandwidth is a practical issue .this article expatiates from such issue and actualize “distributed download tool” system. This system has a very good solution to the limited LAN, strongly improving the download speed. The Distributed download tool”, is a technology to join several clients at the same time to download different data blocks from the some resources on the Internet, and each client reunifies these blocks a completed file. The system can act as client and server both, respectively, with VC and VB.Net to exploit and design. As a client it does download work and connects with other users; while being the server, it manages the users and resources for the client and provides online data. Besides, the server can control users and resources. Compared with other download software, a completed “Distributed download tool” system upgrades download speed significantly and is of good popularization value. Key words: Download Speeds; Download Software; Local Area Networks目錄第一章 前言11.1項(xiàng)目簡(jiǎn)單介紹11.2 項(xiàng)目特點(diǎn)11.3 項(xiàng)目開(kāi)發(fā)背景21.4 項(xiàng)目的創(chuàng)新性21.5 項(xiàng)目開(kāi)發(fā)的總目標(biāo)2第二章 需求分析32.1 功能需求32.2 性能需求32.3 系統(tǒng)數(shù)據(jù)流圖42.3.1 系統(tǒng)總體數(shù)據(jù)流圖42.3.2 服務(wù)器端數(shù)據(jù)流圖52.3.3客戶端數(shù)據(jù)流圖6第三章 概要設(shè)計(jì)93.1 系統(tǒng)結(jié)構(gòu)設(shè)計(jì)93.1.1 系統(tǒng)結(jié)構(gòu)示意圖93.1.2 系統(tǒng)組織模塊結(jié)構(gòu)圖93.1.3 系統(tǒng)HIPO表103.2 接口設(shè)計(jì)113.2.1 用戶界面接口113.2.2 軟件系統(tǒng)接口133.2.3 軟件內(nèi)部接口133.3 數(shù)據(jù)庫(kù)設(shè)計(jì)13第四章 詳細(xì)設(shè)計(jì)154.1基本設(shè)計(jì)概念和處理流程154.2 關(guān)鍵技術(shù)代碼17第五章 系統(tǒng)的關(guān)鍵技術(shù)和難點(diǎn)285.1 MFC消息傳遞機(jī)制技術(shù)285.2 VC Socket通訊技術(shù)285.3 VC多線程技術(shù)29第六章 軟件測(cè)試與改進(jìn)思想306.1 軟件測(cè)試306.2 軟件改進(jìn)思想31第七章 安裝與使用說(shuō)明327.1 服務(wù)器端安裝說(shuō)明327.2 服務(wù)器端操作說(shuō)明347.3 客戶端的安裝說(shuō)明387.4 客戶端使用說(shuō)明41參考文獻(xiàn)44結(jié)束語(yǔ)46致謝47分布式下載工具的設(shè)計(jì)與開(kāi)發(fā)第一章 前言1.1項(xiàng)目簡(jiǎn)單介紹本下載工具是聯(lián)合局域網(wǎng)內(nèi)的幾臺(tái)客戶機(jī)同時(shí)去下載Internet網(wǎng)上的同一資源的不同數(shù)據(jù)塊,下載完后按順序統(tǒng)一整合。它由下載客戶機(jī)與服務(wù)器兩個(gè)部分組成,其中客戶機(jī)完成下載與連接其他用戶的功能;而服務(wù)器則管理用戶和資源情況,供客戶機(jī)提供在線用戶的數(shù)據(jù),并且服務(wù)器能夠?qū)τ脩艉唾Y源進(jìn)行控制。比如:封鎖某些不合法的資源、禁止某些不合法的用戶使用等。其原理是利用局域網(wǎng)內(nèi)高的傳輸速度和解決局域網(wǎng)被限速問(wèn)題。例如:局域網(wǎng)的主機(jī)A要去下載Internet上某服務(wù)器的資源,那么它就會(huì)聯(lián)合局域網(wǎng)內(nèi)的幾臺(tái)主機(jī)(主機(jī)B,主機(jī)C,主機(jī)D等),它先請(qǐng)求服務(wù)器獲取信息(資源大小),然后根據(jù)資源大小和聯(lián)合的主機(jī)數(shù)平均分配任務(wù),分別向服務(wù)器下載數(shù)據(jù)。在下載過(guò)程中,每臺(tái)機(jī)將定時(shí)發(fā)送本機(jī)所下載的資源給主機(jī)A,直到下載完成。在下載過(guò)程中,如果主機(jī)C的平均速度與其他主機(jī)的平均下載速度相差懸殊的話,那么主機(jī)A將發(fā)出撤銷(xiāo)主機(jī)C的請(qǐng)求,然后主機(jī)A重新搜索局域網(wǎng)內(nèi)的其他主機(jī)代替主機(jī)C。若局域網(wǎng)內(nèi)的主機(jī)都不能接受請(qǐng)求的話,那主機(jī)A將把主機(jī)C剩下的資源重新平均分配給正在下載的主機(jī),這樣就完成了整個(gè)下載任務(wù),因此得到了很短的下載時(shí)間。1.2 項(xiàng)目特點(diǎn) 1. 本系統(tǒng)實(shí)現(xiàn)了多臺(tái)機(jī)的聯(lián)機(jī)下載。 2. 本系統(tǒng)能夠?qū)C(jī)器的性能進(jìn)行分析,然后調(diào)整每臺(tái)機(jī)的下載量。 3. 本系統(tǒng)能夠檢測(cè)客戶端機(jī)器突然死機(jī)或者關(guān)閉的情況,對(duì)其釋放,然后重新尋找新的客戶端進(jìn)行下載剩下的資源。 4. 本系統(tǒng)能夠?qū)γ總€(gè)資源進(jìn)行管理,當(dāng)有遇到一些不合法的資源時(shí),可對(duì)其資源進(jìn)行封閉。 5. 本系統(tǒng)能夠有效管理客戶端的使用,當(dāng)有客戶進(jìn)行一些非法資源的傳播時(shí),可對(duì)他進(jìn)行封鎖。1.3 項(xiàng)目開(kāi)發(fā)背景 隨著網(wǎng)絡(luò)的發(fā)展以及各種應(yīng)用軟件的出現(xiàn),我們可以通過(guò)網(wǎng)絡(luò)實(shí)現(xiàn)與遠(yuǎn)方親人進(jìn)行電話聊天,與朋友進(jìn)行互動(dòng)游戲。因此相應(yīng)的網(wǎng)絡(luò)帶寬也越來(lái)越受到人們的重視,人們一般通過(guò)租用更多的帶寬來(lái)提高網(wǎng)絡(luò)速度。但是在BT軟件以及電驢等P2P工具日益發(fā)展的今天,不管你有多少帶寬他都會(huì)100%的占用。所以目前,如何封鎖P2P軟件逐漸成為局域網(wǎng)網(wǎng)絡(luò)管理員頭疼的問(wèn)題,很多局域網(wǎng)都將這個(gè)問(wèn)題轉(zhuǎn)換為帶寬限制,他們通過(guò)一些軟件和路由的控制有效地限制了網(wǎng)絡(luò)帶寬,從而實(shí)現(xiàn)對(duì)P2P軟件的控制,大大影響了P2P下載軟件的下載速度,效果非常顯著。但是我們總是追求更高品質(zhì)的網(wǎng)絡(luò)生活,希望下載速度能夠“再快一點(diǎn)”。對(duì)此,我將根據(jù)這些存在的問(wèn)題設(shè)計(jì)出了此系統(tǒng),大大提高了下載速度。1.4 項(xiàng)目的創(chuàng)新性1. 本軟件能夠主動(dòng)連接其他機(jī)器分塊進(jìn)行下載,從而不會(huì)出現(xiàn)下載重復(fù)資源的現(xiàn)象,而其他P2P軟件則是被動(dòng)的,避免不了下載重復(fù)資源。2. 本軟件能夠有效達(dá)到了資源共享,充分利用了局域網(wǎng)內(nèi)高的傳輸速度的特點(diǎn),達(dá)到了資源的高效利用。1.5 項(xiàng)目開(kāi)發(fā)的總目標(biāo)系統(tǒng)開(kāi)發(fā)的總目標(biāo)是:充分利用局域網(wǎng)內(nèi)的高速的傳輸速率與解決局域網(wǎng)內(nèi)被限速帶來(lái)的下載速度慢的問(wèn)題來(lái)提高他們的下載速度。 第二章 需求分析2.1 功能需求根據(jù)校園網(wǎng)特點(diǎn)和目前的下載工具狀況,我對(duì)這個(gè)系統(tǒng)的需求具有以下幾個(gè)主要功能:1. 單機(jī)下載因特網(wǎng)上的資源。2. 連接局域網(wǎng)內(nèi)的其他用戶一起下載因特網(wǎng)上的資源。3. 當(dāng)遇到本局域網(wǎng)內(nèi)有其他用戶曾下載過(guò)的資源,系統(tǒng)能夠識(shí)別它,然后直接從本局域網(wǎng)下載此資源。針對(duì)以上幾個(gè)主要功能,可把本系統(tǒng)分為兩大模塊:分布式下載工具客戶端和分布式下載工具服務(wù)器端。其中分布式下載工具客戶端又可分為發(fā)起下載管理模塊和接受下載管理模塊。2.2 性能需求 本系統(tǒng)是利用局域網(wǎng)內(nèi)每臺(tái)機(jī)互傳的速度快的原理,并且是為了解決局域網(wǎng)內(nèi)被限速導(dǎo)致下載速度慢的問(wèn)題,所以本系統(tǒng)在一個(gè)局域網(wǎng)內(nèi)并且該局域網(wǎng)內(nèi)的IP被限了速度的環(huán)境下使用時(shí),效果將會(huì)達(dá)到相當(dāng)明顯。2.3 系統(tǒng)數(shù)據(jù)流圖2.3.1 系統(tǒng)總體數(shù)據(jù)流圖 圖2.1 系統(tǒng)總體數(shù)據(jù)流圖從圖2.1系統(tǒng)總體數(shù)據(jù)流圖可看出,客戶端新建下載任務(wù)首先向服務(wù)器端發(fā)送命令,等待服務(wù)器端返回的可供聯(lián)機(jī)的地址,然后客戶端根據(jù)這些地址向客戶端發(fā)送聯(lián)機(jī)請(qǐng)求,等待客戶端回應(yīng),最后一起參與下載。2.3.2 服務(wù)器端數(shù)據(jù)流圖圖2.2 服務(wù)器端頂層數(shù)據(jù)流圖 由上圖可看出,客戶端發(fā)送命令到服務(wù)器端,服務(wù)器端接收命令,然后對(duì)命令的一次處理,處理完后把相應(yīng)的數(shù)據(jù)存入數(shù)據(jù)庫(kù),然后再?gòu)臄?shù)據(jù)庫(kù)取出數(shù)據(jù),然后把數(shù)據(jù)經(jīng)過(guò)一次命令處理后把他轉(zhuǎn)為命令,最后把命令發(fā)送給客戶端。圖2.3 系統(tǒng)第二層數(shù)據(jù)流圖 服務(wù)器端第二層數(shù)據(jù)流圖如上圖所示,命令在處理之后分為6種不同處理過(guò)程,系統(tǒng)分別對(duì)不同的處理過(guò)程來(lái)操作數(shù)據(jù)庫(kù),并把所得的結(jié)果經(jīng)過(guò)命令格式化轉(zhuǎn)變?yōu)槊?,最后發(fā)送給客戶端。2.3.3客戶端數(shù)據(jù)流圖 圖2.4 客戶端頂層數(shù)據(jù)流圖由圖2.4可看出客戶端下載任務(wù)時(shí),向服務(wù)器端發(fā)出請(qǐng)求,獲取可供聯(lián)機(jī)的用戶,然后進(jìn)行聯(lián)機(jī)區(qū)下載。 圖2.5 客戶端第二層數(shù)據(jù)流圖 由圖2.5可看出,客戶端與服務(wù)器,客戶端與客戶端之間都分別進(jìn)行命令分析,對(duì)不同的命令進(jìn)行相應(yīng)的操作。第三章 概要設(shè)計(jì)3.1 系統(tǒng)結(jié)構(gòu)設(shè)計(jì)3.1.1 系統(tǒng)結(jié)構(gòu)示意圖圖3.1 系統(tǒng)結(jié)構(gòu)示意圖3.1.2 系統(tǒng)組織模塊結(jié)構(gòu)圖圖3.2 系統(tǒng)組織模塊結(jié)構(gòu)圖3.1.3 系統(tǒng)HIPO表(a) 發(fā)起下載管理模塊IPO表(b) 接收下載管理模塊IPO表(C)服務(wù)器管理模塊圖3.3 系統(tǒng)HIPO表3.2 接口設(shè)計(jì)3.2.1 用戶界面接口本系統(tǒng)以一個(gè)友好而簡(jiǎn)單的界面呈現(xiàn)給用戶,如下圖:圖3.4 客戶端界面圖資源列表區(qū)用戶列表區(qū)信息顯示區(qū)資源搜索區(qū) 圖3.5 客戶端界面圖3.2.2 軟件系統(tǒng)接口(1)客戶端與客戶端之間的通訊。采用TCP通訊協(xié)議。發(fā)起下載客戶端發(fā)送給接收下載客戶端之間的命令格式:URLStartbytesEndbytes結(jié)束字節(jié)開(kāi)始字節(jié)資源的url地址結(jié)束標(biāo)志(2)客戶端與服務(wù)器端之間的通訊。采用TCP通訊協(xié)議??蛻舳税l(fā)送給服務(wù)器端的命令格式:StatusIP#狀態(tài)客戶端IP地址其中狀態(tài)包括:ON 系統(tǒng)啟動(dòng) END 系統(tǒng)關(guān)閉 NEW 新建下載任務(wù) CHANGE 改變用戶。 服務(wù)器返回客戶端的命令格式:IP/#有效的IP地址,多個(gè)IP之間用”/”分開(kāi)結(jié)束標(biāo)志3.2.3 軟件內(nèi)部接口表 3.1 主要的模塊接口表接口名稱(chēng)傳遞參數(shù)接口說(shuō)明CHttpDowndLoad:DownLoad()下載基本信息下載服務(wù)器資源CHttpDowndLoad:TestLink()url測(cè)試能否連接服務(wù)器CHttpDowndLoad:MTConnectThread()用戶IP地址連接參與下載的用戶CHttpDowndLoad:MTServerThreadAccept()無(wú)創(chuàng)建監(jiān)聽(tīng)對(duì)象CHttpDowndLoad:SendData()連接套接字發(fā)送數(shù)據(jù)3.3 數(shù)據(jù)庫(kù)設(shè)計(jì)表 3.2 UserIP 用戶信息表字段名類(lèi)型說(shuō)明備注UserIDInt用戶ID號(hào)主鍵,自動(dòng)標(biāo)識(shí)UserIPVarchar(16)用戶IP地址StatusInt用戶狀態(tài)-1為封鎖 0為離線,1為在線表3.3 UserDownInfo 用戶下載資源信息表字段名類(lèi)型說(shuō)明備注InfoIDInt資源ID主鍵,自動(dòng)標(biāo)識(shí)UserIPVarchar(16)用戶IP地址URLVarchar資源下載的url地址PathVarchar資源存放路徑FileNameVarchar資源存放名稱(chēng)DownTimeDate下載時(shí)間FinishFlagInt完成標(biāo)志0為未完成,1為完成ForbidInt封鎖標(biāo)志 -1為封鎖,0為正常第四章 詳細(xì)設(shè)計(jì)4.1基本設(shè)計(jì)概念和處理流程創(chuàng)建下載任務(wù)模塊表示需要下載某一資源的用戶所用的模塊,其工作流程圖: 圖4.1 發(fā)起下載管理模塊工作流程圖接收下載命令模塊表示接收發(fā)起機(jī)的下載命令進(jìn)行下載,其流程圖如圖4.2圖4.2 接收下載管理模塊工作流程圖用戶IP管理服務(wù)器,用來(lái)管理在線用戶,提供客戶機(jī)可參與下載的用戶IP信息。其工作流程圖如下:圖4.3 服務(wù)器端工作流程圖4.2 關(guān)鍵技術(shù)代碼1. 下載資源代碼UINT CHttpDowndLoad:DownLoad(LPVOID pParam)CHttpSocket HttpSocket1; IDInfo *IdInfo;IdInfo=new IDInfo;IdInfo=(IDInfo *)pParam; const char *pRequestHeader = NULL;char *pResponseHeader=NULL;char *pAcceptType=NULL; long nLength; DWORD dwServiceType;CString strServer;CString strObject;unsigned short nPort;/得到視圖類(lèi)的指針/CDownLoadView* dlv;CMDIFrameWnd *pFrame = (CMDIFrameWnd*)AfxGetApp()-m_pMainWnd; / Get the active MDI child window. CMDIChildWnd *pChild=(CMDIChildWnd *) pFrame-GetActiveFrame(); / Get the active view attached to the active MDI child window. POSITION pos=pChild-GetActiveDocument()-GetFirstViewPosition(); CDownLoadView *pView=(CDownLoadView*)pChild-GetActiveDocument()-GetNextView(pos); CFile* DownloadFile; /打開(kāi)在StartHttpDownLoad()中創(chuàng)建的文件DownloadFile=new CFile;DownloadFile-Open(pView-m_taskdowninfoIdInfo-TaskID.savepath+pView-m_taskdowninfoIdInfo-TaskID.filename,CFile:modeWrite|CFile:shareDenyNone);HttpSocket1.CloseSocket; AfxParseURL(LPCTSTR)(pView-m_taskdowninfoIdInfo-TaskID.url),dwServiceType,strServer, strObject, nPort);pRequestHeader = HttpSocket1.FormatRequestHeader(LPTSTR)(LPCTSTR)strServer,(LPTSTR)(LPCTSTR)strObject,nLength,NULL,NULL,pView-m_taskdowninfoIdInfo-TaskID.ThreadDownInfoIdInfo-ThreadID.FromBytes,pView-m_taskdowninfoIdInfo-TaskID.ThreadDownInfoIdInfo-ThreadID.ToBytes,0,NULL); DownloadFile-Seek(pView-m_taskdowninfoIdInfo-TaskID.ThreadDownInfoIdInfo-ThreadID.FromBytes,CFile:begin); /設(shè)置文件指針位置*/HttpSocket1.Socket();HttpSocket1.Connect(LPTSTR)(LPCTSTR)strServer,nPort);HttpSocket1.SendRequest();pResponseHeader=HttpSocket1.GetResponseCharPoint();int nSvrState = HttpSocket1.GetServerState();CString csState;csState.Format(%d,nSvrState);csState=csState.Left(1); if(csState=2)char pData5024; /用于存放接收數(shù)據(jù)的字符數(shù)組long nReceSize = 0; /實(shí)際接收數(shù)據(jù)的長(zhǎng)度(服務(wù)器返回來(lái)的值)CString fpath;long rsize,sendsize;rsize=0; sendsize=0; long nsize; char buf15024; nsize=pView-m_taskdowninfoIdInfo-TaskID.ThreadDownInfoIdInfo-ThreadID.ToBytes-pView-m_taskdowninfoIdInfo-TaskID.ThreadDownInfoIdInfo-ThreadID.FromBytes; while(rsizensize)nReceSize = HttpSocket1.Receive(pData,5024);if(nReceSizeWrite(pData,nReceSize); rsize=rsize+nReceSize;pView-m_taskdowninfoIdInfo-TaskID.finishsize+=nReceSize;DownloadFile-Close();pView-m_taskdowninfoIdInfo-TaskID.ThreadDownInfoIdInfo-ThreadID.FinishFlag=true; :PostMessage(pView-m_hWnd,WM_SENDDATA,0,(long)&IdInfo); return 0;2. 連接其他用戶代碼UINT CHttpDowndLoad:MTConnectThread(LPVOID pParam)/得到視圖類(lèi)的指針 /CDownLoadView* dlv;CMDIFrameWnd *pFrame = (CMDIFrameWnd*)AfxGetApp()-m_pMainWnd; / Get the active MDI child window. CMDIChildWnd *pChild=(CMDIChildWnd *) pFrame-GetActiveFrame(); / Get the active view attached to the active MDI child window. POSITION pos=pChild-GetActiveDocument()-GetFirstViewPosition(); CDownLoadView *pView=(CDownLoadView*)pChild-GetActiveDocument()-GetNextView(pos); IDInfo *IdInfo;IdInfo=new IDInfo;IdInfo=(IDInfo*)pParam;char buf1024;sockaddr_in addr;addr.sin_addr.S_un.S_addr = inet_addr(pView-m_taskdowninfoIdInfo-TaskID.UserDownInfoIdInfo-ThreadID.UserIP);addr.sin_family=AF_INET;addr.sin_port=LOCAL_PORT;WSADATA wsaData;WSAStartup(0x101,&wsaData);SOCKET g_ConnectSocket;g_ConnectSocket = socket(AF_INET, SOCK_STREAM,0);if(g_ConnectSocket=INVALID_SOCKET)return -1;if(connect(g_ConnectSocket,(sockaddr*)&addr,sizeof(addr)=-1)AfxMessageBox(無(wú)法連接到客戶機(jī));return -1;pView-m_taskdowninfoIdInfo-TaskID.UserDownInfoIdInfo-ThreadID.s=g_ConnectSocket;CString temp,finishsize,fromsize;fromsize.Format(%d,pView-m_taskdowninfoIdInfo-TaskID.UserDownInfoIdInfo-ThreadID.FromBytes); finishsize.Format(%d,pView-m_taskdowninfoIdInfo-TaskID.UserDownInfoIdInfo-ThreadID.ToBytes);temp=URL:;temp+=pView-m_taskdowninfoIdInfo-TaskID.url;temp+=lfromsize:; temp+=fromsize; temp+=lfinishsize:;temp+=finishsize;temp+=#;strcpy(buf,temp);int slen;slen=0;int tlen;tlen=temp.GetLength(); while(slen=0) break;else if(temp2.Find(cmd:end)=0)closesocket(g_ConnectSocket);:PostMessage(pView-m_hWnd,WM_CHANGEUSR,(long)IdInfo,0); return 0;else CString speed2,finishsize2,time2; ParseBuf2(buf2,finishsize2,speed2,time2); pView-m_taskdowninfoIdInfo-TaskID.UserDownInfoIdInfo-ThreadID.Rate=finishsize2; pView-m_taskdowninfoIdInfo-TaskID.UserDownInfoIdInfo-ThreadID.Speed=speed2; pView-m_taskdowninfoIdInfo-TaskID.UserDownInfoIdInfo-ThreadID.Time=time2; CFile* rfile; /打開(kāi)在StartHttpDownLoad()中創(chuàng)建的文件rfile=new CFile;rfile-Open(pView-m_taskdowninfoIdInfo-TaskID.savepath+pView-m_taskdowninfoIdInfo-TaskID.filename,CFile:modeWrite|CFile:shareDenyNone);rfile-Seek(pView-m_taskdowninfoIdInfo-TaskID.UserDownInfoIdInfo-ThreadID.FromBytes,CFile:begin); /設(shè)置文件指針位置long rlength,len,buflen,startsize;rlength=0;char buf15024;while(rlengthm_taskdowninfoIdInfo-TaskID.UserDownInfoIdInfo-ThreadID.ToBytes-pView-m_taskdowninfoIdInfo-TaskID.UserDownInfoIdInfo-ThreadID.FromBytes)len=recv(g_ConnectSocket,buf1,5024,0);rfile-Write(buf1,len);rlength+=len;pView-m_taskdowninfoIdInfo-TaskID.finishsize+=pView-m_taskdowninfoIdInfo-TaskID.finishsize; rfile-Close;return 0;3. 點(diǎn)對(duì)點(diǎn)互傳代碼UINT CHttpDowndLoad:SendFile(LPVOID pParam)/得到視圖類(lèi)的指針 /CDownLoadView* dlv;CMDIFrameWnd *pFrame = (CMDIFrameWnd*)AfxGetApp()-m_pMainWnd; / Get the active MDI child window. CMDIChildWnd *pChild=(CMDIChildWnd *) pFrame-GetActiveFrame(); / Get the active view attached to the active MDI child window. POSITION pos=pChild-GetActiveDocument()-GetFirstViewPosition(); CDownLoadView *pView=(CDownLoadView*)pChild-GetActiveDocument()-GetNextView(pos); ConnectInfo *ConInfo;ConInfo=(ConnectInfo *)pParam;long FileSize;long ReadSize;long SendSize;long TempSize; CString temp;CString SFileSize;char buf128;char data5*1024;CFile pFile; if(pFile.Open(ConInfo-Path,CFile:modeRead|CFile:shareDenyNone)FileSize=pFile.GetLength();SFileSize.Format(%d,FileSize); temp=STATUS:HAVESIZE:;temp+=SFileSize;temp+=#;strcpy(buf,temp);send(ConInfo-s,buf,temp.GetLength(),0);ReadSize=0;SendSize=0;while(SendSizes,data,ReadSize,0);SendSize+=ReadSize;elsetemp=STATUS:NONESIZE:#;strcpy(buf,temp);send(ConInfo-s,buf,temp.GetLength(),0);return 0;return 0;4.服務(wù)器命令處理代碼Public Function DoEvent(ByVal str As String, ByVal ss As Socket) As Boolean Dim dv As DataView Dim userip As String Dim status As String status = str.Substring(str.IndexOf(STATUS:) + 7, str.IndexOf(IP:) - str.IndexOf(STATUS:) - 7) Select Case status Case START 用戶啟動(dòng)命令 userip = str.Substring(str.IndexOf(IP:) + 3, str.IndexOf(#) - str.IndexOf(IP:) - 3) dv = db.RunSQLAsDataView(select * from UserIP where UserIP like % + userip + %) 查詢(xún)用戶信息是否已經(jīng)在數(shù)據(jù)庫(kù) If dv.Count 0 Then 如果用戶已經(jīng)存在,則直接更新用戶狀態(tài)為在線 db.RunDelOrInsSQL(update UserIP set status=1 where UserIP like % + userip + %) Else 如果用戶不存在,則插入用戶IP并且置狀態(tài)為在線 db.RunDelOrInsSQL(insert into UserIP(UserIP,status) values( + userip + ,1) End If RefreshUserList() txbShowInfo控件顯示用戶上線信息 ShowData(用戶 + userip + 上線了) Case CLOSE 用戶離開(kāi)命令 userip = str.Substring(str.IndexOf(IP:) + 3, str.IndexOf(#) - str.IndexOf(IP:) - 3) dv = db.RunSQLAsDataView(select * from UserIP where UserIP like % + userip + %) 查詢(xún)用戶信息是否已經(jīng)在數(shù)據(jù)庫(kù) If dv.Count 0 Then 如果用戶已經(jīng)存在,則直接更新用戶狀態(tài)為離線 db.RunDelOrInsSQL(update UserIP set status=0 where UserIP like % + userip + %) Else 如果用戶不存在,則插入用戶IP并且置狀態(tài)為離線 db.RunDelOrInsSQL(insert into UserIP(UserIP,status) values( + userip + ,0) End If RefreshUserList() txbShowInfo控件顯示用戶離線信息 ShowData(用戶 + userip + 離開(kāi)了) Case CHANGE 用戶改變連接用戶命令 Dim buf As String = userip = str.Substring(str.IndexOf(IP:) + 3, str.IndexOf(#) - str.IndexOf(IP:) - 3) dv = db.RunSQLAsDataView(select UserIP from UserIP where UserIP not like % + userip + % and status like 1) buf = dv(0)(UserIP).ToString ss.Send(Encoding.Default.GetBytes(buf) Case NEW 用戶新建任務(wù)命令 Dim i As Integer Dim buf As String = userip = str.Substring(str.IndexOf(IP:) + 3, str.IndexOf(#) - str.IndexOf(IP:) - 3) dv = db.RunSQLAsDataView(select UserIP from UserIP where UserIP not like % + userip + % and status like 1) buf = / For i = 0 To dv.Count - 1 buf += dv(i)(UserIP).ToString If i = 10 Or i = dv.Count - 1 Then Exit For Else buf += / End If Next buf += # ss.Send(Encoding.Default.GetBytes(buf) Case DOWN 客戶下載命令 Dim url As String Dim buf As String = STATUS:NONE# url = str.Substring(str.IndexOf(URL:) + 4, str.IndexOf(#) - str.IndexOf(URL:) - 4) dv = db.RunSQLAsDataView(select * from UserDownInfo where Url= + url + ) If dv.Count 0 Then buf = STATUS:HAVE buf += IP: + dv(0)(UserIP).ToString buf += SAVEPATH: + dv(0)(Path).ToString buf += # Else buf = STATUS:NONEIP:# End If ss.Send(Encoding.Default.GetBytes(buf) Case FINISH 資源完成下載命令 Dim url As String Dim savepath As String Dim filename As String userip = str.Substring(str.IndexOf(IP:) + 3, str.IndexOf(URL:) - str.IndexOf(IP:) - 3) url = str.Substring(str.IndexOf(URL:) + 4, str.IndexOf(SAVEPATH:) - str.IndexOf(URL:) - 4) savepath = str.Substring(str.IndexOf(SAVEPATH) + 9, str.IndexOf(#) - str.IndexOf(SAVEPATH:) - 9) filename = sa

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論