FTP客戶端課程設(shè)計(jì)報(bào)告書知識(shí)培訓(xùn)資料_第1頁
FTP客戶端課程設(shè)計(jì)報(bào)告書知識(shí)培訓(xùn)資料_第2頁
FTP客戶端課程設(shè)計(jì)報(bào)告書知識(shí)培訓(xùn)資料_第3頁
FTP客戶端課程設(shè)計(jì)報(bào)告書知識(shí)培訓(xùn)資料_第4頁
FTP客戶端課程設(shè)計(jì)報(bào)告書知識(shí)培訓(xùn)資料_第5頁
已閱讀5頁,還剩29頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

PAGE第32頁《計(jì)算機(jī)網(wǎng)絡(luò)》課程設(shè)計(jì)課題名稱課題名稱FTP客戶機(jī)搭建學(xué)院信息工程學(xué)院專業(yè)網(wǎng)絡(luò)工程班級學(xué)號姓名目錄和索引一、需求分析——--——----———-————-—-—-----—------21、功能需求2、開發(fā)環(huán)境與工具3、所需要知識(shí)二、知識(shí)理解--—---———-------—-——-------—-----—---—21、FTP實(shí)現(xiàn)的基本原理(1)概要(2)上傳和下載(3)用戶FTP和匿名FTP(4)ASCII和Binary(5)Port和Passive三、完成進(jìn)度-—-—--—-----—-—--—-—-——--————--—-—----31、已完成部分2、未完成部分3、還需改善的部分四、FTP服務(wù)工作過程----—---—---—--—-—---—---—--4五、詳細(xì)設(shè)計(jì)--—----———-—-—-——--——---—-51、CFtpDlg類的一些函數(shù)定義………………52、CFtpOperate的一些函數(shù)定義……………17六、測試結(jié)果--———-----—----—---—--——----—-—-—-—--29七、用戶手冊—-—-—-———--————----——--—-—-—-—---—32八、實(shí)驗(yàn)總結(jié)-———-———-—--—---—--—-—-————---32FTP客戶端程序一、需求分析1、功能需求(1)實(shí)現(xiàn)一個(gè)圖形用戶界面的FTP客戶端,保證文件的安全傳輸和存儲(chǔ)。(2)提供登錄界面,上傳下載界面、幫助界面、關(guān)于界面。(3)通過輸入服務(wù)器地址、用戶名和密碼,可以實(shí)現(xiàn)遠(yuǎn)程FTP主機(jī)的登錄。(4)提供本地文件和文件夾的上傳功能,可對FTP主機(jī)文件進(jìn)行下載和刪除文件。(5)提供對本地目錄的讀取與返回,能正確列出文件和文件夾,在沒有登錄服務(wù)器前可以作為一個(gè)簡單的文件查詢工具對本地文件進(jìn)行查詢。(6)幫助頁面可以對用戶提供使用說明。(7)關(guān)于界面包含設(shè)計(jì)者的信息.(9)要求開發(fā)出的FTP客戶端符合標(biāo)準(zhǔn)FTP協(xié)議規(guī)范,支持ASCII傳輸模式和二進(jìn)制數(shù)據(jù)傳輸模式(10)FTP的兩種工作模式的選擇Port模式(主動(dòng))和Passive模式(被動(dòng))2、開發(fā)環(huán)境與工具(1)使用的IDE:使用VC++6。0作為開發(fā)環(huán)境IDE(2)使用的語言:C++(3)使用的開發(fā)包:使用MFC和WinInet(4)開發(fā)平臺(tái):Windows73、所需要知識(shí)(1)計(jì)算機(jī)網(wǎng)絡(luò)的基本知識(shí)(2)了解FTP基本實(shí)現(xiàn)原理(2)使用VC++6.0IDE進(jìn)行MFC程序開發(fā)的基本知識(shí)(3)熟悉WinInet中屬于FTP部分的操作(4)熟悉文件或文件夾操作(5)熟悉控件的操作,如在ListCtrol添加圖片(瀏覽文件或文夾的圖標(biāo))二、知識(shí)理解1、FTP實(shí)現(xiàn)的基本原理(1)概要Internet是一個(gè)非常復(fù)雜的計(jì)算機(jī)環(huán)境,Internet上的計(jì)算機(jī)已有上千萬臺(tái),而這些計(jì)算機(jī)可能運(yùn)行不同的操作系統(tǒng),有運(yùn)行Unix的HYPERLINK"http://baike.baidu.com/view/899.htm"\t"_blank"服務(wù)器,也有運(yùn)行Dos、Windows的PC機(jī)等等,而各種操作系統(tǒng)之間的文件交流問題,需要建立一個(gè)統(tǒng)一的文件傳輸協(xié)議,這就是所謂的FTP。基于不同的操作系統(tǒng)有不同的FTP應(yīng)用程序,而所有這些應(yīng)用程序都遵守同一種協(xié)議,這樣用戶就可以把自己的文件傳送給別人,或者從其它的用戶環(huán)境中獲得文件。FTP也是一個(gè)客戶機(jī)/服務(wù)器系統(tǒng)。用戶通過一個(gè)支持FTP協(xié)議的客戶機(jī)程序,連接到在遠(yuǎn)程主機(jī)上的FTP服務(wù)器程序。用戶通過客戶機(jī)程序向服務(wù)器程序發(fā)出命令,服務(wù)器程序執(zhí)行用戶所發(fā)出的命令,并將執(zhí)行的結(jié)果返回到客戶機(jī)。使用FTP時(shí)必須首先登錄,在遠(yuǎn)程主機(jī)上獲得相應(yīng)的權(quán)限以后,方可下載或上傳文件.(2)上傳和下載"下載”文件就是從遠(yuǎn)程主機(jī)拷貝文件至自己的計(jì)算機(jī)上;"上傳"文件就是將文件從自己的計(jì)算機(jī)中拷貝至遠(yuǎn)程主機(jī)上(3)用戶FTP和匿名FTP用戶FTP:種方式為已在FTP服務(wù)器上建立了特定帳號的用戶使用,需要合法的用戶名和密碼才能登錄到遠(yuǎn)程計(jì)算機(jī)傳輸文件.匿名FTP:用戶作為“anonymous"登錄到FTP服務(wù)器,不需要有自己的用戶名和密碼。(4)ASCII和BinaryASCII:文本傳輸器使用ASCII字符,并由回車鍵和換行符分開Binary:二進(jìn)制不用轉(zhuǎn)換或格式化就可傳字符,二進(jìn)制模式比文本模式更快,并且可以傳輸所有ASCII值,所以系統(tǒng)管理員一般將FTP設(shè)置成二進(jìn)制模式。(5)Port和PassivePort模式(主動(dòng)):FTP客戶端首先和FTP服務(wù)器的TCP21端口建立連接,通過這個(gè)通道發(fā)送命令,客戶端需要接收數(shù)據(jù)的時(shí)候在這個(gè)通道上發(fā)送PORT命令。PORT命令包含了客戶端用什么端口接收數(shù)據(jù)。在傳送數(shù)據(jù)的時(shí)候,服務(wù)器端通過自己的TCP20端口連接至客戶端的指定端口發(fā)送數(shù)據(jù)。FTPserver必須和客戶端建立一個(gè)新的連接用來傳送數(shù)據(jù)。Passive模式(被動(dòng)):Passive模式在建立控制通道的時(shí)候和Standard模式類似,但建立連接后發(fā)送的不是Port命令,而是Pasv命令.FTP服務(wù)器收到Pasv命令后,隨機(jī)打開一個(gè)高端端口(端口號大于1024)并且通知客戶端在這個(gè)端口上傳送數(shù)據(jù)的請求,客戶端連接FTP服務(wù)器此端口,然后FTP服務(wù)器將通過這個(gè)端口進(jìn)行數(shù)據(jù)的傳送,這個(gè)時(shí)候FTPserver不再需要建立一個(gè)新的和客戶端之間的連接。三、完成進(jìn)度1、已完成部分(1)實(shí)現(xiàn)一個(gè)圖形用戶界面的FTP客戶端,保證文件的安全傳輸和存儲(chǔ).(2)提供登錄界面,上傳下載界面、幫助界面、關(guān)于界面(3)通過輸入服務(wù)器地址、用戶名和密碼,可以實(shí)現(xiàn)遠(yuǎn)程FTP主機(jī)的登錄.(4)提供本地文件上傳功能,可對FTP主機(jī)文件進(jìn)行下載和刪除文件。(5)提供對本地目錄的讀取與返回,能正確列出文件和文件夾,在沒有登錄服務(wù)器前可以作為一個(gè)簡單的文件查詢工具對本地文件進(jìn)行查詢。(6)幫助頁面可以對用戶提供使用說明。(7)關(guān)于界面包含設(shè)計(jì)者的信息(幫助界面和關(guān)于界面整合在一起)。(9)支持ASCII傳輸模式和二進(jìn)制數(shù)據(jù)傳輸模式,外加自動(dòng)選擇的模式(10)FTP的兩種工作模式的選擇Port模式(主動(dòng))和Passive模式(被動(dòng))(11)提供用戶操作的狀態(tài)信息輸出2、未完成部分只提供了本地文件的上傳功能,暫時(shí)不能提供文件夾的上傳功能,由于當(dāng)初沒有使用多線程對服務(wù)器端進(jìn)行操作,若上傳或下載的文件過大,會(huì)導(dǎo)致界面陷入長時(shí)間的不響應(yīng)中。由于時(shí)間問題,就不再進(jìn)行多線程的擴(kuò)充,也就不提供文件夾的上傳功能。3、還需改善的部分(1)使用多線程進(jìn)行操作(2)提供文件夾上傳和文件夾下載功能(3)改進(jìn)界面,提供更方便的操作(4)增加上傳和下載的隊(duì)列(5)同時(shí)可連接多個(gè)FTP服務(wù)器(6)改善提示信息(7)賬戶.密碼等用戶資料在本地加密后保存(8)增加更多的功能,如下載完成后關(guān)機(jī)等(9)等………四、FTP服務(wù)工作程 五、詳細(xì)設(shè)計(jì)(1)CFtpDlg類的一些函數(shù)定義BOOLCFtpDlg::OnInitDialog(){ CDialog::OnInitDialog();?//Add"About。。.”menuitemtosystemmenu. //IDM_ABOUTBOXmustbeinthesystmandrange.?ASSERT((IDM_ABOUTBOX&0xFFF0)==IDM_ABOUTBOX);?ASSERT(IDM_ABOUTBOX〈0xF000); CMenu*pSysMenu=GetSystemMenu(FALSE);?if(pSysMenu!=NULL)?{??CStringstrAboutMenu;??strAboutMenu。LoadString(IDS_ABOUTBOX);??if(!strAboutMenu.IsEmpty()) ?{???pSysMenu->AppendMenu(MF_SEPARATOR); ??pSysMenu->AppendMenu(MF_STRING,IDM_ABOUTBOX,strAboutMenu);??}?}?SetIcon(m_hIcon,TRUE);?? SetIcon(m_hIcon,FALSE);?? m_ctrBinary。SetCheck(1);m_ctrActive。SetCheck(1);m_editPort。SetWindowText("21");?bBinary1=1;//使用二進(jìn)制bPassive1=0;//使用主動(dòng)myPort=21;?m_imgList.Create(20,20,ILC_COLOR32,0,0);//創(chuàng)建圖像列表m_imgList.SetBkColor(RGB(255,255,255));//文件夾圖標(biāo)hIconFold=::LoadIcon(AfxGetResourceHandle(),MAKEINTRESOURCE(IDI_FOLDER));//文件圖標(biāo)hIconFile=::LoadIcon(AfxGetResourceHandle(),MAKEINTRESOURCE(IDI_FILE)); m_imgList。Add(hIconFold);m_imgList.Add(hIconFile);m_ctrlLocalFile。SetImageList(&m_imgList,LVSIL_SMALL);//關(guān)聯(lián)m_ctrlServerFile.SetImageList(&m_imgList,LVSIL_SMALL);//關(guān)聯(lián) m_editServer。SetWindowText("ftp://”); m_editName.SetWindowText(””); m_editPassword.SetWindowText(””);?m_btnCon。EnableWindow(TRUE);?m_btnClo.EnableWindow(FALSE); m_ctrlLocalFile.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES); m_ctrlServerFile.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);?m_ctrlLocalFile.InsertColumn(0,”文件名”,LVCFMT_LEFT,140,0);//設(shè)置列m_ctrlLocalFile.InsertColumn(1,”文件類型",LVCFMT_LEFT,100,1);m_ctrlLocalFile.InsertColumn(2,”修改日期",LVCFMT_LEFT,100,2); m_ctrlServerFile。InsertColumn(0,"文件名",LVCFMT_LEFT,140,0);//設(shè)置列m_ctrlServerFile.InsertColumn(1,"文件類型”,LVCFMT_LEFT,100,1);m_ctrlServerFile.InsertColumn(2,"修改日期”,LVCFMT_LEFT,100,2); //添加硬盤盤符?size_tszAllDriveStrings=::GetLogicalDriveStrings(0,NULL);?TCHAR*pDriveStrings=newTCHAR[szAllDriveStrings+sizeof(_T(””))];?GetLogicalDriveStrings(szAllDriveStrings,pDriveStrings);?size_tszDriveString=::strlen(pDriveStrings); while(szDriveString〉0)?{? m_ctrlLocal.AddString(pDriveStrings); pDriveStrings+=szDriveString+1; szDriveString=::strlen(pDriveStrings); } intindex=m_ctrlLocal。FindString(0,”c:\\”); m_ctrlLocal.SetCurSel(index);?m_strLocPat(yī)h="c:\\";//初始化為c盤 ListLocFile();?cFtpOpr.setEidt(&m_ediMessage);?returnTRUE;//returnTRUEunlessyousetthefocustoacontrol}voidCFtpDlg::OnSysCommand(UINTnID,LPARAMlParam){?if((nI(lǐng)D&0xFFF0)==IDM_ABOUTBOX) { CAboutDlgdlgAbout;??dlgAbout。DoModal();?} else?{??CDialog::OnSysCommand(nID,lParam); }}voidCFtpDlg::OnPaint(){ if(IsIconic())?{ ?CPaintDCdc(this);//devicecontextforpainting??SendMessage(WM_ICONERASEBKGND,(WPARAM)dc.GetSafeHdc(),0);??intcxIcon=GetSystemMetrics(SM_CXICON); ?intcyIcon=GetSystemMetrics(SM_CYICON);??CRectrect;? GetClientRect(&rect); intx=(rect。Width()-cxIcon+1)/2; inty=(rect.Height()-cyIcon+1)/2; ?dc。DrawIcon(x,y,m_hIcon); } else {??CDialog::OnPaint();?}}HCURSORCFtpDlg::OnQueryDragIcon(){?return(HCURSOR)m_h(yuǎn)Icon;}//連接服務(wù)器voidCFtpDlg::OnBtnConnect(){?//TODO:Addyourcontrolnotificationhandlercodeherem_editServer。GetWindowText(m_strServer);//記錄FTP服務(wù)器地址 CStringstrtemp; m_editPort.GetWindowText(strtemp);?myPort=::atoi(strtemp);//獲得設(shè)置的端口號?inti; if(bAnony==0)?{//不使用匿名??m_editName。GetWindowText(m_strName);//記錄FTP登陸用戶名?m_editPassword.GetWindowText(m_strPassword);//記錄FTP登陸用戶密碼??i=cFtpOpr.set(m_strServer,m_strName,m_strPassword); }?else {//使用匿名 CStringstrNameTemp; ?m_editName.GetWindowText(strNameTemp);//匿名登陸的用戶名??i=cFtpOpr.set(m_strServer,strNameTemp,"");?? } if(i) {//設(shè)置成功,打開連接if(cFtpOpr.OpenConnection()) ?{//連接成功 m_btnClo。EnableWindow(TRUE); ??m_btnCon。EnableWindow(FALSE);? UpdateServerFile();//更新服務(wù)器的文件顯示 ? m_ctrlServer。ResetContent();???CStringtemp; ??cFtpOpr。GetPath(temp);???m_ctrlServer。AddString((LPSTR)(LPCTSTR)temp);m_ctrlServer.SetCurSel(0);???m_chkAnony.EnableWindow(FALSE);???m_ctrActive。EnableWindow(FALSE); CButton*temp2=(CButton*)GetDlgItem(IDC_PASSIVE); ? temp2->EnableWindow(FALSE);?? m_editPort。EnableWindow(FALSE);} ?else? {?? //連接失敗? } }}voidCFtpDlg::OnBtnClose(){//關(guān)閉連接 if(cFtpOpr.CloseConnection()) {//關(guān)閉成功 ?m_btnClo.EnableWindow(FALSE); ?m_btnCon.EnableWindow(TRUE);? m_ctrlServerFile。DeleteAllItems(); m_ctrlServer。ResetContent();? m_ctrActive.EnableWindow(TRUE); CButton*temp2=(CButton*)GetDlgItem(IDC_PASSIVE); temp2—>EnableWindow(TRUE);? m_editPort.EnableWindow(TRUE);??m_chkAnony.EnableWindow(TRUE); }}//雙擊本地文件列表控件中的選項(xiàng)voidCFtpDlg::OnDblclkListLocalfile(NMHDR*pNMHDR,LRESULT*pResult){?//TODO:Addyourcontrolnotificationhandlercodehere?POSITIONp=m_ctrlLocalFile.GetFirstSelectedItemPosition();?if(p==NULL) { return; }?//獲取剛選取的位置的下標(biāo)(從0開始的) intindex=m_ctrlLocalFile.GetNextSelectedItem(p);?//獲得選中的內(nèi)容 //得到第index行.第0列的內(nèi)容(下標(biāo)從0開始) CStringFirstColumn=m_ctrlLocalFile.GetItemText(index,0);CStringSecondColumn=m_ctrlLocalFile.GetItemText(index,1); if(index==0)//返回上層目錄 { ?intk=m_strLocPath.GetLength()-1;??if(m_strLocPath.Right(2)==”:\\")? {???return; ?} ?//刪除當(dāng)層的項(xiàng)目??intix=m_ctrlLocal。FindString(0,m_strLocPath);??if(ix!=CB_ERR)??{ m_ctrlLocal.DeleteString(ix); }??for(intj=k—1;j>=2;--j)? {?? if(m_strLocPat(yī)h.GetAt(j)=='\\’) {?? m_strLocPath=m_strLocPath.Left(j+1); ???break;? ?}}? ListLocFile();*pResult=0;??return; } if(SecondColumn=="文件夾")?{? CStringstrTemp=FirstColumn; ?m_strLocPath+=strTemp+'\\';ListLocFile();//更新本地磁盤文件顯示 }?elseif(SecondColumn=="文件”)?{//點(diǎn)到的是文件,進(jìn)行上傳??if(cFtpOpr。ReStat(yī)us()==2)??{ ?cFtpOpr。PutFtpFile(m_strLocPat(yī)h+FirstColumn,F(xiàn)irstColumn); ??UpdateServerFile();//更新服務(wù)器的文件顯示??}?} *pResult=0;}voidCFtpDlg::OnDblclkListServerfile(NMHDR*pNMHDR,LRESULT*pResult){ //TODO:Addyourcontrolnotificationhandlercodehere?//獲取選中的的一個(gè)位置 POSITIONp=m_ctrlServerFile.GetFirstSelectedItemPosition(); if(p==NULL)?{ return; }?//獲取剛選取的位置的下標(biāo)(從0開始的) intindex=m_ctrlServerFile。GetNextSelectedItem(p); //獲得選中的內(nèi)容,得到第index行。第0列的內(nèi)容(下標(biāo)從0開始)?CStringFirstColumn=m_ctrlServerFile.GetItemText(index,0);CStringSecondColumn=m_ctrlServerFile。GetItemText(index,1); CStringArrayServName; intnFileNumber=0;?if(index==0)//返回上層目錄 { ?if(cFtpOpr.setBackPath()==0) ?{?? *pResult=0; return;??}UpdateServerFile();//更新服務(wù)器的文件顯示 ?CStringtemp; ?m_ctrlServer.ResetContent();??cFtpOpr.GetPath(temp); ?m_ctrlServer.AddString((LPSTR)(LPCTSTR)temp);m_ctrlServer.SetCurSel(0);*pResult=0;? return;?}?if(SecondColumn=="文件夾”)?{ if(cFtpOpr.setNextPath(FirstColumn)==0) ?{ ?*pResult=0;? ?return; ?} ?UpdateServerFile();//更新服務(wù)器的文件顯示 ?CStringtemp;??m_ctrlServer.ResetContent();? cFtpOpr。GetPath(temp);? m_ctrlServer。AddString((LPSTR)(LPCTSTR)temp);m_ctrlServer.SetCurSel(0);?}?elseif(SecondColumn=="文件") {//點(diǎn)到的是文件,進(jìn)行下載??cFtpOpr.GetFtpFile(FirstColumn,m_strLocPath);??ListLocFile();?} *pResult=0;}//將本地文件列表出來voidCFtpDlg::ListLocFile(){ m_ctrlLocalFile.DeleteAllItems();?intix=m_ctrlLocal。FindString(0,m_strLocPath);if(ix==CB_ERR)?{ intiy=m_ctrlLocal.GetCount();m_ctrlLocal。SetCurSel(m_ctrlLocal.AddString(m_strLocPath));}?else { ?m_ctrlLocal。SetCurSel(m_ctrlLocal.SetCurSel(ix)); }?intk=0;?m_ctrlLocalFile。InsertItem(0,”.。。上層目錄”);char*lpPat(yī)h=(LPSTR)(LPCTSTR)m_strLocPath;charszFind[300];WIN32_FIND_DATAFindFileData;strcpy(szFind,lpPath);strcat(szFind,”*。*");HANDLEhFind=::FindFirstFile(szFind,&FindFileData);while(TRUE){if(FindFileData.dwFileAttributes&FILE_ATTRIBUTE_(tái)DIRECTORY){ CStringstr=FindFileData.cFileName;?? if(str!=’.’&&str!=”..”) { LVITEMlvitem;? lvitem。mask=LVIF_IMAGE|LVIF_TEXT;????lvitem.iItem=k+1; ?? lvitem。pszText=(LPSTR)(LPCTSTR)str;????lvitem。iImage=0; ? lvitem。iSubItem=0; ? m_ctrlLocalFile.InsertItem(&lvitem);??? m_ctrlLocalFile.SetItemText(k+1,1,"文件夾");++k;? ?} ??}else{ ??//文件 ?LVITEMlvitem; ?lvitem.mask=LVIF_IMAGE|LVIF_TEXT;?? lvitem.iItem=k+1;?? lvitem。pszText=FindFileData.cFileName;? ?lvitem。iImage=1;???lvitem.iSubItem=0;???m_ctrlLocalFile。InsertItem(&lvitem); ??m_ctrlLocalFile.SetItemText(k+1,1,"文件");++k;??}if(!FindNextFile(hFind,&FindFileData))break;} FindClose(hFind);}//選擇了本地文件的組合框中的不同項(xiàng)目voidCFtpDlg::OnSelchangeComboboxexLocal(){ m_ctrlLocal。SetCurSel(m_ctrlLocal。GetCurSel()); m_ctrlLocal.GetWindowText(m_strLocPath);m_ctrlLocal.ResetContent();?//添加硬盤盤符?size_tszAllDriveStrings=::GetLogicalDriveStrings(0,NULL);?TCHAR*pDriveStrings=newTCHAR[szAllDriveStrings+sizeof(_T(”"))];?GetLogicalDriveStrings(szAllDriveStrings,pDriveStrings); size_tszDriveString=::strlen(pDriveStrings);?while(szDriveString>0) { m_ctrlLocal。AddString(pDriveStrings); pDriveStrings+=szDriveString+1;??szDriveString=::strlen(pDriveStrings);?}?ListLocFile();?}//點(diǎn)擊了ASCII單選按鈕voidCFtpDlg::OnAscii(){??bBinary1=0;}//點(diǎn)擊了二進(jìn)制單選按鈕voidCFtpDlg::OnBinary(){ ?bBinary1=1;//使用二進(jìn)制}//自動(dòng)選擇二進(jìn)制或ASCII單選按鈕voidCFtpDlg::OnAuto(){?bBinary1=2;//自動(dòng)}//主動(dòng)方式單選按鈕voidCFtpDlg::OnActive(){ bPassive1=0;}//被動(dòng)方式單選按鈕voidCFtpDlg::OnPassive(){ bPassive1=1;}//上傳voidCFtpDlg::OnBtnup(){?POSITIONp=m_ctrlLocalFile.GetFirstSelectedItemPosition(); if(p==NULL) { return;?} //獲取剛選取的位置的下標(biāo)(從0開始的)?intindex=m_ctrlLocalFile.GetNextSelectedItem(p);?//獲得選中的內(nèi)容 //得到第index行。第0列的內(nèi)容(下標(biāo)從0開始)?CStringFirstColumn=m_ctrlLocalFile。GetItemText(index,0);CStringSecondColumn=m_ctrlLocalFile.GetItemText(index,1);?if(SecondColumn=="文件夾”)?{ CTimeCurrentTime=CTime::GetCurrentTime(); ?CStringstrTime; ?strTime。Format("%d/%d/%d%d:%d:%d”,CurrentTime。GetYear(),CurrentTime.GetMonth(),? ?CurrentTime.GetDay(),CurrentTime。GetHour(),CurrentTime.GetMinute(),?? CurrentTime。GetSecond());strTime+=”暫不支持上傳文件夾!\r\n";? intnLength=m_ediMessage.SendMessage(WM_GETTEXTLENGTH);m_ediMessage.SetSel(nLength,nLength);m_ediMessage。ReplaceSel(strTime);? return; } elseif(SecondColumn=="文件”) { ?//點(diǎn)到的是文件,進(jìn)行上傳??if(cFtpOpr。ReStat(yī)us()==2) ?{???cFtpOpr.PutFtpFile(m_strLocPath+FirstColumn,FirstColumn);UpdateServerFile();//更新服務(wù)器的文件顯示? } }}//下載voidCFtpDlg::OnBtndown(){ //TO(shè)DO:Addyourcontrolnotificationhandlercodehere POSITIONp=m_ctrlServerFile.GetFirstSelectedItemPosition();?if(p==NULL) {? return; } //獲取剛選取的位置的下標(biāo)(從0開始的)?intindex=m_ctrlServerFile.GetNextSelectedItem(p);?//獲得選中的內(nèi)容 //得到第index行。第0列的內(nèi)容(下標(biāo)從0開始) CStringFirstColumn=m_ctrlServerFile.GetItemText(index,0);CStringSecondColumn=m_ctrlServerFile.GetItemText(index,1); if(SecondColumn==”文件夾")?{? CTimeCurrentTime=CTime::GetCurrentTime(); CStringstrTime;? strTime。Format("%d/%d/%d%d:%d:%d",CurrentTime.GetYear(),CurrentTime。GetMonth(),???CurrentTime.GetDay(),CurrentTime.GetHour(),CurrentTime。GetMinute(),? ?CurrentTime.GetSecond());strTime+=”暫不支持下載文件夾?。躵\n";??intnLength=m_ediMessage。SendMessage(WM_GETTEXTLENGTH);m_ediMessage.SetSel(nLength,nLength);m_ediMessage.ReplaceSel(strTime);??return; }?elseif(SecondColumn==”文件") { ?//點(diǎn)到的是文件,進(jìn)行下載??if(cFtpOpr。ReStatus()==2) ?{?? //點(diǎn)到的是文件,進(jìn)行下載? ?cFtpOpr。GetFtpFile(FirstColumn,m_strLocPath);? ListLocFile();//下載完成后更新本地文件顯示 ?} }}//刪除服務(wù)器文件或文件夾voidCFtpDlg::OnBtndel(){?POSITIONp=m_ctrlServerFile.GetFirstSelectedItemPosition(); if(p==NULL) { return; }??//獲取剛選取的位置的下標(biāo)(從0開始的) intindex=m_ctrlServerFile.GetNextSelectedItem(p); //獲得選中的內(nèi)容?//得到第index行。第0列的內(nèi)容(下標(biāo)從0開始) CStringFirstColumn=m_ctrlServerFile.GetItemText(index,0);CStringSecondColumn=m_ctrlServerFile。GetItemText(index,1);?if(SecondColumn==”文件夾") {??if(cFtpOpr。ReStat(yī)us()==2)? { ?//移除文件夾???cFtpOpr.DeleteFTPf(FirstColumn,0);???Updat(yī)eServerFile();//更新服務(wù)器的文件顯示??} ? return;?}?elseif(SecondColumn==”文件”)?{? if(cFtpOpr。ReStat(yī)us()==2) ?{ //移除文件???cFtpOpr.DeleteFTPf(FirstColumn,1);?? UpdateServerFile();//更新服務(wù)器的文件顯示? }?}}voidCFtpDlg::UpdateServerFile()//更新服務(wù)器的文件顯示{ ?? //獲得目錄?CStringArraylocalName; intnFileNumber=0; nFileNumber=cFtpOpr.GetMultipleFileName(&localName); ?m_ctrlServerFile。DeleteAllItems();?m_ctrlServerFile.InsertItem(0,”..。上層目錄”);for(inttest=0;test〈nFileNumber;test++)?{ CStringstTemp=localName。GetAt(test); if(stTemp。Right(5)=="〈DIR>")??{//文件夾 LVITEMlvitem;???CStringstr=stTemp.Left(stTemp。GetLength()-5); ??lvitem.mask=LVIF_IMAGE|LVIF_TEXT;???lvitem.iItem=test+1;?? lvitem。pszText=(LPSTR)(LPCTSTR)str; ??lvitem.iImage=0;???lvitem.iSubItem=0; ??m_ctrlServerFile。InsertItem(&lvitem);?? m_ctrlServerFile.SetItemText(test+1,1,"文件夾”);??} else {//文件 ? LVITEMlvitem;?? lvitem.mask=LVIF_IMAGE|LVIF_TEXT;? ?lvitem.iItem=test+1;? ?lvitem.pszText=(LPSTR)(LPCTSTR)stTemp;???lvitem.iImage=1; lvitem。iSubItem=0;? m_ctrlServerFile.InsertItem(&lvitem); ? m_ctrlServerFile.SetItemText(test+1,1,"文件”);? }?}??}voidCFtpDlg::OnBtnhelp(){ CAboutDlgdlg;?dlg.DoModal();}//用于屏蔽按下回車鍵程序退出的問題BOOLCFtpDlg::PreTranslateMessage(MSG*pMsg){?if(pMsg—>message==WM_KEYDOWN&&pMsg-〉wParam==VK_RETURN) {??returntrue; } returnCDialog::PreTranslateMessage(pMsg);}//復(fù)選框,是否匿名voidCFtpDlg::OnChkanonymous(){?if(m_chkAnony.GetCheck()) {//被選上 bAnony=1;//使用匿名??m_editName.GetWindowText(m_strName);//記錄FTP登陸用戶名,用于不使用匿名后恢復(fù) m_editPassword。GetWindowText(m_strPassword);//記錄FTP登陸用戶密碼,用于不使用匿名后恢復(fù)m_editName.SetWindowText("anonymous"); ?m_editPassword。SetWindowText("”); ?m_editName.EnableWindow(FALSE);??m_editPassword.EnableWindow(FALSE);?}?else {??bAnony=0;//不使用匿名 m_editName.SetWindowText(m_strName);//恢復(fù) m_editPassword.SetWindowText(m_strPassword);//恢復(fù) ?m_editName.EnableWindow(TRUE); ?m_editPassword.EnableWindow(TRUE);?}}(2)CFtpOperat(yī)e的一些函數(shù)定義//構(gòu)造函數(shù)CFtpOperate::CFtpOperat(yī)e(){?strAppName。LoadString(AFX_IDS_APP_TITLE);//獲得應(yīng)用程序的名字 pInternetSession=newCInternetSession(strAppName,INTERNET_OPEN_TYPE_PRECONFIG);pEdiMes=NULL; if(!pInternetSession) { AfxMessageBox("初始化會(huì)話失??!”);??flag=-1;//初始化失敗設(shè)為-1? return;?}?flag=0;//初始化成功,標(biāo)志初始化為0}//析構(gòu)函數(shù)CFtpOperate::~CFtpOperate(){ pInternetSession—>Close();?if(pInternetSession!=NULL)?{??deletepInternetSession; }}//設(shè)置,由外部調(diào)用,把數(shù)據(jù)傳進(jìn)來boolCFtpOperate::set(CStringFullURL,CStringUserName,CStringPassword){ if(flag==-1)//類實(shí)例初始化時(shí)失敗?{//重新設(shè)定strAppName。LoadString(AFX_IDS_APP_TITLE);//獲得應(yīng)用程序的名字??pInternetSession=newCInternetSession(strAppName,INTERNET_OPEN_TYPE_PRECONFIG);??if(!pInternetSession)? {? AfxMessageBox("初始化會(huì)話失??!"); ??flag=-1;//初始化失敗設(shè)為—1? return0;? }? flag=0; }?//flag不等于—1時(shí)才會(huì)進(jìn)行以下設(shè)置?m_strUserName=UserName;//用戶名字 m_strPassword=Password;//用戶密碼?m_strFullURL=FullURL;//設(shè)置路徑if(m_strFullURL==""||m_strUserName=="")?{??flag=0;} else {??if(m_strFullURL.Left(6)?。健保鎡p://")? { m_strFullURL="ftp://”+m_strFullURL; ?} ?flag=1;??return1; }return0; }//打開連接boolCFtpOperate::OpenConnection(){ if(flag==2) {//已連接了,先斷開 CloseConnection();? flag=1; }?if(flag!=1)?{ AfxMessageBox("未成功進(jìn)行set調(diào)用”); ?return0;?} CWaitCursorcursor;?CStringstrTemp;?strTemp="ftp://”;?//解析URL if(?。粒鎥ParseURL(m_strFullURL,dwServiceType,m_strServerName,strAppName,nPort))?{? CurrentTime=CTime::GetCurrentTime();strTime.Format(”%d/%d/%d%d:%d:%d",CurrentTime.GetYear(),CurrentTime.GetMonth(),CurrentTime.GetDay(),CurrentTime.GetHour(),CurrentTime.GetMinute(),CurrentTime。GetSecond());strTime+="無法解析FTP服務(wù)器"+m_strFullURL+"\r\n";??intnLength=pEdiMes->SendMessage(WM_GETTEXTLENGTH);pEdiMes—>SetSel(nLength,nLength);pEdiMes—>ReplaceSel(strTime);??flag=0;? return0;?}?//提取pat(yī)h?intnI(lǐng)ndex=strTemp。GetLength()+m_strServerName.GetLength();?m_strFullPath=m_strFullURL.Right(m_strFullURL。GetLength()—nI(lǐng)ndex);//設(shè)置服務(wù)器當(dāng)前路徑名?m_strFullPath+=’/';?//解析成功后進(jìn)行連接?try {??CurrentTime=CTime::GetCurrentTime();?strTime。Format("%d/%d/%d%d:%d:%d”,CurrentTime.GetYear(),CurrentTime。GetMonth(),? CurrentTime。GetDay(),CurrentTime。GetHour(),CurrentTime.GetMinute(),CurrentTime。GetSecond());strTime+=”準(zhǔn)備連接FTP服務(wù)器”+m_strServerName+"。.....。.\r\n";? nLength=pEdiMes->SendMessage(WM_GETTEXTLENGTH);pEdiMes->SetSel(nLength,nLength);pEdiMes—〉ReplaceSel(strTime);??//當(dāng)選擇匿名的時(shí)候,m_strUserName為anonymous,m_strPassword ?//不使用匿名時(shí)為用戶輸入的用戶名和密碼??if(bPassive1==1)??{???//使用被動(dòng)方式? pFtpConnection=pInternetSession—>GetFtpConnection(m_strServerName,m_strUserName,m_strPassword,?? ?myPort,TRUE);??}??else { ??//使用主動(dòng)方式 ??pFtpConnection=pInternetSession->GetFtpConnection(m_strServerName,m_strUserName,m_strPassword, ???myPort,FALSE); ?}if(pFtpConnection==NULL) { ? CurrentTime=CTime::GetCurrentTime();? strTime。Format("%d/%d/%d%d:%d:%d",CurrentTime。GetYear(),CurrentTime.GetMonth(), CurrentTime.GetDay(),CurrentTime.GetHour(),CurrentTime.GetMinute(), ?CurrentTime.GetSecond()); ? strTime+="連接失敗\r\n"; ? nLength=pEdiMes->SendMessage(WM_GETTEXTLENGTH); ? pEdiMes->SetSel(nLength,nLength);?? pEdiMes->ReplaceSel(strTime); ?return0;}? CurrentTime=CTime::GetCurrentTime();strTime.Format("%d/%d/%d%d:%d:%d”,CurrentTime.GetYear(),CurrentTime.GetMonth(),CurrentTime.GetDay(),CurrentTime。GetHour(),CurrentTime.GetMinute(),CurrentTime.GetSecond());strTime+=”成功連接FTP服務(wù)器”+m_strServerName+"\r\n當(dāng)前目錄為:”+m_strFullPath+”\r\n”; nLength=pEdiMes->SendMessage(WM_GETTEXTLENGTH);pEdiMes->SetSel(nLength,nLength);pEdiMes->ReplaceSel(strTime);? flag=2;//連接成功后設(shè)為2 } catch(CInternetException*pEx)?{ TCHARszErr[1024];??pEx-〉GetErrorMessage(szErr,1024); TRACE(szErr); CurrentTime=CTime::GetCurrentTime();strTime.Format("%d/%d/%d%d:%d:%d”,CurrentTime.GetYear(),CurrentTime。GetMonth(), CurrentTime.GetDay(),CurrentTime。GetHour(),CurrentTime.GetMinute(),CurrentTime。GetSecond());strTime=strTime+"”+szErr+"\r\n"; ?nLength=pEdiMes->SendMessage(WM_GETTEXTLENGTH);pEdiMes->SetSel(nLength,nLength);pEdiMes->ReplaceSel(strTime); pEx->Delete(); flag=0;//連接失敗??return0;?} return1;}//關(guān)閉連接boolCFtpOperate::CloseConnection(){ if(pFtpConnection==NULL) {??return1;?}?try?{? pFtpConnection—>Close();?} catch(。。.)?{ ?return0;?} if(pFtpConnection!=NULL) { ?deletepFtpConnection;?}?CurrentTime=CTime::GetCurrentTime();?strTime。Format(yī)(”%d/%d/%d%d:%d:%d",CurrentTime。GetYear(),CurrentTime。GetMonth(),? CurrentTime.GetDay(),CurrentTime.GetHour(),CurrentTime.GetMinute(),? ????CurrentTime.GetSecond()); strTime+="------——-—-—已關(guān)閉連接-——------\r\n”;?nLength=pEdiMes-〉SendMessage(WM_GETTEXTLENGTH);?pEdiMes->SetSel(nLength,nLength);?pEdiMes->ReplaceSel(strTime);flag=1;//關(guān)閉成功?return1;}//返回當(dāng)前的狀態(tài)intCFtpOperate::ReStatus(){?returnflag;}//下載文件intCFtpOperate::GetFtpFile(CStringremote,CStringlocal) ?? {?if(flag!=2)?{//連接未成功 return0; } CWaitCursorcursor; //initsomevar?BOOLgoodfile; intx=0;?CurrentTime=CTime::GetCurrentTime(); strTime.Format(”%d/%d/%d%d:%d:%d”,CurrentTime.GetYear(),CurrentTime。GetMonth(),CurrentTime.GetDay(),CurrentTime.GetHour(),CurrentTime.GetMinute(),CurrentTime.GetSecond());strTime+=”下載文件,請稍候:"+remote+"。.。。.。。\r\n”;? nLength=pEdiMes—>SendMessage(WM_GETTEXTLENGTH);pEdiMes-〉SetSel(nLength,nLength);pEdiMes->ReplaceSel(strTime);?pFtpConnection-〉SetCurrentDirectory(m_strFullPat(yī)h); if(bBinary1==1) {? //二進(jìn)制方式 goodfile=pFtpConnection-〉GetFile(m_strFullPat(yī)h+'/’+remote,local+remote, FALSE,F(xiàn)ILE_ATTRIBUTE_NORMAL,F(xiàn)TP_TRANSFER_TYPE_(tái)BINARY); } else {??if(bBinary1==0)? {//ASCII方式 ?goodfile=pFtpConnection->GetFile(m_strFullPath+’/'+remote,local+remote,???FALSE,FILE_ATTRIBUTE_NORMAL,FTP_TRANSFER_TYPE_ASCII); }? elseif(bBinary1==2)??{goodfile=pFtpConnection->GetFile(m_strFullPath+'/'+remote,local+remote,? FALSE,F(xiàn)ILE_ATTRIBUTE_NORMAL,F(xiàn)TP_TRANSFER_TYPE_UNKNOWN); ?} ??} if(?。鏾odfile) {? CurrentTime=CTime::GetCurrentTime(); strTime.Format("%d/%d/%d%d:%d:%d",CurrentTime.GetYear(),CurrentTime.GetMonth(),? CurrentTime.GetDay(),CurrentTime.GetHour(),CurrentTime.GetMinute(),? ?CurrentTime。GetSecond());strTime+=”下載出錯(cuò),請重試\r\n";??nLength=pEdiMes-〉SendMessage(WM_GETTEXTLENGTH);pEdiMes—〉SetSel(nLength,nLength);pEdiMes—>ReplaceSel(strTime);??return0; } else?{ ?CurrentTime=CTime::GetCurrentTime(); ?strTime。Format("%d/%d/%d%d:%d:%d",CurrentTime.GetYear(),CurrentTime。GetMonth(), ?CurrentTime.GetDay(),CurrentTime.GetHour(),CurrentTime.GetMinute(),?? CurrentTime.GetSecond());??strTime+="下載文件成功,保存于:"+local+remote+"\r\n";? nLength=pEdiMes-〉SendMessage(WM_GETTEXTLENGTH); pEdiMes—〉SetSel(nLength,nLength); ?pEdiMes->ReplaceSel(strTime); } return1;}//上傳文件intCFtpOperate::PutFtpFile(CStringlocal,CStringremote){ if(flag!=2) {//連接未成功 ?return0; } CWaitCursorcursor;?BOOLgoodfile; intx=0; pFtpConnection->SetCurrentDirectory(m_strFullPat(yī)h); CurrentTime=CTime::GetCurrentTime();?strTime.Format("%d/%d/%d%d:%d:%d",CurrentTime。GetYear(),CurrentTime。GetMonth(),??CurrentTime。GetDay(),CurrentTime。GetHour(),CurrentTime.GetMinute(),??CurrentTime。GetSecond()); strTime+="上傳文件,請稍候:"+local+"\r\n"; nLength=pEdiMes->SendMessage(WM_GETTEXTLENGTH); pEdiMes—>SetSel(nLength,nLength); pEdiMes->ReplaceSel(strTime); if(bBinary1==1) {//二進(jìn)制方式??goodfile=pFtpConnection-〉PutFile(local,m_strFullPath+remote,F(xiàn)TP_TRANSFER_TYPE_BINARY);?}?else {? if(bBinary1==0) {//ASCII方式 goodfile=pFtpConnection->PutFile(local,m_strFullPath+remote,FTP_TRANSFER_TYPE_ASCII); } ?elseif(bBinary1==2)??{//自動(dòng)方式???goodfile=pFtpConnection—〉PutFile(local,m_strFullPath+remote,FTP_TRANSFER_TYPE_UNKNOWN); } }?if(!goodfile)?{? CurrentTime=CTime::GetCurrentTime(); ?strTime.Format("%d/%d/%d%d:%d:%d”,CurrentTime.GetYear(),CurrentTime.GetMonth(), ?CurrentTime.GetDay(),CurrentTime.GetHour(),CurrentTime。GetMinute(),? ?CurrentTime.GetSecond()); ?strTime+=”上傳出錯(cuò),請重試\r\n”; nLength=pEdiMes-〉SendMessage(WM_GETTEXTLENGTH);? pEdiMes->SetSel(nLength,nLength); pEdiMes-〉ReplaceSel(strTime); ?return0; } else?{? CurrentTime=CTime::GetCurrentTime();??strTime.Format(”%d/%d/%d%d:%d:%d”,CurrentTime。GetYear(),CurrentTime.GetMonth(),?? CurrentTime.GetDay(),CurrentTime。GetHour(),CurrentTime.GetMinute(),?? CurrentTime.GetSecond()); strTime+=”文件:”+local+”上傳成功”+"\r\n";??nLength=pEdiMes-〉SendMessage(WM_GETTEXTLENGTH); pEdiMes—>SetSel(nLength,nLength); pEdiMes->ReplaceSel(strTime); } return1;}intCFtpOperate::GetMultipleFileName(CStringArray*localNameArray)//localNameArray作為輸出參數(shù){?if(flag!=2) {//連接未成功? return0; }?CWaitCursorcursor;?BOOLgoodfile; intx=0;?intnFileNumber=0;?pFtpConnection—〉SetCurrentDirectory(m_strFullPath); CFtpFileFindfFiles(pFtpConnection); goodfile=fFiles.FindFile(m_strFullPath+"*”);?if(goodfile==FALSE) { ?fFiles.Close(); ?return0;?}?CStringstr;?while(goodfile)?{ goodfile=fFiles。FindNextFile();?str=fFiles.GetFileName();?if(fFiles.IsDirectory())??{? ?str+=”<DIR〉”; }??localNameArray->InsertAt(x,str);? nFileNumber++; ?x++; }fFiles。Close(); //returnthenum

溫馨提示

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

評論

0/150

提交評論