ftp客戶(hù)端課程設(shè)計(jì)報(bào)告書(shū)_第1頁(yè)
ftp客戶(hù)端課程設(shè)計(jì)報(bào)告書(shū)_第2頁(yè)
ftp客戶(hù)端課程設(shè)計(jì)報(bào)告書(shū)_第3頁(yè)
ftp客戶(hù)端課程設(shè)計(jì)報(bào)告書(shū)_第4頁(yè)
ftp客戶(hù)端課程設(shè)計(jì)報(bào)告書(shū)_第5頁(yè)
已閱讀5頁(yè),還剩24頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、-PAGE . z. - - s-計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)課題名稱(chēng) FTP客戶(hù)機(jī)搭建 學(xué)院 信息工程學(xué)院 專(zhuān)業(yè) 網(wǎng)絡(luò)工程 班級(jí) * * 目錄和索引一、需求分析21、功能需求2、開(kāi)發(fā)環(huán)境與工具3、所需要知識(shí)二、知識(shí)理解 21、FTP實(shí)現(xiàn)的根本原理1概要2上傳和下載3用戶(hù)FTP和匿名FTP4ASCII和Binary(5)Port和Passive三、完成進(jìn)度3 1、已完成局部2、未完成局部3、還需改善的局部四、FTP效勞工作過(guò)程4五、詳細(xì)設(shè)計(jì)51、CFtpDlg類(lèi)的一些函數(shù)定義52、CFtpOperate的一些函數(shù)定義17六、測(cè)試結(jié)果29七、用戶(hù)手冊(cè)32八、實(shí)驗(yàn)總結(jié)32FTP客戶(hù)端程序一、需求分析 1、功

2、能需求1實(shí)現(xiàn)一個(gè)圖形用戶(hù)界面的FTP客戶(hù)端,保證文件的平安傳輸和存儲(chǔ)。2提供登錄界面,上傳下載界面、幫助界面、關(guān)于界面。3通過(guò)輸入效勞器地址、用戶(hù)名和密碼,可以實(shí)現(xiàn)遠(yuǎn)程FTP主機(jī)的登錄。4提供本地文件和文件夾的上傳功能,可對(duì)FTP主機(jī)文件進(jìn)展下載和刪除文件。5提供對(duì)本地目錄的讀取與返回,能正確列出文件和文件夾,在沒(méi)有登錄效勞器前可以作為一個(gè)簡(jiǎn)單的文件查詢(xún)工具對(duì)本地文件進(jìn)展查詢(xún)。6幫助頁(yè)面可以對(duì)用戶(hù)提供使用說(shuō)明。7關(guān)于界面包含設(shè)計(jì)者的信息。9要求開(kāi)發(fā)出的FTP客戶(hù)端符合標(biāo)準(zhǔn)FTP協(xié)議規(guī)*,支持ASCII傳輸模式和二進(jìn)制數(shù)據(jù)傳輸模式10FTP的兩種工作模式的選擇Port模式主動(dòng)和Passive模式

3、被動(dòng)2、開(kāi)發(fā)環(huán)境與工具(1)使用的IDE:使用VC+6.0作為開(kāi)發(fā)環(huán)境IDE(2)使用的語(yǔ)言:C+3使用的開(kāi)發(fā)包:使用MFC和WinInet4開(kāi)發(fā)平臺(tái):Windows 73、所需要知識(shí)(1)計(jì)算機(jī)網(wǎng)絡(luò)的根本知識(shí) 2了解FTP根本實(shí)現(xiàn)原理 2使用VC+6.0IDE進(jìn)展MFC程序開(kāi)發(fā)的根本知識(shí) 3熟悉WinInet中屬于FTP局部的操作 4熟悉文件或文件夾操作 5熟悉控件的操作,如在List Ctrol添加圖片瀏覽文件或文夾的圖標(biāo)二、知識(shí)理解1、FTP實(shí)現(xiàn)的根本原理1概要Internet是一個(gè)非常復(fù)雜的計(jì)算機(jī)環(huán)境, Internet上的計(jì)算機(jī)已有上千萬(wàn)臺(tái),而這些計(jì)算機(jī)可能運(yùn)行不同的操作系統(tǒng),有運(yùn)行

4、Uni*的效勞器,也有運(yùn)行Dos、Windows的PC機(jī)等等,而各種操作系統(tǒng)之間的文件交流問(wèn)題,需要建立一個(gè)統(tǒng)一的文件傳輸協(xié)議,這就是所謂的FTP?;诓煌牟僮飨到y(tǒng)有不同的FTP應(yīng)用程序,而所有這些應(yīng)用程序都遵守同一種協(xié)議,這樣用戶(hù)就可以把自己的文件傳送給別人,或者從其它的用戶(hù)環(huán)境中獲得文件。FTP也是一個(gè)客戶(hù)機(jī)/效勞器系統(tǒng)。用戶(hù)通過(guò)一個(gè)支持FTP協(xié)議的客戶(hù)機(jī)程序,連接到在遠(yuǎn)程主機(jī)上的FTP效勞器程序。用戶(hù)通過(guò)客戶(hù)機(jī)程序向效勞器程序發(fā)出命令,效勞器程序執(zhí)行用戶(hù)所發(fā)出的命令,并將執(zhí)行的結(jié)果返回到客戶(hù)機(jī)。使用FTP時(shí)必須首先登錄,在遠(yuǎn)程主機(jī)上獲得相應(yīng)的權(quán)限以后,方可下載或上傳文件。2上傳和下載下

5、載文件就是從遠(yuǎn)程主機(jī)拷貝文件至自己的計(jì)算機(jī)上;上傳文件就是將文件從自己的計(jì)算機(jī)中拷貝至遠(yuǎn)程主機(jī)上3用戶(hù)FTP和匿名FTP用戶(hù)FTP: 種方式為已在FTP效勞器上建立了特定*的用戶(hù)使用,需要合法的用戶(hù)名和密碼才能登錄到遠(yuǎn)程計(jì)算機(jī)傳輸文件。 匿名FTP:用戶(hù)作為“anonymous 登錄到FTP效勞器,不需要有自己的用戶(hù)名和密碼。4ASCII和BinaryASCII:文本傳輸器使用ASCII字符,并由回車(chē)鍵和換行符分開(kāi)Binary:二進(jìn)制不用轉(zhuǎn)換或格式化就可傳字符,二進(jìn)制模式比文本模式更快,并且可以傳輸所有ASCII值,所以系統(tǒng)管理員一般將FTP設(shè)置成二進(jìn)制模式。 (5)Port和PassiveP

6、ort模式( 主動(dòng)):FTP 客戶(hù)端首先和FTP效勞器的TCP 21端口建立連接,通過(guò)這個(gè)通道發(fā)送命令,客戶(hù)端需要接收數(shù)據(jù)的時(shí)候在這個(gè)通道上發(fā)送PORT命令。 PORT命令包含了客戶(hù)端用什么端口接收數(shù)據(jù)。在傳送數(shù)據(jù)的時(shí)候,效勞器端通過(guò)自己的TCP 20端口連接至客戶(hù)端的指定端口發(fā)送數(shù)據(jù)。 FTP server必須和客戶(hù)端建立一個(gè)新的連接用來(lái)傳送數(shù)據(jù)。Passive模式被動(dòng):Passive模式在建立控制通道的時(shí)候和Standard模式類(lèi)似,但建立連接后發(fā)送的不是Port命令,而是Pasv命令。FTP效勞器收到Pasv命令后,隨機(jī)翻開(kāi)一個(gè)高端端口端口號(hào)大于1024并且通知客戶(hù)端在這個(gè)端口上傳送數(shù)據(jù)

7、的請(qǐng)求,客戶(hù)端連接FTP效勞器此端口,然后FTP效勞器將通過(guò)這個(gè)端口進(jìn)展數(shù)據(jù)的傳送,這個(gè)時(shí)候FTP server不再需要建立一個(gè)新的和客戶(hù)端之間的連接。三、完成進(jìn)度1、已完成局部1實(shí)現(xiàn)一個(gè)圖形用戶(hù)界面的FTP客戶(hù)端,保證文件的平安傳輸和存儲(chǔ)。2提供登錄界面,上傳下載界面、幫助界面、關(guān)于界面3通過(guò)輸入效勞器地址、用戶(hù)名和密碼,可以實(shí)現(xiàn)遠(yuǎn)程FTP主機(jī)的登錄。4提供本地文件上傳功能,可對(duì)FTP主機(jī)文件進(jìn)展下載和刪除文件。5提供對(duì)本地目錄的讀取與返回,能正確列出文件和文件夾,在沒(méi)有登錄效勞器前可以作為一個(gè)簡(jiǎn)單的文件查詢(xún)工具對(duì)本地文件進(jìn)展查詢(xún)。6幫助頁(yè)面可以對(duì)用戶(hù)提供使用說(shuō)明。7關(guān)于界面包含設(shè)計(jì)者的信息

8、幫助界面和關(guān)于界面整合在一起。9支持ASCII傳輸模式和二進(jìn)制數(shù)據(jù)傳輸模式,外加自動(dòng)選擇的模式10FTP的兩種工作模式的選擇Port模式主動(dòng)和Passive模式被動(dòng)11提供用戶(hù)操作的狀態(tài)信息輸出2、未完成局部只提供了本地文件的上傳功能,暫時(shí)不能提供文件夾的上傳功能,由于當(dāng)初沒(méi)有使用多線程對(duì)效勞器端進(jìn)展操作,假設(shè)上傳或下載的文件過(guò)大,會(huì)導(dǎo)致界面陷入長(zhǎng)時(shí)間的不響應(yīng)中。由于時(shí)間問(wèn)題,就不再進(jìn)展多線程的擴(kuò)大,也就不提供文件夾的上傳功能。3、還需改善的局部 1使用多線程進(jìn)展操作 2提供文件夾上傳和文件夾下載功能 3改良界面,提供更方便的操作 4增加上傳和下載的隊(duì)列 5同時(shí)可連接多個(gè)FTP效勞器 6改善提

9、示信息 7賬戶(hù)。密碼等用戶(hù)資料在本地加密后保存 8增加更多的功能,如下載完成后關(guān)機(jī)等 9等四、FTP效勞工作程五、詳細(xì)設(shè)計(jì) 1CFtpDlg類(lèi)的一些函數(shù)定義BOOL CFtpDlg:OnInitDialog()CDialog:OnInitDialog();/ Add About. menu item to system menu./ IDM_ABOUTBO* must be in the system mand range.ASSERT(IDM_ABOUTBO* & 0*FFF0) = IDM_ABOUTBO*);ASSERT(IDM_ABOUTBO* AppendMenu(MF_SEPARA

10、TOR);pSysMenu-AppendMenu(MF_STRING, IDM_ABOUTBO*, strAboutMenu);SetIcon(m_hIcon, TRUE);SetIcon(m_hIcon, FALSE);m_ctrBinary.SetCheck(1); m_ctrActive.SetCheck(1); m_editPort.SetWindowTe*t(21);bBinary1 = 1; / 使用二進(jìn)制 bPassive1 = 0; / 使用主動(dòng) myPort = 21;m_imgList.Create(20,20,ILC_COLOR32,0,0); / 創(chuàng)立圖像列表 m_im

11、gList.SetBkColor(RGB(255,255,255); / 文件夾圖標(biāo)hIconFold = :LoadIcon(Af*GetResourceHandle(),MAKEINTRESOURCE(IDI_FOLDER);/ 文件圖標(biāo)hIconFile = :LoadIcon(Af*GetResourceHandle(),MAKEINTRESOURCE(IDI_FILE); m_imgList.Add(hIconFold); m_imgList.Add(hIconFile); m_ctrlLocalFile.SetImageList(&m_imgList,LVSIL_SMALL); /

12、 關(guān)聯(lián) m_ctrlServerFile.SetImageList(&m_imgList,LVSIL_SMALL); / 關(guān)聯(lián)m_editServer.SetWindowTe*t(ftp:/);m_editName.SetWindowTe*t();m_editPassword.SetWindowTe*t();m_btnCon.EnableWindow(TRUE);m_btnClo.EnableWindow(FALSE);m_ctrlLocalFile.SetE*tendedStyle(LVS_E*_FULLROWSELECT|LVS_E*_GRIDLINES);m_ctrlServerFile

13、.SetE*tendedStyle(LVS_E*_FULLROWSELECT|LVS_E*_GRIDLINES);m_ctrlLocalFile.InsertColumn(0,文件名,LVCFMT_LEFT,140,0);/設(shè)置列 m_ctrlLocalFile.InsertColumn(1,文件類(lèi)型,LVCFMT_LEFT,100,1); m_ctrlLocalFile.InsertColumn(2,修改日期,LVCFMT_LEFT,100,2);m_ctrlServerFile.InsertColumn(0,文件名,LVCFMT_LEFT,140,0);/設(shè)置列 m_ctrlServerF

14、ile.InsertColumn(1,文件類(lèi)型,LVCFMT_LEFT,100,1); m_ctrlServerFile.InsertColumn(2,修改日期,LVCFMT_LEFT,100,2);/ 添加硬盤(pán)盤(pán)符size_t szAllDriveStrings=:GetLogicalDriveStrings(0,NULL);TCHAR *pDriveStrings=new TCHARszAllDriveStrings+sizeof(_T( );GetLogicalDriveStrings(szAllDriveStrings,pDriveStrings);size_t szDriveStri

15、ng=:strlen(pDriveStrings);while(szDriveString0)m_ctrlLocal.AddString(pDriveStrings);pDriveStrings+=szDriveString+1;szDriveString=:strlen(pDriveStrings);int inde* = m_ctrlLocal.FindString(0,c:);m_ctrlLocal.SetCurSel(inde*);m_strLocPath = c:; / 初始化為c盤(pán)ListLocFile();cFtpOpr.setEidt(&m_ediMessage);return

16、 TRUE; / return TRUE unless you set the focus to a controlvoid CFtpDlg:OnSysmand(UINT nID, LPARAM lParam)if (nID & 0*FFF0) = IDM_ABOUTBO*)CAboutDlg dlgAbout;dlgAbout.DoModal();elseCDialog:OnSysmand(nID, lParam);void CFtpDlg:OnPaint() if (IsIconic()CPaintDC dc(this); / device conte*t for paintingSend

17、Message(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);int c*Icon = GetSystemMetrics(SM_C*ICON);int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int * = (rect.Width() - c*Icon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;dc.DrawIcon(*, y, m_hIcon);elseCDialog:OnPaint();

18、HCURSOR CFtpDlg:OnQueryDragIcon()return (HCURSOR) m_hIcon;/ 連接效勞器void CFtpDlg:OnBtnConnect() / TODO: Add your control notification handler code here m_editServer.GetWindowTe*t(m_strServer); / 記錄FTP效勞器地址 CString strtemp;m_editPort.GetWindowTe*t(strtemp);myPort = :atoi(strtemp); / 獲得設(shè)置的端口號(hào)int i;if (bA

19、nony = 0)/ 不使用匿名m_editName.GetWindowTe*t(m_strName); / 記錄FTP登陸用戶(hù)名 m_editPassword.GetWindowTe*t(m_strPassword); / 記錄FTP登陸用戶(hù)密碼i = cFtpOpr.set(m_strServer,m_strName,m_strPassword);else/ 使用匿名CString strNameTemp;m_editName.GetWindowTe*t(strNameTemp); / 匿名登陸的用戶(hù)名i = cFtpOpr.set(m_strServer,strNameTemp,); i

20、f (i)/ 設(shè)置成功,翻開(kāi)連接 if (cFtpOpr.OpenConnection()/ 連接成功m_btnClo.EnableWindow(TRUE);m_btnCon.EnableWindow(FALSE);UpdateServerFile();/ 更新效勞器的文件顯示m_ctrlServer.ResetContent();CString temp;cFtpOpr.GetPath(temp);m_ctrlServer.AddString(LPSTR)(LPCTSTR)temp); m_ctrlServer.SetCurSel(0);m_chkAnony.EnableWindow(FAL

21、SE);m_ctrActive.EnableWindow(FALSE);CButton *temp2 =(CButton*)GetDlgItem(IDC_PASSIVE);temp2-EnableWindow(FALSE);m_editPort.EnableWindow(FALSE); else/ 連接失敗void CFtpDlg:OnBtnClose() / 關(guān)閉連接if (cFtpOpr.CloseConnection()/ 關(guān)閉成功m_btnClo.EnableWindow(FALSE);m_btnCon.EnableWindow(TRUE);m_ctrlServerFile.Delet

22、eAllItems();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)void CFtpDlg:OnDblclkListLocalfile(NMHDR* pNMHDR, LRESULT* pResult) / TODO: Ad

23、d your control notification handler code herePOSITION p=m_ctrlLocalFile.GetFirstSelectedItemPosition();if (p = NULL)return;/獲取剛選取的位置的下標(biāo)(從0開(kāi)場(chǎng)的) int inde* = m_ctrlLocalFile.GetNe*tSelectedItem(p);/獲得選中的內(nèi)容/得到第inde*行.第0列的內(nèi)容(下標(biāo)從0開(kāi)場(chǎng))CString FirstColumn=m_ctrlLocalFile.GetItemTe*t(inde*,0); CString SecondC

24、olumn = m_ctrlLocalFile.GetItemTe*t(inde*,1);if (inde* = 0) / 返回上層目錄 int k = m_strLocPath.GetLength() - 1;if (m_strLocPath.Right(2) = :)return;/ 刪除當(dāng)層的工程int i* = m_ctrlLocal.FindString(0,m_strLocPath);if (i* != CB_ERR)m_ctrlLocal.DeleteString(i*); for (int j = k -1; j = 2;-j) if (m_strLocPath.GetAt(j

25、) = )m_strLocPath = m_strLocPath.Left(j+1);break; ListLocFile(); *pResult = 0;return;if (SecondColumn=文件夾) CString strTemp = FirstColumn;m_strLocPath += strTemp + ; ListLocFile(); / 更新本地磁盤(pán)文件顯示else if (SecondColumn=文件) / 點(diǎn)到的是文件,進(jìn)展上傳if (cFtpOpr.ReStatus()=2)cFtpOpr.PutFtpFile(m_strLocPath + FirstColum

26、n,FirstColumn);UpdateServerFile();/ 更新效勞器的文件顯示*pResult = 0;void CFtpDlg:OnDblclkListServerfile(NMHDR* pNMHDR, LRESULT* pResult) / TODO: Add your control notification handler code here/獲取選中的的一個(gè)位置POSITION p=m_ctrlServerFile.GetFirstSelectedItemPosition();if (p = NULL)return;/獲取剛選取的位置的下標(biāo)(從0開(kāi)場(chǎng)的) int ind

27、e* = m_ctrlServerFile.GetNe*tSelectedItem(p);/獲得選中的內(nèi)容,得到第inde*行.第0列的內(nèi)容(下標(biāo)從0開(kāi)場(chǎng))CString FirstColumn=m_ctrlServerFile.GetItemTe*t(inde*,0); CString SecondColumn = m_ctrlServerFile.GetItemTe*t(inde*,1);CStringArray ServName; int nFileNumber=0;if (inde* = 0) / 返回上層目錄 if (cFtpOpr.setBackPath() = 0) *pResu

28、lt = 0;return; UpdateServerFile();/ 更新效勞器的文件顯示CString temp;m_ctrlServer.ResetContent();cFtpOpr.GetPath(temp);m_ctrlServer.AddString(LPSTR)(LPCTSTR)temp); m_ctrlServer.SetCurSel(0); *pResult = 0;return;if (SecondColumn=文件夾) if (cFtpOpr.setNe*tPath(FirstColumn) = 0) *pResult = 0;return;UpdateServerFil

29、e();/ 更新效勞器的文件顯示CString temp;m_ctrlServer.ResetContent();cFtpOpr.GetPath(temp);m_ctrlServer.AddString(LPSTR)(LPCTSTR)temp); m_ctrlServer.SetCurSel(0);else if (SecondColumn=文件) / 點(diǎn)到的是文件,進(jìn)展下載cFtpOpr.GetFtpFile(FirstColumn,m_strLocPath);ListLocFile();*pResult = 0;/ 將本地文件列表出來(lái)void CFtpDlg:ListLocFile()m_

30、ctrlLocalFile.DeleteAllItems();int i* = m_ctrlLocal.FindString(0,m_strLocPath); if (i* = CB_ERR)int iy = m_ctrlLocal.GetCount(); m_ctrlLocal.SetCurSel(m_ctrlLocal.AddString(m_strLocPath); elsem_ctrlLocal.SetCurSel(m_ctrlLocal.SetCurSel(i*);int k = 0;m_ctrlLocalFile.InsertItem(0,.上層目錄); char * lpPath

31、 = (LPSTR)(LPCTSTR)m_strLocPath; char szFind300; WIN32_FIND_DATA FindFileData; strcpy(szFind,lpPath); strcat(szFind,*.*); HANDLE hFind=:FindFirstFile(szFind,&FindFileData); while(TRUE) if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) CString str = FindFileData.cFileName;if (str != . & st

32、r != .)LVITEM lvitem;lvitem.mask = LVIF_IMAGE|LVIF_TE*T; lvitem.iItem = k+1; lvitem.pszTe*t = (LPSTR)(LPCTSTR)str; lvitem.iImage = 0; lvitem.iSubItem =0; m_ctrlLocalFile.InsertItem(&lvitem); m_ctrlLocalFile.SetItemTe*t(k+1,1,文件夾); +k; else / 文件LVITEM lvitem;lvitem.mask = LVIF_IMAGE|LVIF_TE*T; lvitem

33、.iItem = k+1; lvitem.pszTe*t = FindFileData.cFileName; lvitem.iImage = 1; lvitem.iSubItem = 0; m_ctrlLocalFile.InsertItem(&lvitem); m_ctrlLocalFile.SetItemTe*t(k+1,1,文件); +k; if(!FindNe*tFile(hFind,&FindFileData)break; FindClose(hFind);/ 選擇了本地文件的組合框中的不同工程void CFtpDlg:OnSelchangebobo*e*Local() m_ctrl

34、Local.SetCurSel(m_ctrlLocal.GetCurSel();m_ctrlLocal.GetWindowTe*t(m_strLocPath); m_ctrlLocal.ResetContent();/ 添加硬盤(pán)盤(pán)符size_t szAllDriveStrings=:GetLogicalDriveStrings(0,NULL);TCHAR *pDriveStrings=new TCHARszAllDriveStrings+sizeof(_T( );GetLogicalDriveStrings(szAllDriveStrings,pDriveStrings);size_t szD

35、riveString=:strlen(pDriveStrings);while(szDriveString0)m_ctrlLocal.AddString(pDriveStrings);pDriveStrings+=szDriveString+1;szDriveString=:strlen(pDriveStrings);ListLocFile();/ 點(diǎn)擊了ASCII單項(xiàng)選擇按鈕void CFtpDlg:OnAscii() bBinary1 = 0; / 點(diǎn)擊了二進(jìn)制單項(xiàng)選擇按鈕void CFtpDlg:OnBinary() bBinary1 = 1; / 使用二進(jìn)制/ 自動(dòng)選擇二進(jìn)制或ASCI

36、I單項(xiàng)選擇按鈕void CFtpDlg:OnAuto() bBinary1 = 2; / 自動(dòng)/ 主動(dòng)方式單項(xiàng)選擇按鈕void CFtpDlg:OnActive() bPassive1 = 0;/ 被動(dòng)方式單項(xiàng)選擇按鈕void CFtpDlg:OnPassive() bPassive1 = 1;/ 上傳void CFtpDlg:OnBtnup() POSITION p=m_ctrlLocalFile.GetFirstSelectedItemPosition();if (p = NULL)return;/獲取剛選取的位置的下標(biāo)(從0開(kāi)場(chǎng)的) int inde* = m_ctrlLocalFile

37、.GetNe*tSelectedItem(p);/獲得選中的內(nèi)容/得到第inde*行.第0列的內(nèi)容(下標(biāo)從0開(kāi)場(chǎng))CString FirstColumn=m_ctrlLocalFile.GetItemTe*t(inde*,0); CString SecondColumn = m_ctrlLocalFile.GetItemTe*t(inde*,1);if (SecondColumn=文件夾) CTime CurrentTime=CTime:GetCurrentTime(); CString strTime;strTime.Format(%d/%d/%d %d:%d:%d ,CurrentTime

38、.GetYear(),CurrentTime.GetMonth(),CurrentTime.GetDay(),CurrentTime.GetHour(), CurrentTime.GetMinute(),CurrentTime.GetSecond(); strTime += 暫不支持上傳文件夾!rn;int nLength = m_ediMessage.SendMessage(WM_GETTE*TLENGTH); m_ediMessage.SetSel(nLength, nLength); m_ediMessage.ReplaceSel(strTime); return;else if (Se

39、condColumn=文件) / 點(diǎn)到的是文件,進(jìn)展上傳if (cFtpOpr.ReStatus()=2)cFtpOpr.PutFtpFile(m_strLocPath + FirstColumn,FirstColumn); UpdateServerFile();/ 更新效勞器的文件顯示/下載void CFtpDlg:OnBtndown() / TODO: Add your control notification handler code herePOSITION p=m_ctrlServerFile.GetFirstSelectedItemPosition();if (p = NULL)r

40、eturn;/獲取剛選取的位置的下標(biāo)(從0開(kāi)場(chǎng)的) int inde* = m_ctrlServerFile.GetNe*tSelectedItem(p);/獲得選中的內(nèi)容/得到第inde*行.第0列的內(nèi)容(下標(biāo)從0開(kāi)場(chǎng))CString FirstColumn=m_ctrlServerFile.GetItemTe*t(inde*,0); CString SecondColumn = m_ctrlServerFile.GetItemTe*t(inde*,1);if (SecondColumn=文件夾) CTime CurrentTime=CTime:GetCurrentTime(); CStri

41、ng strTime;strTime.Format(%d/%d/%d %d:%d:%d ,CurrentTime.GetYear(),CurrentTime.GetMonth(),CurrentTime.GetDay(),CurrentTime.GetHour(), CurrentTime.GetMinute(),CurrentTime.GetSecond(); strTime += 暫不支持下載文件夾!rn;int nLength = m_ediMessage.SendMessage(WM_GETTE*TLENGTH); m_ediMessage.SetSel(nLength, nLengt

42、h); m_ediMessage.ReplaceSel(strTime); return;else if (SecondColumn=文件) / 點(diǎn)到的是文件,進(jìn)展下載if (cFtpOpr.ReStatus()=2)/ 點(diǎn)到的是文件,進(jìn)展下載cFtpOpr.GetFtpFile(FirstColumn,m_strLocPath);ListLocFile(); / 下載完成后更新本地文件顯示/ 刪除效勞器文件或文件夾void CFtpDlg:OnBtndel() POSITION p=m_ctrlServerFile.GetFirstSelectedItemPosition();if (p =

43、 NULL)return;/獲取剛選取的位置的下標(biāo)(從0開(kāi)場(chǎng)的) int inde* = m_ctrlServerFile.GetNe*tSelectedItem(p);/獲得選中的內(nèi)容/得到第inde*行.第0列的內(nèi)容(下標(biāo)從0開(kāi)場(chǎng))CString FirstColumn=m_ctrlServerFile.GetItemTe*t(inde*,0); CString SecondColumn = m_ctrlServerFile.GetItemTe*t(inde*,1);if (SecondColumn=文件夾) if (cFtpOpr.ReStatus()=2)/ 移除文件夾cFtpOpr.

44、DeleteFTPf(FirstColumn,0); UpdateServerFile();/ 更新效勞器的文件顯示return;else if (SecondColumn=文件) if (cFtpOpr.ReStatus()=2)/ 移除文件cFtpOpr.DeleteFTPf(FirstColumn,1);UpdateServerFile();/ 更新效勞器的文件顯示void CFtpDlg:UpdateServerFile()/ 更新效勞器的文件顯示/ 獲得目錄CStringArray localName;int nFileNumber=0;nFileNumber=cFtpOpr.Get

45、MultipleFileName(&localName); m_ctrlServerFile.DeleteAllItems();m_ctrlServerFile.InsertItem(0,.上層目錄); for(int test=0;testnFileNumber;test+) CString stTemp = localName.GetAt(test); if (stTemp.Right(5) = )/ 文件夾LVITEM lvitem;CString str = stTemp.Left(stTemp.GetLength() - 5);lvitem.mask = LVIF_IMAGE|LVI

46、F_TE*T;lvitem.iItem =test+1; lvitem.pszTe*t = (LPSTR)(LPCTSTR)str; lvitem.iImage = 0; lvitem.iSubItem =0; m_ctrlServerFile.InsertItem(&lvitem); m_ctrlServerFile.SetItemTe*t(test+1,1,文件夾);else/ 文件LVITEM lvitem;lvitem.mask = LVIF_IMAGE|LVIF_TE*T; lvitem.iItem =test+1; lvitem.pszTe*t = (LPSTR)(LPCTSTR)

47、stTemp; lvitem.iImage = 1; lvitem.iSubItem =0; m_ctrlServerFile.InsertItem(&lvitem); m_ctrlServerFile.SetItemTe*t(test+1,1,文件); void CFtpDlg:OnBtnhelp() CAboutDlg dlg;dlg.DoModal();/ 用于屏蔽按下回車(chē)鍵程序退出的問(wèn)題BOOL CFtpDlg:PreTranslateMessage(MSG* pMsg) if( pMsg-message =WM_KEYDOWN & pMsg-wParam=VK_RETURN )ret

48、urn true;return CDialog:PreTranslateMessage(pMsg);/ 復(fù)選框,是否匿名void CFtpDlg:OnChkanonymous() if (m_chkAnony.GetCheck()/ 被選上bAnony = 1; / 使用匿名m_editName.GetWindowTe*t(m_strName); / 記錄FTP登陸用戶(hù)名,用于不使用匿名后恢復(fù) m_editPassword.GetWindowTe*t(m_strPassword); / 記錄FTP登陸用戶(hù)密碼,用于不使用匿名后恢復(fù) m_editName.SetWindowTe*t(anonym

49、ous);m_editPassword.SetWindowTe*t();m_editName.EnableWindow(FALSE);m_editPassword.EnableWindow(FALSE);elsebAnony = 0; / 不使用匿名m_editName.SetWindowTe*t(m_strName); / 恢復(fù) m_editPassword.SetWindowTe*t(m_strPassword); / 恢復(fù)m_editName.EnableWindow(TRUE);m_editPassword.EnableWindow(TRUE);2CFtpOperate的一些函數(shù)定義/

50、 構(gòu)造函數(shù)CFtpOperate:CFtpOperate()strAppName.LoadString(AF*_IDS_APP_TITLE); / 獲得應(yīng)用程序的名字pInternetSession = new CInternetSession(strAppName,INTERNET_OPEN_TYPE_PRECONFIG); pEdiMes = NULL;if(!pInternetSession)Af*MessageBo*(初始化會(huì)話失敗!);flag = -1; / 初始化失敗設(shè)為-1return;flag =0; / 初始化成功,標(biāo)志初始化為0 / 析構(gòu)函數(shù)CFtpOperate:CFt

51、pOperate()pInternetSession-Close();if(pInternetSession != NULL)delete pInternetSession;/ 設(shè)置,由外部調(diào)用,把數(shù)據(jù)傳進(jìn)來(lái)bool CFtpOperate:set(CString FullURL,CString UserName,CString Password)if (flag = -1) / 類(lèi)實(shí)例初始化時(shí)失敗/ 重新設(shè)定 strAppName.LoadString(AF*_IDS_APP_TITLE); / 獲得應(yīng)用程序的名字pInternetSession = new CInternetSession

52、(strAppName,INTERNET_OPEN_TYPE_PRECONFIG);if(!pInternetSession)Af*MessageBo*(初始化會(huì)話失敗!);flag = -1; / 初始化失敗設(shè)為-1return 0;flag =0;/ flag 不等于-1時(shí)才會(huì)進(jìn)展以下設(shè)置m_strUserName = UserName; / 用戶(hù)名字 m_strPassword = Password; / 用戶(hù)密碼m_strFullURL = FullURL; / 設(shè)置路徑 if(m_strFullURL = | m_strUserName = )flag = 0; elseif (m_

53、strFullURL.Left(6) != ftp:/)m_strFullURL = ftp:/ + m_strFullURL;flag = 1;return 1; return 0;/ 翻開(kāi)連接bool CFtpOperate:OpenConnection()if (flag =2)/ 已連接了,先斷開(kāi)CloseConnection();flag = 1;if (flag != 1)Af*MessageBo*(未成功進(jìn)展set調(diào)用);return 0;CWaitCursor cursor; CString strTemp;strTemp = ftp:/;/ 解析URLif (!Af*Pars

54、eURL(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 += 無(wú)法解析 FTP效勞器 +

55、 m_strFullURL +rn;int nLength = pEdiMes-SendMessage(WM_GETTE*TLENGTH); pEdiMes-SetSel(nLength, nLength); pEdiMes-ReplaceSel(strTime); flag = 0;return 0;/提取pathint nInde*=strTemp.GetLength()+m_strServerName.GetLength();m_strFullPath=m_strFullURL.Right(m_strFullURL.GetLength()-nInde*); / 設(shè)置效勞器當(dāng)前路徑名m_s

56、trFullPath += /;/ 解析成功后進(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效勞器 + m_strServerName + rn;nLength = pEdiM

57、es-SendMessage(WM_GETTE*TLENGTH); pEdiMes-SetSel(nLength, nLength); pEdiMes-ReplaceSel(strTime); / 中選擇匿名的時(shí)候,m_strUserName為anonymous,m_strPassword/ 不使用匿名時(shí)為用戶(hù)輸入的用戶(hù)名和密碼if (bPassive1 =1) / 使用被動(dòng)方式pFtpConnection = pInternetSession-GetFtpConnection(m_strServerName,m_strUserName,m_strPassword, myPort,TRUE);

58、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.Get

59、Hour(), CurrentTime.GetMinute(),CurrentTime.GetSecond();strTime += 連接失敗rn;nLength = pEdiMes-SendMessage(WM_GETTE*TLENGTH); pEdiMes-SetSel(nLength, nLength); pEdiMes-ReplaceSel(strTime); return 0; CurrentTime=CTime:GetCurrentTime(); strTime.Format(%d/%d/%d %d:%d:%d ,CurrentTime.GetYear(),CurrentTime.

60、GetMonth(),CurrentTime.GetDay(),CurrentTime.GetHour(), CurrentTime.GetMinute(), CurrentTime.GetSecond(); strTime += 成功連接FTP效勞器 + m_strServerName + rn 當(dāng)前目錄為: + m_strFullPath + rn;nLength = pEdiMes-SendMessage(WM_GETTE*TLENGTH); pEdiMes-SetSel(nLength, nLength); pEdiMes-ReplaceSel(strTime); flag = 2;

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論