版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
網(wǎng)絡(luò)編程實(shí)驗(yàn)報(bào)告指導(dǎo)老師:黃梅根姓名:學(xué)號(hào):班級(jí):
實(shí)驗(yàn)題目:網(wǎng)絡(luò)文件傳輸實(shí)驗(yàn)?zāi)康模毫私饩W(wǎng)絡(luò)文件傳輸?shù)姆椒?,了解FTP協(xié)議基礎(chǔ),學(xué)習(xí)使用WinSock實(shí)現(xiàn)網(wǎng)絡(luò)文件的傳輸。了解點(diǎn)對(duì)點(diǎn)(P2P)網(wǎng)絡(luò)文件傳輸?shù)姆椒?,學(xué)習(xí)使用WinSock實(shí)現(xiàn)P2P網(wǎng)絡(luò)文件的傳輸實(shí)驗(yàn)要求:通過(guò)編程實(shí)現(xiàn)網(wǎng)絡(luò)文件傳輸程序?qū)嶒?yàn)內(nèi)容:FTP協(xié)議基礎(chǔ)FTP是TCP/IP協(xié)議組中的協(xié)議之一,該協(xié)議是Internet文件傳送的基礎(chǔ),它由一系列規(guī)格說(shuō)明文檔組成,目標(biāo)是提高文件的共享性,提供非直接使用遠(yuǎn)程計(jì)算機(jī),使存儲(chǔ)介質(zhì)對(duì)用戶透明和可靠高效地傳送數(shù)據(jù)。簡(jiǎn)單的說(shuō),F(xiàn)TP就是完成兩臺(tái)計(jì)算機(jī)之間的拷貝,從遠(yuǎn)程計(jì)算機(jī)拷貝文件至自己的計(jì)算機(jī)上或從自己計(jì)算機(jī)中拷貝至遠(yuǎn)程計(jì)算機(jī)上。在TCP/IP協(xié)議中,F(xiàn)TP標(biāo)準(zhǔn)命令TCP端口號(hào)為21,Port方式數(shù)據(jù)端口為20。網(wǎng)絡(luò)文件傳輸原理在通信的時(shí)候主要可以分為兩個(gè)部分,一個(gè)部分是用于傳送控制信息,例如發(fā)送文件的請(qǐng)求,文件的名稱、大小等,采用MFC所提供的CSocket類的串行化技術(shù)來(lái)實(shí)現(xiàn);而另一個(gè)部分就是文件的傳輸部分,對(duì)于文件的傳輸,由于數(shù)據(jù)量相對(duì)來(lái)說(shuō)比較大,使用兩個(gè)線程,一個(gè)用于發(fā)送,一個(gè)用于接收。這兩個(gè)部分在具體實(shí)現(xiàn)的時(shí)候分別建立有自己的套接字。FTP編程基礎(chǔ)FTP傳輸原理FTP協(xié)議使用兩條單獨(dú)的TCP連接,一條專用于發(fā)送FTP命令,另一條則專用于傳遞數(shù)據(jù)。初始建立連接時(shí),服務(wù)器在21號(hào)端口上接收來(lái)自客戶端的命令連接。當(dāng)需要傳送數(shù)據(jù)時(shí)(文件列表、文件數(shù)據(jù)等),客戶端向服務(wù)器發(fā)出Port命令,并進(jìn)入監(jiān)聽(tīng)狀態(tài),等待來(lái)自服務(wù)器的數(shù)據(jù)連接請(qǐng)求。連接到FTP服務(wù)器,首先需要?jiǎng)?chuàng)建一個(gè)CInternetSession對(duì)象,用類CInterSession創(chuàng)建并初始化一個(gè)或幾個(gè)同時(shí)存在的Internet會(huì)話,并描述與代理服務(wù)器的連接,如果在程序運(yùn)行期間需要保持與Internet的連接,可以創(chuàng)建一個(gè)CInternetSession對(duì)象作為類CWinApp的成員。MFC中的類CFtpConnection管理與Internet服務(wù)器的連接,并直接操作服務(wù)器上的目錄和文件,F(xiàn)TP是MFC的WinInet支持的三個(gè)Internet功能之一,創(chuàng)建一個(gè)CInternetSession實(shí)例和一個(gè)CFtpConnection對(duì)象就可以實(shí)現(xiàn)和一個(gè)FTP服務(wù)器通信,不需要直接創(chuàng)建CFtpConnection對(duì)象,而是通過(guò)調(diào)用CInternetSession::GetFtpConnection來(lái)完成這項(xiàng)工作。它創(chuàng)建CFtpConnection對(duì)象并返回一個(gè)指向該對(duì)象的指針。實(shí)驗(yàn)環(huán)境:本次實(shí)驗(yàn)采用MFC工程,工程采用MFC對(duì)話框界面,工程名稱為Ftp,生成的類有CFtpApp類和CFtpDlg類。實(shí)驗(yàn)步驟:控件與變量的關(guān)聯(lián)表:DDX_Control(pDX,IDC_UPLOAD,m_btnUpload);DDX_Control(pDX,IDC_DOWNLOAD,m_btnDownload);DDX_Control(pDX,IDOK,m_btnQuery);DDX_Control(pDX,IDC_LIST_FILE,m_listFile);DDX_Control(pDX,IDC_EDIT_PWD,m_editPwd);DDX_Control(pDX,IDC_EDIT_NAME,m_editName);DDX_Control(pDX,IDC_EDIT_FTP,m_editFtp);DDX_Text(pDX,IDC_EDIT_FTP,m_strFtp);DDX_Text(pDX,IDC_EDIT_NAME,m_strName);DDX_Text(pDX,IDC_EDIT_PWD,m_strPwd);各個(gè)函數(shù)體代碼:voidCFtpDlg::OnQuery()//查詢的響應(yīng)函數(shù){ CInternetSession*pSession;//定義會(huì)話對(duì)象指針變量 CFtpConnection*pConnection;//定義連接對(duì)象指針變量 CFtpFileFind*pFileFind;//定義文件查詢對(duì)象指針變量 CStringstrFileName; BOOLbContinue; pConnection=NULL; pFileFind=NULL; UpdateData(TRUE);//獲得用戶的當(dāng)前輸入(服務(wù)器名,用戶名和口令) while(m_listFile.GetCount()!=0)m_listFile.DeleteString(0);//清除列表框的內(nèi)容 pSession=newCInternetSession(//創(chuàng)建Internet會(huì)話類對(duì)象 AfxGetAppName(),1,PRE_CONFIG_INTERNET_ACCESS); try {//試圖建立與指定FTP服務(wù)器的連接 pConnection=pSession->GetFtpConnection(m_strFtp,m_strName,m_strPwd); }catch(CInternetException*e){ e->Delete();//無(wú)法建立連接,進(jìn)行錯(cuò)誤處理 pConnection=NULL; } if(pConnection!=NULL) { //創(chuàng)建CFtpFileFind對(duì)象,向構(gòu)造函數(shù)傳遞CFtpConnection對(duì)象的指針 pFileFind=newCFtpFileFind(pConnection); bContinue=pFileFind->FindFile("*");//查找服務(wù)器上當(dāng)前目錄的任意文件 if(!bContinue)//如果一個(gè)文件都找不到,結(jié)束查找 { pFileFind->Close(); pFileFind=NULL; } while(bContinue)//找到了第一個(gè)文件,繼續(xù)找其它的文件 { strFileName=pFileFind->GetFileName();//獲得找到的文件的文件名 //如果找到的是否目錄,將目錄名放在括弧中 if(pFileFind->IsDirectory())strFileName="["+strFileName+"]"; //將找到的文件或目錄名顯示在列表框中。 m_listFile.AddString(strFileName); bContinue=pFileFind->FindNextFile();//查找下一個(gè)文件 } if(pFileFind!=NULL) { pFileFind->Close();//結(jié)束查詢 pFileFind=NULL; } } deletepFileFind;//刪除文件查詢對(duì)象 if(pConnection!=NULL) { pConnection->Close(); deletepConnection;//刪除FTP連接對(duì)象 } deletepSession;//刪除Internet會(huì)話對(duì)象}voidCFtpDlg::OnDownload()//下載響應(yīng)函數(shù){ UpdateData(TRUE); CStringstrSourceName; //獲得用戶在列表框中的選擇 nSel=m_listFile.GetCurSel(); m_listFile.GetText(nSel,strSourceName); if(strSourceName.GetAt(0)!='[') { //選擇的是文件 CStringstrDestName; CFileDialogdlg(FALSE,"","*.*");//定義了一個(gè)文件對(duì)話框?qū)ο笞兞? if(dlg.DoModal()==IDOK)//激活文件對(duì)話框 { //獲得下載文件在本地機(jī)上存儲(chǔ)的路徑和名稱 strDestName=dlg.GetPathName(); //調(diào)用函數(shù)下載文件 if(Download(strSourceName,strDestName)) AfxMessageBox("下載成功!",MB_OK|MB_ICONINFORMATION); else AfxMessageBox("下載失??!",MB_OK|MB_ICONSTOP); } else { AfxMessageBox("請(qǐng)寫入文件名!",MB_OK|MB_ICONSTOP); } } Else { //選擇的是目錄 AfxMessageBox("不能下載目錄!請(qǐng)重選!",MB_OK|MB_ICONSTOP); } //控件是否可用的處理 m_btnDownload.EnableWindow(FALSE); m_btnUpload.EnableWindow(TRUE); m_btnQuery.EnableWindow(TRUE); m_editFtp.EnableWindow(TRUE); m_editName.EnableWindow(TRUE); m_editPwd.EnableWindow(TRUE); m_staFtp.EnableWindow(TRUE); m_staName.EnableWindow(TRUE); m_staPwd.EnableWindow(TRUE);}BOOLCFtpDlg::Download(CStringstrSName,CStringstrDName)//下載響應(yīng)函數(shù){ CInternetSession*pSession;//定義會(huì)話對(duì)象變量指針 CFtpConnection*pConnection;//定義連接對(duì)象變量指針 pConnection=NULL; //創(chuàng)建Internet會(huì)話對(duì)象 pSession=newCInternetSession(AfxGetAppName(),1, PRE_CONFIG_INTERNET_ACCESS); try { //建立FTP連接 pConnection=pSession->GetFtpConnection(m_strFtp, m_strName,m_strPwd); } catch(CInternetException*e) { //錯(cuò)誤處理 e->Delete(); pConnection=NULL; returnFALSE; } if(pConnection!=NULL) { //下載文件 if(!pConnection->GetFile(strSName,strDName)) { //下載文件錯(cuò)誤 pConnection->Close(); deletepConnection; deletepSession; returnFALSE; } } if(pConnection!=NULL) { pConnection->Close(); deletepConnection; } deletepSession; returnTRUE;}voidCFtpDlg::OnUpload()//上傳響應(yīng)函數(shù){ UpdateData(TRUE); //控件是否可用的處理 m_editFtp.EnableWindow(FALSE);//服務(wù)器域名輸入文本框 m_editName.EnableWindow(FALSE);//登錄客戶名輸入文本框 m_editPwd.EnableWindow(FALSE);//口令輸入文本框 m_staFtp.EnableWindow(FALSE); m_staName.EnableWindow(FALSE); m_staPwd.EnableWindow(FALSE); m_btnQuery.EnableWindow(FALSE); CStringstrSourceName; CStringstrDestName; CFileDialogdlg(TRUE,"","*.*");//定義文本對(duì)話框?qū)ο笞兞?if(dlg.DoModal()==IDOK) { //獲得待上傳的本地機(jī)文件路徑和文件名 strSourceName=dlg.GetPathName(); strDestName=dlg.GetFileName(); //調(diào)用Upload函數(shù)上傳文件 if(Upload(strSourceName,strDestName)) A
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024-2030年中國(guó)真絲精煉劑行業(yè)產(chǎn)量預(yù)測(cè)及投資風(fēng)險(xiǎn)研究報(bào)告
- 隧道爆破施工人員安全保障預(yù)案
- 中醫(yī)適宜技術(shù)在旅游健康服務(wù)中的應(yīng)用方案
- 日用化工行業(yè)計(jì)件薪資制度實(shí)施
- 遠(yuǎn)程會(huì)議室控制方案
- 機(jī)場(chǎng)航站樓鋼結(jié)構(gòu)吊裝施工方案
- 環(huán)境污染應(yīng)急處置預(yù)案
- 城市小學(xué)“雙減”教學(xué)計(jì)劃方案
- 2024年度體育賽事臨時(shí)板房供應(yīng)合同
- 2024年度軟件開(kāi)發(fā)合同
- 基于solidworks flow simulation油浸式變壓器散熱優(yōu)化分析
- CPK與CP詳細(xì)講解資料(課堂PPT)
- 光動(dòng)力治療在氣道腫瘤中的臨床應(yīng)用課件
- 小學(xué)語(yǔ)文人教三年級(jí)上冊(cè) 群文閱讀《奇妙的中心句》
- 大數(shù)據(jù)和人工智能知識(shí)考試題庫(kù)600題(含答案)
- 2023年上海機(jī)場(chǎng)集團(tuán)有限公司校園招聘筆試題庫(kù)及答案解析
- 鏡頭的角度和方位課件
- 污水處理常用藥劑簡(jiǎn)介知識(shí)講解課件
- 五年級(jí)上冊(cè)英語(yǔ)課件-Unit 1《My future》第1課時(shí)牛津上海版(三起) (共28張PPT)
- 光交接箱施工規(guī)范方案
- 氣溫和降水學(xué)案
評(píng)論
0/150
提交評(píng)論