freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

多線程斷點(diǎn)續(xù)傳的ftp軟件設(shè)計(jì)畢業(yè)論文-文庫(kù)吧資料

2025-07-03 14:04本頁(yè)面
  

【正文】 0)。 =1。 =n。 return 1。 //有錯(cuò)的話 if(ret0){ AfxMessageBox(聯(lián)接錯(cuò)誤)。 //聯(lián)接服務(wù)器 ret=connect(m_socket,(LPSOCKADDR)amp。 m_socket=socket(AF_INET,SOCK_STREAM,0)。 =htons(1028)。 int rc=0。下面先介紹sendrequest(int n),在開(kāi)始前,向服務(wù)器發(fā)獲得文件消息命令,以便讓客戶(hù)端知道有哪些文件可傳 int cdownload::sendrequest(int n){ //建套接字 sockaddr_in local。 virtual ~cdownload()。//下載進(jìn)程 int sendrequest(int n)。 CString fnametwo。 int filerange[100]。開(kāi)始傳文件n long m_index。//發(fā)命令1 downinfo doinfo。//開(kāi)線程 DWORD finish1()。最后,收尾。} 客戶(hù)端代碼實(shí)現(xiàn) 客戶(hù)端最重要,也最復(fù)雜,它負(fù)責(zé)線程的管理,進(jìn)度的記錄等工作。 len=lenaa。 break。 int aa=sendn(so,m_buf,len2)。 //開(kāi)始接收,直到發(fā)完整個(gè)文件 while(len10){ len2=lenSIZE?SIZE:len。 int len1。 char m_buf[SIZE]。 //打開(kāi)文件 (myname, CFile::modeRead | CFile::typeBinary|CFile::shareDenyNone)。 (%s,nameph[fino])。} return 0。 AfxGetMainWnd()SendMessageToDescendants(WM_AGE1,(LPARAM)(0),1)。 //讀文件,并傳送 readfile(pthis,fiinfoseek,fiinfolen,fiinfofileno)。 //我準(zhǔn)備好了,可以傳文件了 case 2: //發(fā)文件消息給主函數(shù)(%s 文件被請(qǐng)求!%s\n,zmfile[fiinfofileno].name,nameph[fiinfofileno])。 AfxGetMainWnd()SendMessageToDescendants(WM_AGE1,(LPARAM)(0),1)。 return 1。 //檢驗(yàn)客戶(hù)想說(shuō)什么 switch(fiinfotype) { //我要讀文件信息 case 0: //讀文件 aa=sendn(pthis,(char*)zmfile,1080)。 } //把傳來(lái)的信息轉(zhuǎn)為定義的文件信息 fiinfo=(fileinfo*)m_buf。 //如果有錯(cuò)就返回 if(aa0){ closesocket (pthis)。 //監(jiān)聽(tīng)函數(shù)傳來(lái)的用戶(hù)套接字 SOCKET pthis=(SOCKET)lpparam。 //接收緩存 char* m_buf。//文件名}。//文件長(zhǎng)度 int seek。//文件號(hào) int type。 } return 0。 //建立用戶(hù)線程 ::CreateThread(NULL,0,clientthread,(LPVOID)s1,0,amp。 ()。 aa=一人聯(lián)入!\n。 s1=accept(pthis,NULL,NULL)。 return 0。 AfxGetMainWnd()SendMessageToDescendants(WM_AGE1,(LPARAM)(0),1)。 //如果錯(cuò)就顯示信息if(rc0){ CString aaa。用VC++實(shí)現(xiàn)如下:DWORD WINAPI listenthread(LPVOID lpparam){ //由主函數(shù)傳來(lái)的套接字 SOCKET pthis=(SOCKET)lpparam。而為了把問(wèn)題簡(jiǎn)化,就讓服務(wù)器只要聽(tīng)懂兩句話,一就是客戶(hù)說(shuō)“請(qǐng)求讀文件信息”,二就是“準(zhǔn)備好了,可以傳文件了”。 FTP工作流程 FTP典型工作流程如下: (1)客戶(hù)端創(chuàng)建socket;(2)客戶(hù)端連接FTP服務(wù)器;(3)客戶(hù)端發(fā)送命令到FTP服務(wù)器;(4)客戶(hù)端接收FTP服務(wù)的返回信息;(5)客戶(hù)端發(fā)送PORT命令請(qǐng)求建立數(shù)據(jù)鏈接;(6)客戶(hù)端連接FTP服務(wù)器返回的IP及端口;(7)客戶(hù)端發(fā)送數(shù)據(jù)到服務(wù)器;(8)客戶(hù)端發(fā)QUIT結(jié)束會(huì)話。運(yùn)用VC++編程語(yǔ)言,基于TCP/IP協(xié)議服務(wù)器端較簡(jiǎn)單,主要就是加入待傳文件,監(jiān)聽(tīng)客戶(hù),和傳送文件。 //各個(gè)線程的任務(wù)描述}m_inforImpl。 //下載線程數(shù) DWORD alreadyDownloadCnt。 //文件保存位置 DWORD fileSize。 //任務(wù)結(jié)束位置 }m_fromTo。數(shù)據(jù)結(jié)構(gòu)如下: typedef struct FromToImpl{ DWORD from。在下載文件的過(guò)程中始終打開(kāi)配置文件,這樣速度提高了很多。就是讀取文件數(shù)據(jù)太過(guò)頻繁。線程1和線程3在平衡負(fù)載的時(shí)候,線程正在下載數(shù)據(jù),如果所剩的數(shù)據(jù)比接受緩沖器的大小還小,線程1和線程3的部分下載數(shù)據(jù)將會(huì)重復(fù)。周而復(fù)始直到各個(gè)線程都完成任務(wù)。此時(shí),線程1就分析各個(gè)線程的任務(wù),找出任務(wù)最為繁忙的一個(gè)線程:如線程3:14816218724。線程1每次下載一塊數(shù)據(jù)后就要調(diào)整任務(wù),如第一次下載了20800字節(jié)的數(shù)據(jù),那么線程1的任務(wù)將改為:2080072908。在開(kāi)始下載時(shí),文件平均分成若干塊進(jìn)行下載。然后利用fseek函數(shù)將數(shù)據(jù)正確的覆蓋原先的0。39。39。如果存在,說(shuō)明上次已經(jīng)下載過(guò)部分該文件,就可以斷點(diǎn)續(xù)傳了。 8個(gè)下載線程同時(shí)下載文件時(shí),完成部分下載是隨機(jī)的。訪問(wèn)文件完畢必須將FileLocked = false。所以使用Sleep(10)睡眠等待。}8個(gè)線程下載文件時(shí),都要對(duì)內(nèi)容文件和配置文件進(jìn)行讀寫(xiě)。 fclose(file)。 //對(duì)讀取的文件做處理 } }while(pos fileSize)。 do{ readLen = fread(buffer,sizeof(char),MAX_BUFFER_LEN,file)。 fileSize = ftell(file)。 if(file == NULL) return false。 //MAX_BUFFER_LEN 在頭文件里定義,這里能夠保證數(shù)據(jù)不丟失,也不至于內(nèi)存逸出 char *buffer = new char[MAX_BUFFER_LEN]。 DWORD fileSize ,pos。一個(gè)比較理想的方法是這樣的。而是生成8?jìng)€(gè)不同的文件偏移量。 第一步:。文件的大小為:364544字節(jié)。這樣,主線程就可隨時(shí)發(fā)現(xiàn)文件已下載完畢,可合并文件了。在下載線程中,當(dāng)文件下載完畢后,先鎖定全局CriticalSection變量,之后將計(jì)數(shù)器加一,再釋放全局CriticalSection變量。WINDOWS提供了幾種線程互斥技術(shù),如CriticalSection,Mutex等,關(guān)于他們的詳細(xì)信息,大家可參考各種編程書(shū)籍,在這里我推薦使用CriticalSection技術(shù)。下載完畢后,編段代碼合并文件即可。(三) FTP多線程下載技術(shù) 完登陸操作后,先發(fā)送“REST 100”命令,測(cè)試下服務(wù)器是否支持?jǐn)帱c(diǎn)下載,如返回成功代碼,就可實(shí)現(xiàn)多線程下載;然后發(fā)送“SIZE”,取得文件的大小,根據(jù)文件大小,將文件分為幾部分,記下各部分的偏移地址,并作為參數(shù),交給各線程去下載。   如果前面發(fā)送的命令均得到成功響應(yīng),則表示服務(wù)器數(shù)據(jù)準(zhǔn)備完畢。如果前面發(fā)送的命令均得到成功響應(yīng),則開(kāi)始發(fā)送下列請(qǐng)求,告訴服務(wù)器準(zhǔn)備數(shù)據(jù)。登陸成功后,發(fā)送 TYPE 設(shè)定數(shù)據(jù)傳輸格式(字符格式還是二進(jìn)制方式),然后發(fā)送PORT 或 PASV 選擇數(shù)據(jù)傳輸方式??蛻?hù)端可分別向服務(wù)器發(fā)送 PORT 或 PASV 命令指定連接模式。PORT 方式下,客戶(hù)端監(jiān)聽(tīng)某端口,服務(wù)器主動(dòng)發(fā)起數(shù)據(jù)連接。 (二) 如何從 FTP服務(wù)器上下載文件 FTP 服務(wù)端和客戶(hù)端之間存在兩中連接:一中用于傳輸 FTP 命令(命令必須由客戶(hù)端主動(dòng)發(fā)起),連接始終存在;另一中用于向客戶(hù)端傳輸數(shù)據(jù),每當(dāng)要傳輸文件或目錄文件列表信息時(shí)則建立一個(gè)數(shù)據(jù)連接,數(shù)據(jù)傳輸完畢立即斷開(kāi)。 如果使用此命令時(shí),要發(fā)送32位的IP地址和16位的TCP端口號(hào)。 (從REST參數(shù)指定的偏移量開(kāi)始傳送) 傳輸參數(shù)也不變。 有些類(lèi)型需要第二個(gè)參數(shù),第一個(gè)參數(shù)由單個(gè)Telnet字符定義,第二個(gè)參數(shù)是十進(jìn)制整數(shù)指定字節(jié)大小,參數(shù)間以SP分隔。 此命令緊跟USER命令,在某些站點(diǎn)它是完成訪問(wèn)控制不可缺少的一步。 服務(wù)器可以在任何時(shí)間接收新的USER命令以改變?cè)L問(wèn)控制和(或)帳戶(hù)信息。 USER:參數(shù)是標(biāo)記用戶(hù)的Telnet串。主要用到的命令為:USER,PASS,TYPE,SIZE,REST,CWD,PWD,RETR,PASV,PORT,QUIT。下面我就逐步的講解整個(gè)開(kāi)發(fā)的過(guò)程:開(kāi)發(fā)環(huán)境 BCB(組件模式),VC 環(huán)境下稍作改動(dòng)。微軟提供的WinInet類(lèi)可以利用下面這些函數(shù):InternetOpen;InternetConnect;GetCurrentDirectory;SetCurrentDirectory;FtpGetFile;很容易實(shí)現(xiàn)FTP的下載,但是要實(shí)現(xiàn)FTP的多線程下載,利用這些函數(shù)還遠(yuǎn)遠(yuǎn)不夠。下面以客戶(hù)端為例子說(shuō)明使用步驟:1)調(diào)用WSAStartup()初始化Winsocket;2)然后調(diào)用socket()創(chuàng)建一個(gè)會(huì)話socket;3)再調(diào)用connect()與server端連接;4)調(diào)用send()和recev()進(jìn)行對(duì)話;5)調(diào)用closesocket()關(guān)閉socket[19]。Winsocket屏蔽了數(shù)據(jù)鏈路層和物理層,給Windows下的網(wǎng)絡(luò)編程帶來(lái)了巨大的方便。 Winsocket網(wǎng)絡(luò)編程基礎(chǔ) Windows下的FTP傳輸是基于SOCKET之上。 FTP主機(jī)信息生成模塊 負(fù)責(zé)讀取搜索采集程序的執(zhí)行結(jié)果,將有關(guān)遠(yuǎn)程FTP服務(wù)器的狀態(tài)信息存放在相應(yīng)的數(shù)據(jù)庫(kù)中。 搜索采集執(zhí)行模塊 搜索采集文件站點(diǎn)信息和FTP服務(wù)器狀態(tài)信息,并負(fù)責(zé)進(jìn)行各模塊之間的信息交換,解釋執(zhí)行系統(tǒng)控制和管理模塊的配置。整個(gè)文件信息采集系統(tǒng)結(jié)構(gòu)?!          ∮脩?hù)接口數(shù)據(jù)傳送進(jìn)程控制進(jìn)程數(shù)據(jù)傳送進(jìn)程控制進(jìn)程                       
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1