




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、里 t:)右g辰空女罟计算机网络课程设计课题名称FTP客户机搭建学院信息工程学院专业网络工程班级学号姓名目录和索引一、需求分析1、功能需求2、开发环境与工具3、所需要知识二、知识理解1、FTP实现的基本原理(1)(2)(3)(4)概要上传和下载用户 FTP 和匿名 FTP ASCII 和 Binary(5)Port 和 Passive三、完成进度1 、已完成部分2、未完成部分3、还需改善的部分四、FTP服务工作过程五、详细设计1、CFtpDlg 类的一些函数定义2、CFtpOperate 的一些函数定义17六、测试结果29七、用户手册32八、实验总结32第 1 页FTP客户端程序第9页、需求分
2、析1 、功能需求(1)实现一个图形用户界面的 FTP 客户端,保证文件的安全传输和存储。2)提供登录界面,上传下载界面、帮助界面、关于界面。(3)通过输入服务器地址、 用户名和密码,可以实现远程FTP主机的登录。(4)提供本地文件和文件夹的上传功能,可对FTP主机文件进行下载和删除文件。(5)提供对本地目录的读取与返回,能正确列出文件和文件夹,在没有登录服务器 前可以作为一个简单的文件查询工具对本地文件进行查询。6)帮助页面可以对用户提供使用说明。7)关于界面包含设计者的信息。(9)要求开发出的FTP客户端符合标准 FTP协议规范,支持 ASCII传输模式和二进制数据传输模式10) FTP 的
3、两种工作模式的选择 Port 模式(主动)和 Passive 模式(被动)2、开发环境与工具(1) 使用的 IDE: 使用 VC+6.0 作为开发环境 IDE(2)使用的语言: C+(3)使用的开发包:使用 MFC和Wininet( 4)开发平台: Windows 73、所需要知识了解FTP基本实现原理使用VC+6.0IDE进行MFC程序开发的基本知识 熟悉 WinInet中属于FTP部分的操作熟悉文件或文件夹操作熟悉控件的操作,如在 List Ctrol 添加图片(浏览文件或文夹的图标)(1) 计算机网络的基本知识( 2)( 2)( 3)( 4)( 5)二、知识理解1、FTP实现的基本原理(
4、1)概要In ternet 是一个非常复杂的计算机环境,In ternet上的计算机已有上千万台,而这些计算机可能运行不同的操作系统,有运行Unix的服务器,也有运行Dos、Windows的PC机等等,而各种操作系统之间的文件交流问题,需要建立一个统一的文件传输协议,这就是所谓的FTP。基于不同的操作系统有不同的FTP应用程序,而所有这些应用程序都遵守同一种协议,这样用户就可以把自己的文件传送给别人,或者从其它的用户环境中获得文件。FTP也是一个客户机/服务器系统。用户通过一个支持FTP协议的客户机程序,连接到在远程主机上的FTP服务器程序。用户通过客户机程序向服务器程序发出命令,服务器程序执
5、行用户所发出的命令, 并将执行的结果返回到客户机。使用FTP时必须首先登录,在远程(2)上传和下载"下载”文件就是从远程主机拷贝文件至自己的计算机上; "上传"文件就是将文件从自己的计算机中拷贝至远程主机上(3)用户用户主机上获得相应的权限以后,方可下载或上传文件。FTP和匿名FTPFTP:种方式为已在FTP服务器上建立了特定帐号的用户使用,需要合法的 用户名和密码才能登录到远程计算机传输文件。匿名FTP:用户作为“anonymous登录到FTP服务器,不需要有自己的用户名和 密码。(4)ASCII 和 BinaryASCII:文本传输器使用 ASCII字符,并由
6、回车键和换行符分开Bin ary:二进制不用转换或格式化就可传字符,二进制模式比文本模式更快,并且可以传输所有ASCII值,所以系统管理员一般将FTP设置成二进制模式。POrt 和 PassivePort模式(主动):FTP客户端首先和FTP服务器的TCP 21端口建立连接,通过 这个通道发送命令,客户端需要接收数据的时候在这个通道上发送PORT命令。PORT命令包含了客户端用什么端口接收数据。在传 送数据的时候,服务器端通过自己的TCP 20端口连接至客户端的指定端口发送数据。FTP server必须和客户端建立一个新的连接用来传送数据。建立连接后发送的不是Port命令,而是Pasv命令。到
7、Pasv命令后,随机打开一个高端端口(端口号大于 通知客户端在这个端口上传送数据的请求,客户端连接 器此端口,然后 FTP服务器将通过这个端口进行数据的传送,这 个时候FTP server不再需要建立一个新的和客户端之间的连接。Passive模式(被动):Passive模式在建立控制通道的时候和Standard模式类似,但FTP服务器收1024)并且 FTP服务三、完成进度1已完成部分(1)实现一个图形用户界面的FTP客户端,保证文件的安全传输和存储。2)提供登录界面,上传下载界面、帮助界面、关于界面(3)通过输入服务器地址、 用户名和密码,可以实现远程FTP主机的登录。4)6)7)提供本地文
8、件上传功能,可对 FTP 主机文件进行下载和删除文件。提供对本地目录的读取与返回,能正确列出文件和文件夹,在没有登录服务器前可以作为一个简单的文件查询工具对本地文件进行查询。 帮助页面可以对用户提供使用说明。关于界面包含设计者的信息 (帮助界面和关于界面整合在一起) 。9)支持 ASCII 传输模式和二进制数据传输模式,外加自动选择的模式(10)FTP的两种工作模式的选择Port模式(主动)和Passive模式(被动)(11)提供用户操作的状态信息输出2、未完成部分只提供了本地文件的上传功能,暂时不能提供文件夹的上传功能, 由于当初没有使用多线程对服务器端进行操作,若上传或下载的文件过 大,会
9、导致界面陷入长时间的不响应中。由于时间问题,就不再进行多 线程的扩充,也就不提供文件夹的上传功能。使用多线程进行操作 提供文件夹上传和文件夹下载功能 改进界面,提供更方便的操作 增加上传和下载的队列同时可连接多个 FTP服务器改善提示信息 账户。密码等用户资料在本地加密后保存 增加更多的功能,如下载完成后关机等 等3、还需改善的部分(1)( 2 )( 3)( 4 )( 5 )( 6 )( 7 )( 8 )( 9 )四、FTP服务工作程FTP客户机!:FTP眼务器ID计算机网络建立控制连接目录诸求窖户目录响应建立数据连接Q录列表五、详细设计(1) CFtpDIg类的一些函数定义BOOL CFt
10、pDlg:O nini tDialog()CDialog:O nIni tDialog();/ Add "About." menu item to system menu./ IDM_ABOUTBOX must be in the system comma nd ran ge.ASSERT(IDM_ABOUTBOX & OxFFFO) = IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX < 0xF000);CMe nu* pSysMe nu = GetSystemMe nu(FALSE);if (p SysMe nu != NULL)CSt
11、ri ng strAboutMe nu;strAboutMe nu丄oadStri ng(IDS_ABOUTBOX); if (!strAboutMe nu.lsE mp ty()P SysMe nu->A ppen dMe nu(MF_SE PARATOR);p SysMe nu->A ppen dMe nu(MF_STRING, IDM_ABOUTBOX, strAboutMe nu);SetIcon(m_hIcon, TRUE);SetIcon(m_hIcon, FALSE);m_ctrBinary.SetCheck(1);m_ctrActive.SetCheck(1); m
12、_editPort.SetWindowText("21");bBinary1 = 1; /使用二进制bPassive1 = 0; /使用主动myPort = 21;m_imgList.Create(20,20,ILC_COLOR32,0,0); / m_imgList.SetBkColor(RGB(255,255,255); /创建图像列表文件夹图标hIconFold = :LoadIcon(AfxGetResourceHandle(),MAKEINTRESOURCE(IDI_FOLDER);/ 文件图标hIconFile = :LoadIcon(AfxGetResourc
13、eHandle(),MAKEINTRESOURCE(IDI_FILE);m_imgList.Add(hIconFold);m_imgList.Add(hIconFile);m_ctrlLocalFile.SetImageList(&m_imgList,LVSIL_SMALL); /关联m_ctrlServerFile.SetImageList(&m_imgList,LVSIL_SMALL); /关联m_editServer.SetWindowText("ftp:/ "); m_editName.SetWindowText(""); m_e
14、ditPassword.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_
15、LEFT,140,0);/ 设置列m_ctrlLocalFile.InsertColumn(1,"m_ctrlLocalFile.InsertColumn(2,"m_ctrlServerFile.InsertColumn(0,"文件类型 ",LVCFMT_LEFT,100,1);修改日期 ",LVCFMT_LEFT,100,2);文件名 ",LVCFMT_LEFT,140,0);/ 设置列m_ctrlServerFile.InsertColumn(1,"文件类型 ",LVCFMT_LEFT,100,1);m_ctr
16、lServerFile.InsertColumn(2,"修改日期 ",LVCFMT_LEFT,100,2);/ 添加硬盘盘符size_t szAllDriveStrings=:GetLogicalDriveStrings(0,NULL);TCHAR *pDriveStrings=new TCHARszAllDriveStrings+sizeof(_T(" ");GetLogicalDriveStrings(szAllDriveStrings,pDriveStrings);size_t szDriveString=:strlen(pDriveStrings
17、); while(szDriveString>0)m_ctrlLocal.AddString(pDriveStrings);pDriveStrings+=szDriveString+1; szDriveString=:strlen(pDriveStrings); int index = m_ctrlLocal.FindString(0,"c:"); m_ctrlLocal.SetCurSel(index);m_strLocPath = "c:" /初始化为 c 盘ListLocFile();cFtpOpr.setEidt(&m_ediMes
18、sage);return TRUE; / return TRUE unless you set the focus to a controlvoid CFtpDlg:OnSysCommand(UINT nID, LPARAM lParam) if (nID & 0xFFF0) = IDM_ABOUTBOX)CAboutDlg dlgAbout; dlgAbout.DoModal(); elseCDialog:OnSysCommand(nID, lParam); void CFtpDlg:OnPaint()if (IsIconic()CPaintDC dc(this); / device
19、 context for paintingSendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect;GetClientRect(&rect);int x = (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2; dc.DrawIcon(x, y,
20、 m_hIcon); else第 19 页 CDialog:OnPaint();HCURSOR CFtpDlg:OnQueryDragIcon()return (HCURSOR) m_hIcon;/ 连接服务器void CFtpDlg:OnBtnConnect()/ TODO: Add your control notification handler code herem_editServer.GetWindowText(m_strServer); /记录FTP服务器地址CString strtemp; m_editPort.GetWindowText(strtemp);myPort = :
21、atoi(strtemp); /获得设置的端口号int i;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 /使用匿名CString strNameTemp;m_editName.GetWindowText(strNameTemp); / 匿名登陆的用户名i = cFtpO
22、pr.set(m_strServer,strNameTemp,"");if (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_ctrlSe
23、rver.SetCurSel(0);m_chkAnony.EnableWindow(FALSE); m_ctrActive.EnableWindow(FALSE);CButton *temp2 =(CButton*)GetDlgItem(IDC_PASSIVE); temp2->EnableWindow(FALSE); m_editPort.EnableWindow(FALSE); else / 连接失败void CFtpDlg:OnBtnClose()/关闭连接if (cFtpOpr.CloseConnection()/关闭成功 m_btnClo.EnableWindow(FALSE)
24、; 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);/void CFtpDlg:OnDblclkListLocalf
25、ile(NMHDR* pNMHDR, LRESULT* pResult)双击本地文件列表控件中的选项/ TODO: Add your control notification handler code herePOSITION p=m_ctrlLocalFile.GetFirstSelectedItemPosition(); if (p = NULL)return;/ 获取刚选取的位置的下标 (从 0开始的 )int index = m_ctrlLocalFile.GetNextSelectedItem(p);/ 获得选中的内容/ 得到第 index 行.第 0列的内容 (下标从 0开始 )C
26、String FirstColumn=m_ctrlLocalFile.GetItemText(index,0);CString SecondColumn = m_ctrlLocalFile.GetItemText(index,1);返回上层目录if (index = 0) /int k = m_strLocPath.GetLength() - 1;if (m_strLocPath.Right(2) = ":") return;/ 删除当层的项目int ix = m_ctrlLocal.FindString(0,m_strLocPath); if (ix != CB_ERR)
27、 m_ctrlLocal.DeleteString(ix);for (int j = k -1; j >= 2;-j)if (m_strLocPath.GetAt(j) = '')m_strLocPath = m_strLocPath.Left(j+1); break; ListLocFile();*pResult = 0; return;if (SecondColumn=" 文件夹 ")CString strTemp = FirstColumn; m_strLocPath += strTemp + ''ListLocFile(); /
28、 更新本地磁盘文件显示else if (SecondColumn=" 文件 ")/ 点到的是文件,进行上传if (cFtpOpr.ReStatus()=2)cFtpOpr.PutFtpFile(m_strLocPath + FirstColumn,FirstColumn);更新服务器的文件显示UpdateServerFile();/ *pResult = 0;void CFtpDlg:OnDblclkListServerfile(NMHDR* pNMHDR, LRESULT* pResult)/ TODO: Add your control notification han
29、dler code here/ 获取选中的的一个位置POSITION p=m_ctrlServerFile.GetFirstSelectedItemPosition();if (p = NULL)return;/ 获取刚选取的位置的下标 (从 0开始的 )int index = m_ctrlServerFile.GetNextSelectedItem(p);/ 获得选中的内容,得到第 index 行. 第 0 列的内容 (下标从 0 开始 ) CString FirstColumn=m_ctrlServerFile.GetItemText(index,0);CString SecondColu
30、mn = m_ctrlServerFile.GetItemText(index,1); CStringArray ServName;int nFileNumber=0;返回上层目录if (index = 0) /if (cFtpOpr.setBackPath() = 0)*pResult = 0; return;更新服务器的文件显示 UpdateServerFile();/CString temp;m_ctrlServer.ResetContent(); cFtpOpr.GetPath(temp); m_ctrlServer.AddString(LPSTR)(LPCTSTR)temp);m_c
31、trlServer.SetCurSel(0);*pResult = 0; return;if (SecondColumn=" 文件夹 ")if (cFtpOpr.setNextPath(FirstColumn) = 0)*pResult = 0; return;更新服务器的文件显示UpdateServerFile();/ CString temp;m_ctrlServer.ResetContent(); cFtpOpr.GetPath(temp);m_ctrlServer.AddString(LPSTR)(LPCTSTR)temp); m_ctrlServer.SetCur
32、Sel(0);else if (SecondColumn=" 文件 ")/ 点到的是文件,进行下载 cFtpOpr.GetFtpFile(FirstColumn,m_strLocPath); ListLocFile();*pResult = 0;/ 将本地文件列表出来void CFtpDlg:ListLocFile()m_ctrlLocalFile.DeleteAllItems();int ix = m_ctrlLocal.FindString(0,m_strLocPath);if (ix = CB_ERR)int iy = m_ctrlLocal.GetCount();m
33、_ctrlLocal.SetCurSel(m_ctrlLocal.AddString(m_strLocPath);else m_ctrlLocal.SetCurSel(m_ctrlLocal.SetCurSel(ix);int k = 0;m_ctrlLocalFile.InsertItem(0,".上层目录 ");char * lpPath = (LPSTR)(LPCTSTR)m_strLocPath;char szFind300; WIN32_FIND_DATA FindFileData; strcpy(szFind,lpPath);strcat(szFind,&quo
34、t;*.*");HANDLE hFind=:FindFirstFile(szFind,&FindFileData); while(TRUE)if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)CString str = FindFileData.cFileName; if (str != '.' && str != ".")LVITEM lvitem;lvitem.mask = LVIF_IMAGE|LVIF_TEXT; lvitem.iItem =
35、 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/LVITEM lvitem; lvitem.mask = LVIF_IMAGE|LVIF_TEXT; lvitem.iItem = k+1;lvitem.pszText = FindFileData.cFileName; lvitem.i
36、Image = 1;lvitem.iSubItem = 0; m_ctrlLocalFile.InsertItem(&lvitem); m_ctrlLocalFile.SetItemText(k+1,1,"文件文件 ");+k;if(!FindNextFile(hFind,&FindFileData)break;FindClose(hFind);/ 选择了本地文件的组合框中的不同项目void CFtpDlg:OnSelchangeComboboxexLocal() m_ctrlLocal.SetCurSel(m_ctrlLocal.GetCurSel();
37、m_ctrlLocal.GetWindowText(m_strLocPath);m_ctrlLocal.ResetContent();/ 添加硬盘盘符size_t szAllDriveStrings=:GetLogicalDriveStrings(0,NULL);TCHAR *pDriveStrings=new TCHARszAllDriveStrings+sizeof(_T(" ");GetLogicalDriveStrings(szAllDriveStrings,pDriveStrings);size_t szDriveString=:strlen(pDriveStri
38、ngs); while(szDriveString>0)m_ctrlLocal.AddString(pDriveStrings);pDriveStrings+=szDriveString+1;szDriveString=:strlen(pDriveStrings);ListLocFile();/ 点击了 ASCII 单选按钮 void CFtpDlg:OnAscii()bBinary1 = 0;/ 点击了二进制单选按钮 void CFtpDlg:OnBinary()bBinary1 = 1; /使用二进制自动/ 自动选择二进制或 ASCII 单选按钮 void CFtpDlg:OnAut
39、o() bBinary1 = 2; / 主动方式单选按钮 void CFtpDlg:OnActive() bPassive1 = 0;/ 被动方式单选按钮 void CFtpDlg:OnPassive() bPassive1 = 1; / 上传 void CFtpDlg:OnBtnup()POSITION p=m_ctrlLocalFile.GetFirstSelectedItemPosition(); if (p = NULL)return;/ 获取刚选取的位置的下标 (从 0开始的 ) int index = m_ctrlLocalFile.GetNextSelectedItem(p);/
40、 获得选中的内容/ 得到第 index 行.第 0列的内容 (下标从 0开始 )CString FirstColumn=m_ctrlLocalFile.GetItemText(index,0);CString SecondColumn = m_ctrlLocalFile.GetItemText(index,1); if (SecondColumn=" 文件夹 ")CTime CurrentTime=CTime:GetCurrentTime();CString strTime;strTime.Format("%d/%d/%d %d:%d:%d",Curre
41、ntTime.GetYear(),CurrentTime.GetMonth(),CurrentTime.GetDay(),CurrentTime.GetHour(),CurrentTime.GetMinute(),CurrentTime.GetSecond();strTime += " 暂不支持上传文件夹 !rn"int nLength = m_ediMessage.SendMessage(WM_GETTEXTLENGTH);m_ediMessage.SetSel(nLength, nLength); m_ediMessage.ReplaceSel(strTime);ret
42、urn;else if (SecondColumn=" 文件 ")/ 点到的是文件,进行上传if (cFtpOpr.ReStatus()=2)cFtpOpr.PutFtpFile(m_strLocPath + FirstColumn,FirstColumn);更新服务器的文件显示UpdateServerFile();/ 下载void CFtpDlg:OnBtndown()/ TODO: Add your control notification handler code here POSITION p=m_ctrlServerFile.GetFirstSelectedIte
43、mPosition(); if (p = NULL)return;/ 获取刚选取的位置的下标 (从 0开始的 )int index = m_ctrlServerFile.GetNextSelectedItem(p);/ 获得选中的内容/ 得到第 index 行.第 0列的内容 (下标从 0开始 )CString FirstColumn=m_ctrlServerFile.GetItemText(index,0);CString SecondColumn = m_ctrlServerFile.GetItemText(index,1);if (SecondColumn=" 文件夹 &quo
44、t;)CTime CurrentTime=CTime:GetCurrentTime();CString strTime;第 21 页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_e
45、diMessage.SendMessage(WM_GETTEXTLENGTH);m_ediMessage.SetSel(nLength, nLength);m_ediMessage.ReplaceSel(strTime);return;else if (SecondColumn=" 文件 ")/ 点到的是文件,进行下载if (cFtpOpr.ReStatus()=2)/ 点到的是文件,进行下载cFtpOpr.GetFtpFile(FirstColumn,m_strLocPath);ListLocFile(); / 下载完成后更新本地文件显示 / 删除服务器文件或文件夹voi
46、d CFtpDlg:OnBtndel()POSITION p=m_ctrlServerFile.GetFirstSelectedItemPosition();if (p = NULL)return;/ 获取刚选取的位置的下标 (从 0开始的 )int index = m_ctrlServerFile.GetNextSelectedItem(p);/ 获得选中的内容/ 得到第 index 行.第 0列的内容 (下标从 0开始 )CString FirstColumn=m_ctrlServerFile.GetItemText(index,0);CString SecondColumn = m_ct
47、rlServerFile.GetItemText(index,1); if (SecondColumn=" 文件夹 ")if (cFtpOpr.ReStatus()=2)/ 移除文件夹 cFtpOpr.DeleteFTPf(FirstColumn,0);第 # 页UpdateServerFile();/更新服务器的文件显示第 23 页return;else if (SecondColumn=" 文件 ")if (cFtpOpr.ReStatus()=2)/ 移除文件 cFtpOpr.DeleteFTPf(FirstColumn,1);UpdateServ
48、erFile();/更新服务器的文件显示void CFtpDlg:UpdateServerFile()/ 更新服务器的文件显示/ 获得目录CStringArray localName; int nFileNumber=0; nFileNumber=cFtpOpr.GetMultipleFileName(&localName); m_ctrlServerFile.DeleteAllItems(); m_ctrlServerFile.InsertItem(0,".for(int test=0;test<nFileNumber;test+)CString stTemp = l
49、ocalName.GetAt(test);if (stTemp.Right(5) = "<DIR>")/ 文件夹LVITEM lvitem;CString str = 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(
50、&lvitem); m_ctrlServerFile.SetItemText(test+1,1," else / 文件LVITEM lvitem;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_ctrl
51、ServerFile.SetItemText(test+1,1,"void CFtpDlg:OnBtnhelp()CAboutDlg dlg; dlg.DoModal();用于屏蔽按下回车键程序退出的问题 / BOOL CFtpDlg:PreTranslateMessage(MSG* pMsg) if( pMsg->message =WM_KEYDOWN && pMsg->wParam=VK_RETURN ) return true;return CDialog:PreTranslateMessage(pMsg);第 25 页/void CFtpDlg:O
52、nChkanonymous()if (m_chkAnony.GetCheck()/ 被选上bAnony = 1; / 使用匿名m_editName.GetWindowText(m_strName);于不使用匿名后恢复复选框,是否匿名/记录FTP登陆用户名,用记录FTP登陆用户密码,恢复恢复m_editPassword.GetWindowText(m_strPassword); / 用于不使用匿名后恢复m_editName.SetWindowText("anonymous"); m_editPassword.SetWindowText(""); m_edi
53、tName.EnableWindow(FALSE); m_editPassword.EnableWindow(FALSE); elsebAnony = 0; / 不使用匿名m_editName.SetWindowText(m_strName); / m_editPassword.SetWindowText(m_strPassword); /m_editName.EnableWindow(TRUE);m_editPassword.EnableWindow(TRUE);( 2) CFtpOperate 的一些函数定义/ 构造函数CFtpOperate:CFtpOperate()strAppName
54、.LoadString(AFX_IDS_APP_TITLE); /获得应用程序的名字pInternetSession = newCInternetSession(strAppName,INTERNET_OPEN_TYPE_PRECONFIG); pEdiMes = NULL;if(!pInternetSession)AfxMessageBox(" 初始化会话失败 !"); flag = -1; / 初始化失败设为 -1 return;flag =0; /初始化成功,标志初始化为 0/ 析构函数CFtpOperate:CFtpOperate()pInternetSession->Close();
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 泉州海洋职业学院《中医思维学》2023-2024学年第二学期期末试卷
- 西安海棠职业学院《工程伦理五》2023-2024学年第二学期期末试卷
- 江西洪州职业学院《RFD原理及应用》2023-2024学年第二学期期末试卷
- 2025年中医药师考试试题及答案分享
- 山东省济南市部分学校2025年高三高考全真模拟卷(三)英语试题含解析
- 2025年心理学职业发展理论考试试题及答案
- 2025年英语翻译专业技能考试试卷及答案
- 2025年物流与供应链管理考试题目及答案
- 邵东县2025年初三调研测试(二)语文试题理试题含解析
- 武汉理工大学《休闲体育产业》2023-2024学年第一学期期末试卷
- 人居与环境-诗意的栖居 课件-2024-2025学年高中美术人美版(2019)美术鉴赏
- 辽宁省鞍山市(2024年-2025年小学五年级语文)部编版阶段练习(下学期)试卷及答案
- 酒店工作安全培训(共60张课件)
- 初中七年级主题班会:团结合作团结就是力量(课件)
- 历史人物范仲淹介绍
- 四年级下册数学方程题100道及答案
- 2024年中证金融研究院事业单位招聘23人历年高频难、易错点500题模拟试题附带答案详解
- 2024挂轨式巡检机器人
- CJJT 182-2014 城镇供水与污水处理化验室技术规范
- 排水暗渠施工方案
- 小升初奥数竞赛题100例附答案(完整版)
评论
0/150
提交评论