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

正文內(nèi)容

ftp協(xié)議的分析與軟件設(shè)計-資料下載頁

2024-11-06 08:23本頁面
  

【正文】 設(shè)計與實現(xiàn) ( 1) 登陸 連接 圖 44 程序流程圖 The flow chart of programme 登陸相對其他功能而言要簡單的多。 用戶單擊【快速連接】后,客戶端開始連接服務(wù)器。 OnQuickconnect()函數(shù)響應(yīng)該消息 , 該函數(shù)主要完成任務(wù)為:獲得服務(wù)器 IP地址 ;把用戶賬戶密碼信息傳給服務(wù)器進行登陸驗證; 連接成功后 創(chuàng)建發(fā)送請求與接收目錄線程;設(shè)置【快速連接】按鈕為無效狀態(tài) (已連接) 。 以下 是其 主要 代碼: OnQuickconnect() { GetFtpPara(amp。(pServViewm_ctServDir))。 if(!pServViewBeginFindServFile()) AfxMessageBox(建立網(wǎng)絡(luò)連接失敗 ”)。 m_bConnected=TRUE。 } ( 2)文件瀏覽 列文件目錄稍復(fù)雜點,但實際上也很簡單,其復(fù)雜部分在于將服務(wù)器發(fā)過來的文件信息數(shù)據(jù)進行解析并 得到相應(yīng)的文件名,文件類型,文件大小,創(chuàng)建時間等,處理流程如下: 服務(wù)器地址和端口 打開命令通道 登陸成功 接受歡迎信息 USER 命令 PASS 命令 發(fā)送空命令 回應(yīng)信息正確 回應(yīng)信息正確 Y N Y N 27 圖 45 流程圖 flow chart of programme 在發(fā)送 PORT 命令之前要確保本地已 經(jīng)創(chuàng)建好了偵聽 socket,然后將該 socket 的地址和端口號轉(zhuǎn)換為 xxx,xxx,xxx,xxx,xxx,xxx(其中前四個 xxx 是將 ip 地址中的點換成逗號,后兩個 xxx 實際上分別是 port/256 和 port%256)作為 PORT 命令的參數(shù)發(fā)送給服務(wù)器端,服務(wù)器收到該條命令后會創(chuàng)建一個 socket 來連接我們已經(jīng)在偵聽的 socket,這樣,數(shù)據(jù)通道就建立好了。接著發(fā)送一條 LIST 命令,客戶端便將當前遠程目錄下的文件信息從數(shù)據(jù)通道發(fā)送過來,我們對接受到的數(shù)據(jù)進行解析便可以得到每個文件 /目錄具體的信息,如文件名 ,文件類型,文件大小,創(chuàng)建時間和權(quán)限等。 本程序主要 先通過調(diào)用 GetDir()函數(shù)用于獲得文件系統(tǒng)目錄 , 然后調(diào)用 GetFileIcon()從系統(tǒng)中讀取某一文件的圖標 以及 SetFileColumns()函數(shù)把讀取到的某個文件的信息(創(chuàng)建時間、文件大小等)顯示在列表視圖中 。 以下是 描述 文件信息的數(shù)據(jù)結(jié)構(gòu) 設(shè)計 代碼: struct { TCHAR szFileName[MAX_PATH]。 DWORD dwFileAttributes。 TYPE A命令 獲取本地 IP 地址 創(chuàng)建監(jiān)聽 Socket 綁定 Socket 并偵聽 在數(shù)據(jù)通道接收數(shù)據(jù) PORT 命令 LIST 命令 數(shù)據(jù)緩存非空 從緩存中取出一行 對該行信息解析得到文件 /目錄信息 在遠程目錄插入該文件 /目錄 結(jié)束 N Y 28 FILETIME ftCreationTime。 FILETIME ftLastAccessTime。 FILETIME ftLastWriteTime。 DWORD nFileSizeHigh。 DWORD nFileSizeLow。 } FILE_INF ( 3)文件下載 圖 46 流程圖 The flow chart of programme 值得指出的是,之所以要多次接收數(shù)據(jù)是因為文件并不是一次性傳輸過來的,而是以 一定 長度的數(shù)據(jù)傳輸過來的??蛻舳嗣看螐臄?shù)據(jù)通道 獲取一部分數(shù)據(jù)并將其追寫到已創(chuàng)建的文件里,直至接受數(shù)據(jù)失敗。 本程序主要通過 ReceiveFileThread()函數(shù) 實現(xiàn) , 在ReceiveFileThread函數(shù)在確定目錄后,調(diào)用 PreReceiveFile函數(shù)進行文件下載 的實際操作,本系統(tǒng)在下載時 根據(jù)文件的長度采用文件分塊的方法分幾個線程進行下載。以下是文件分塊 下載的算法 實現(xiàn) 主要 代碼: for(int i=0。iMAX_THREAD_NUM。i++) { if(i0) { filerange[i*2]=i*(+1)。 下載結(jié)束 RETR 命令 建立數(shù)據(jù)通道 啟動下載線程 創(chuàng)建本地文件 將數(shù)據(jù)寫入文件 得到待下載的遠程文件 從數(shù)據(jù)通道接收數(shù)據(jù) 接收數(shù)據(jù)不為空 N Y 29 } filerange[i*2+1]=+1。 } filerange[MAX_THREAD_NUM*21]=[MAX_THREAD_NUM *22]。 ( 4)上傳文件 圖 47 流程圖 flow chart of programme 上傳文件與下載文件及其類似,客戶端是從本地文件里每次讀取 一定長度 的數(shù)據(jù),發(fā)送到數(shù)據(jù)通道,直至文件全部發(fā)送完畢 。 本程序塊主要通過 SendFileThread()函數(shù) 實現(xiàn) 。SendFileThread()函數(shù) 在確定好保存的目錄后,調(diào)用 PreSendFile函數(shù)上傳文件,實際操作和文件下載是一樣的原理。 以下是 SendFileThread() 函數(shù) 主要代碼 :CMyAppThread::SendFileThread(LPVOID lParam) { try { //建立 FTP連接 pFtpConnection=lpISessionGetFtpConnection(szFtpName,szFtpUser,szFtpPassword,nPort)。 } //設(shè)置當前路徑 上傳結(jié)束 STOR 命令 建立數(shù)據(jù)通道 啟動上傳線程 讀取本地文件 將數(shù)據(jù)發(fā)送至數(shù)據(jù)通道 得到待上傳的文件 從本地文件讀取數(shù)據(jù) 讀取數(shù)據(jù)不為空 N Y 30 lpFtpConnectionSetCurrentDirectory(szFtpDirectory)。 ::SetCurrentDirectory(szLocDirectory)。 OldLoc=szLocDirectory。 OldFtp=szFtpDirectory。 …… } ( 5) 實現(xiàn) 數(shù)據(jù)包完整性 的設(shè)計 在 程序調(diào)試中我發(fā)現(xiàn)如果發(fā)送端一次發(fā)送較大的數(shù)據(jù)包,接收端不是一次完全收到。而是在接收端幾次觸發(fā)了 Receive事件后才接到一個完整的大型數(shù)據(jù)包。因此,應(yīng)當在 OnReceive函數(shù)中加入代碼統(tǒng)計已收到的字符數(shù),并與上次接收到的數(shù)據(jù)拼接起來,當小于應(yīng)收到的字符數(shù)時就返回,等待下一次 Receive事件的到來,知道統(tǒng)計收到的字符數(shù)與雙方約定好的數(shù)據(jù)包大小相同。以下是具體實現(xiàn)代碼: //負責接收數(shù)據(jù)的函數(shù),返回收到的字節(jié)數(shù) Long ReceiveOnce(CAsyncSocket *socket,char *dest,long occupied,long PacketSize) { long ByteCount。 char Buffer[20200]。 ByteCount=socketReceive(Buffer, PacketSize)。 if (PacketSize PacketSize|| ByteCount=0) //接收數(shù)據(jù)過程中出錯 return 1。 StrCombine(dest,occupied,buffer, ByteCount)。 return ByteCount。 } //根據(jù)接受 情況判斷現(xiàn)在的狀態(tài) int GetPacket(CAsyncSocket *socket,char *packet,int PacketSize) { static long ReceivedSize=0。 int Once。 Once=ReceiveOnce( socket, packet, ReceivedSize, PacketSize) if (Once==1) //傳輸中出現(xiàn)錯誤 31 return 1。 ReceivedSize= ReceivedSize+Once。 if(ReceivedSize PacketSize) //一個包沒有接收完全 return 0。 else { //接收一個包完畢 ReceivedSize=0。 return 1。 } } 在 OnReceive中加入: switch(GetPacket(this,data,sizeof(data))) { case 1。 //傳輸中出現(xiàn)錯誤 CasyncSocket::OnReceive(nErrorCode)。 return。 case 0。 //一個包沒有接收完全 CasyncSocket::OnReceive(nErrorCode)。 return。 case 1。 //接收一個包完畢 break。 } 32 第五章 總結(jié)與展望 本論文主要完成了如下工作: ( 1)探討了 FTP協(xié)議,對其進行了分析 。 ( 2)對開發(fā)技術(shù) Winsock進行了簡介 。 ( 3) 設(shè)計 FTP服務(wù)器, 實現(xiàn)了 FTP服務(wù)器程序編寫 。 ( 4) 設(shè)計 FTP客戶端, 實現(xiàn)了 FTP客戶端程序編寫 。 通過 FTP軟件編寫實現(xiàn)遠程機器間的資源共享,實現(xiàn)基本的文件上次與下載功能,為日常生活所應(yīng)用。 同時加深了自己對有關(guān)方面知識的理解。 由于論文設(shè)計的時間有限,軟件系統(tǒng) 還存在一些需要改進的地方 。 另外,如果在本FTP軟件系統(tǒng) 基礎(chǔ)上增 加 斷點續(xù)傳等其他功能 ,會使系統(tǒng)更全面、更完美。 33 參考文獻 [1] Postel J,Reynolds Transfer Protocol(FTP)[S].RFC 959,1985. [2] Ruediger R Outlets In Action. Windows Sockets,Microsoft Developer Network Technology . [3] 曹建剛,楊冬黎 .FTP客戶端實現(xiàn) [J].佳木斯大學(xué)學(xué)報(自然科學(xué)版), 2020,( 1) . [4] 孫海明 .精通 Windows Sockets 網(wǎng)絡(luò)開發(fā) [M].人民郵電出版社, 2020, 2044. [5] 丁展,劉海英等 .VC++網(wǎng)絡(luò)通信編程實用案例精選 [M].人民郵電出版社, 2020, 187221. [6] 殷肖川,劉志宏等 .網(wǎng)絡(luò)開發(fā)與編程技術(shù) [M].西安交通大學(xué)出版社, 2020,2050. [7] (美) Uyless [M].機械工業(yè)出版社, 1998,6080. [8] 雷斌,楊建華,何斌等 .VC++ 網(wǎng)絡(luò)編程技術(shù) [M].人民郵電出版社, 2020, 2438. [9] 曾紀粵,蔡利民 .VC++ 開發(fā)網(wǎng)絡(luò)通信程序 [M].現(xiàn)代通信技術(shù), 2020, (4), 161205. [10] 蔣東興 .WinSocks 網(wǎng)絡(luò)程序設(shè)計大全 [M].清華大學(xué)出版社, 1999, 10100. [11] 周宏生 .基于 FTP協(xié)議的文件上傳和下載 [J].科技資訊, 2020,( 2) . [12] 趙寶剛,高偉,李齊斌 .用 Winsock 實現(xiàn) FTP文件的上傳和下載 [M].信息技術(shù), 2020, 8591. [13] (美 )EdTaylor 著,王虎,劉志剛等譯 .TCP/IP 使用詳解 [M].機械工業(yè)出版社, 2020. [14] 秦穎,施煒,李錚 . Windows Sockets 規(guī)范及應(yīng)用 [M].電子工業(yè)出版社, 1997, 5080. [15] 謝希仁 .計算機網(wǎng)絡(luò)(第四版) [M].大連理工出版社, 2020, 231- 264. 34 致 謝
點擊復(fù)制文檔內(nèi)容
畢業(yè)設(shè)計相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1