网络课程设计-简单FTP客户端_第1页
网络课程设计-简单FTP客户端_第2页
网络课程设计-简单FTP客户端_第3页
网络课程设计-简单FTP客户端_第4页
网络课程设计-简单FTP客户端_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、计算机网络课程设计FTP 客户端软件学 院: 专 业: 班 级:学 号:学生姓名: 指导教师: 2011年 12月 29日FTP 客户端软件摘要31、需求分析61.1任务概述61.2功能需求61.3运行需求62、概要设计62.1总体设计62.2数据结构设计62.3运行设计72.4出错处理设计72.5出错处理对策:73程序描述(详细设计)83. 1功能描述83.2CChatClientDlg类(对话框主类)84、程序实现114.1运行界面及其效果图114.2运行说明125、测试计划125.1测试用例12目的:12步骤及操作:136、总结报告136.1技术方案评价136.2软件质量评价136.3课

2、程设计过程中软件开发时间分配评价136.4经验与教训146.5总结与体会147、程序附录158参考文献(资料)159.程序代码15摘要FTP 文件传输协议,提供的是文件传输服务,C/S的方式进行网络访问,端口号一般为21。支持密名访问的FTP都包含一个Anonymous用户,使用Anonymous登陆后无需输入即可登录。FTP是Internet上最早也是最广的应用,直到今天它仍是最重要和最基本的应用之一。用FTP将信息下载到本地是一件十分普遍的事。也随之出现了许多下载软件。尽管远程登录提供了访问远程文它COPY到自己件的极好方法,但怎么也比不上使用自己计算机中的文件方便。假如用户想使用其它计算

3、机上的文件,最理想的方法就是把的计算机中,以便在本地计算机上操作。FTP正是完成这项工作的工具,你可以在任意一个经过文件传输协议访问的公共有效的联机数据库或文档中找到你想要的任何东西。全世界现在已有1000多个FTP文件服务器对所有INTERNET用户开使用,用户可以通过与Internet相连到远程计算机,把自己需要的文件传输过来或是把自己的收集传输上去与他人共享。传统的数据库应用系统采用的是客户机/服务器模式,有高度的交互性,高效的用户界面等优点。1971年,第一个FTP的RFC由A.K.Bhushan在1971年提出,同时由MIT与Harvard实验实现;1972年,RFC172提供了主机

4、间文件传输的一个用户级协议;1973年2月,在长期讨论后,出现了文档RFC454;1973年8月,出现了一个修订后的新官方文档RFC542,确立了FTP的功能、目标和基本模型。当时数据传输协议采用NCP;1980年,由于底层协议从NCP改变为TCP,RFC765定义了采用TCP的FTP;1985年,一个作用持续至今的官方文档RFC959出台。用FTP传输文件,本来用户事先应在远方系统注册,但后来为了便于大家获取资源,FTP在互联网上有一种非凡的也是非常广泛的应用是匿名FTP。通过Internet,任何用户可以使用FTP和一个公用账号去获得一些公用资源。在Internet上目前有许许多多的这种公

5、用计算机,我们把这种用来做匿名FTP服务的计算机称作FTP服务器,对每一个联入Internet的用户,只要知道这些FTP服务器的地址,就可以与它们连接并获取上面各种资源。由于FTP操作简单实用,开放性强,且能充分利用Internet来进行信息传递与交流,所以目前越来越多的FTP服务器连入Internet,这样越来越多的资源就可以通过匿名FTP来获得。进一步熟悉.net开发环境,把握一定开发Windows应用程序技术。对提高自己的C#语言编程能力,熟悉ftp工作过程。制作一个界面友好,快速,稳定的下在软件。对信息的快速共享起着一定的作用。让用户能第一时间和别人共同分享信息资源。并希望能给FTP客

6、户端编写初学者一些帮助。 随着计算机网络的普及和Internet的迅速发展,越来越多的程序具备了网上与其它程序通信的能力。无论是在局域网还是广域网,软件的通信都采取同样的原则。首先,一台计算机中某个程序等带领一个程序的连接请求,这个应用程序正在“监听”种种连接请求,就像你在等待某人来电话时守在电话机旁一样。同时,另一个应用程序试图与第一个程序连接。这种打开连接的做法与你打电话类似。就像在打电话时你必须知道对方的电话号码一样,应用程序要建立连接也必须知道对方网络地址。但是你的电脑程序从逻辑上不可能只用这一个地址来完成成千上万个程序的通信,所以除了网络地址(ip)端口孕育而生。每一个端口

7、从逻辑上就解决了对每一个程序使用网络接口通信的问题。套接子,就等于是把端口,ip等网络接口这功能和在一起的一个网络编程接口。通过他从逻辑的角度简化了通讯的接口。这样套接口通过下面的方法工作,事实上我的程序也是类似这么做的。服务器端服务器套接口群客户端套接口客户端套接口客户端套接口客户端套接口客户端客户端客户端客户端这样,我们只要了解学习套接口的原理和类方法,就可轻松实现程序网络互联通信。因为程序的核心就是要依靠MFC封装类来实现。使用类CInternetSession 创建并初始化一个或多个同时的Internet 会话。如果需要,还可描述与代理服务器的连接。如果Internet连接必须在应用过

8、程中保持着,可创建一个类CWinApp的CInternetSession成员。一旦已建立起Internet 会话,就可调用OpenURL。CInternetSession会通过调用全局函数AfxParseURL来为分析映射URL。无论协议类型如何,CInternetSession 解释URL并管理它。它可处理由URL资源“file:/”标志的本地文件的请求。如果传给它的名字是本地文件,OpenURL 将返回一个指向CStdioFile对象的指针。如果使用OpenURL在Internet服务器上打开一个URL,你可从此处读取信息。如果要执行定位在服务器上的指定的服务(例如,HTTP,FTP或Go

9、pher)行为,必须与此服务器建立适当的连接。直接打开与指定的服务器的指定的类型的连接,请使用成员函数:·GetFtpConnectionMFC类FtpConnection管理与Internet服务器的FTP连接并允许直接操纵服务器中的目录和文件。FTP是由MFC WinInet类识别的三种Internet服务器之一。为了与FTP Internet服务器通讯,必须先创建一个CInternetSession实例,然后创建CFtpConnection对象。创建CFtpConnection对象不采用直接方式,而是调用CInternetSession:GetFtpConnertion来创建并

10、返回一个指向它的指针。#include <afxinet.h>主要功能1、支持多个客户段在同时连接,在服务器和多个客户段之间进行数据传输;2、接受客户端发送信息显示在一个列表框内;3、在用户进入和离开时,发布适当的问候和欢迎信息;4、将接受的某一客户段的信息发给所有其他客户端程序,实现聊天室信息同步;5、当服务器停止服务,向每个连接客户端发送服务终止通告。开发环境操作系统:Windows 7 X64开发工具:Visual C+网络环境:互联网,局域网,本机自联均可1、需求分析1.1任务概述目标:实现FTP客户端能够下载上传运行环境:使用MFC开发1.2功能需求1.提供网络地址及端口

11、号输入,以便能够连接到非21号端口的FTP服务器2.提供上传功能3.提供下载功能4.提供删除功能1.3运行需求用户界面需要人性化外。硬件接口、软件接口、故障处理均并没有的要求2、概要设计2.1总体设计基于MFC,界面设计使更好的控制机使用本软件,基于CInternetSession类创建实例用于FTP通信,创建CFtpConnection对象实现FTP协议的各个功能模块,通过客户端能访问服务器上的文件,实现FTP的简单功能2.2数据结构设计逻辑结构:主要依靠CSocket完成网络部分,所以所有逻辑结构都是基于CSokcet的。通过更高层的封装类来实现FTP的通信物理结构设计:没有物理层面上的设

12、计数据结构与程序的关系:2.3运行设计在运行的时候它们彼此联系紧密,耦合性很大,所以倒不如说是一个整体。但是出于想让软件的介绍更加明确,我们还是把它分成几个模块。查询模块,删除模块,上传模块,下载模块,新建文件夹模块2.4出错处理设计出错输出信息:(客户端):1.连接失败信息2.ip错误信息3.端口错误信息4.删除文件失败5.下载失败6.上传失败2.5出错处理对策:如果连接不到服务器,程序会提示无法连接,同样其他出错信息均会弹出错误提示对话框,使用户了解自己的操作是否存在问题3程序描述(详细设计)3. 1功能描述主要实现FTP的基本操作:上传,下载,删除,登陆服务器,新建文件夹3.2CChat

13、ClientDlg类(对话框主类)/ FtpDlg.h : header file/#include "afxwin.h"#if !defined(AFX_FTPDLG_H_5786A2AC_3D7B_11D4_8C39_0000E839EC5E_INCLUDED_)#define AFX_FTPDLG_H_5786A2AC_3D7B_11D4_8C39_0000E839EC5E_INCLUDED_#if _MSC_VER > 1000#pragma once#endif / _MSC_VER > 1000/ CFtpDlg dialogclass CFtpDl

14、g : public CDialog/ Constructionpublic:CFtpDlg(CWnd* pParent = NULL);/ standard constructor/ Dialog Data/AFX_DATA(CFtpDlg)enum IDD = IDD_FTPFILE_DIALOG ;CButtonm_BtnQuery;CButtonm_BtnUpLoad;CStaticm_StaPwd;CStaticm_StaName;CStaticm_StaFtp;CEditm_EditPwd;CEditm_EditName;CEditm_EditFtp;CButtonm_BtnDow

15、nLoad;CListBoxm_ListFile;CStringm_strFtpSite;CStringm_strName;CStringm_strPwd;/AFX_DATA/ ClassWizard generated virtual function overrides/AFX_VIRTUAL(CFtpDlg)protected:virtual void DoDataExchange(CDataExchange* pDX);/ DDX/DDV support/AFX_VIRTUAL/ Implementationprotected:HICON m_hIcon;/ Generated mes

16、sage map functions/AFX_MSG(CFtpDlg)virtual BOOL OnInitDialog();afx_msg void OnSysCommand(UINT nID, LPARAM lParam);afx_msg void OnPaint();afx_msg HCURSOR OnQueryDragIcon();afx_msg void OnQuery();afx_msg void OnSelchangeListFile();afx_msg void OnDownload();afx_msg void OnUpload();afx_msg void OnRButto

17、nDown(UINT nFlags, CPoint point);/AFX_MSGDECLARE_MESSAGE_MAP()private:BOOL PutFile(CString strSourceName,CString strDestName);BOOL GetFile(CString strSourceName,CString strDestName);void ListContent();public:afx_msg void OnBnClickedCancel();afx_msg void OnLButtonDown(UINT nFlags, CPoint point);CEdit

18、 m_Port;/CString strPort;int Port;afx_msg void OnBnClickedLogin();CButton m_Login;afx_msg void OnBnClickedAdd();afx_msg void OnBnClickedDelete();BOOL NewFile(CString file);BOOL DeleteFile(CString file);afx_msg void OnLbnDblclkListFile();BOOL EnterFile(CString file);BOOL OpenFtpFile(CString file);CBu

19、tton m_NewDir;CButton m_Delete;CString str;/AFX_INSERT_LOCATION/ Microsoft Visual C+ will insert additional declarations immediately before the previous line.#endif / !defined(AFX_FTPDLG_H_5786A2AC_3D7B_11D4_8C39_0000E839EC5E_INCLUDED_)4、程序实现4.1运行界面及其效果图4.2运行说明需要先运行服务器端的“开始服务”,软件才能正常工作。可以运行于任何Window

20、s版本操作系统5、测试计划5.1测试用例目的:测试软件是否正常运行步骤及操作:1.启动软件2.输入IP地址及端口号,回车3.没有提示出错表示连接服务器成功4.需要在服务器上新建目录的,可以点击“新建目录”,输入目录名即可5.我们不需要服务器上的资源时,可以选择资源,点击删除6.点击“上传”,可以把本地资源上传到FTP服务器7.点击“下载”,可以把FTP服务器上的资源下载到本地6、总结报告6.1技术方案评价以MFC作为基本软件框架,调用MFC提供的类库进行快速编程,可以提高编程速度和进度很好控制,可以说这个是一个不错的方案。在对FTP编程完全不了解的前提下,通过学习和实践,把软件做出来并完成了任

21、务,从这一点上,评奖应该很高的。6.2软件质量评价从自己的角度,作为研究之用的软件,用不着把很多细节实现的尽善尽美,主要的之用是看自己有没有在这个过程中学习到知识,对Bug的修补并不能做到尽善尽美。但是还是或多或少的做了一些修改,使得软件用起来不会出现崩溃的情况。6.3课程设计过程中软件开发时间分配评价前一周基本上是在完善软件的功能及错误排查这个周基本上是在做设计报告6.4经验与教训软件初期都是慢慢接触没接触过的东西,以后熟悉了,也就可以代码复用了,对于没有接触的领域,应该在思想上弄明白,在着手去做。就是说在做某个东西之前要知道这个东西的整体结构,如果上来就忙于制作,而不把制作的内容弄明白很容

22、易造成返工的情况。明白她的调用原理。还有机制。和重载的意义。之后的几天里才高速的完成了编码。其实逻辑上很是简单。但我却编辑了那么长的时间。6.5总结与体会个人觉得,软件行业很有挑战性,也很富创造性,让我自己有发挥的余地,其实总的体会就是觉得软件这个行当,以后的工作可能就是不断地接触新的事物,我要编程的东西,肯定我自己还不是很了解他。当编程完了以后,才能真正地对她有了初步的认识。所以说在这个行当,就是要多编程,才能有长进。但是还是觉得编的时候,进度缓慢,力不从心。或者说满脑子想法,但就是实现不了。经过各方面查阅资料,一步一步的完善软件,软件测试部分还是测试出很多错误来的。但是都打了很多的补丁,在

23、今天,写报告的时候已经没什么错误了。希望能把这次经验带到下礼拜的新的课程设计上去。7、程序附录8参考文献(资料)1.Visual C+ 2010 开发权威指南2.C+从入门到实践3.网络程序设计与开发9.程序代码#pragma once/ CNameDlg 对话框class CNameDlg : public CDialogExDECLARE_DYNAMIC(CNameDlg)public:CNameDlg(CWnd* pParent = NULL); virtual CNameDlg();CString strName;enum IDD = IDD_DIALOG1 ;protected:vi

24、rtual void DoDataExchange(CDataExchange* pDX); DECLARE_MESSAGE_MAP()public:afx_msg void OnBnClickedOk();/ NameDlg.cpp : 实现文件/#include "stdafx.h"#include "FtpFile.h"#include "NameDlg.h"#include "afxdialogex.h"/ CNameDlg 对话框¨IMPLEMENT_DYNAMIC(CNameDlg, CDia

25、logEx)CNameDlg:CNameDlg(CWnd* pParent /*=NULL*/): CDialogEx(CNameDlg:IDD, pParent)CNameDlg:CNameDlg()void CNameDlg:DoDataExchange(CDataExchange* pDX)CDialogEx:DoDataExchange(pDX);BEGIN_MESSAGE_MAP(CNameDlg, CDialogEx)ON_BN_CLICKED(IDOK, &CNameDlg:OnBnClickedOk)END_MESSAGE_MAP()/ CNameDlg 消息处理程序v

26、oid CNameDlg:OnBnClickedOk()/ TODO: 在此添加控件通知处理程序代码?this->GetDlgItemTextA(IDC_EDIT_NAME,strName);CDialogEx:OnOK();/ FtpDlg.h : header file/#include "afxwin.h"#if !defined(AFX_FTPDLG_H_5786A2AC_3D7B_11D4_8C39_0000E839EC5E_INCLUDED_)#define AFX_FTPDLG_H_5786A2AC_3D7B_11D4_8C39_0000E839EC5E

27、_INCLUDED_#if _MSC_VER > 1000#pragma once#endif / _MSC_VER > 1000/ CFtpDlg dialogclass CFtpDlg : public CDialog/ Constructionpublic:CFtpDlg(CWnd* pParent = NULL);/ standard constructor/ Dialog Data/AFX_DATA(CFtpDlg)enum IDD = IDD_FTPFILE_DIALOG ;CButtonm_BtnQuery;CButtonm_BtnUpLoad;CStaticm_St

28、aPwd;CStaticm_StaName;CStaticm_StaFtp;CEditm_EditPwd;CEditm_EditName;CEditm_EditFtp;CButtonm_BtnDownLoad;CListBoxm_ListFile;CStringm_strFtpSite;CStringm_strName;CStringm_strPwd;/AFX_DATA/ ClassWizard generated virtual function overrides/AFX_VIRTUAL(CFtpDlg)protected:virtual void DoDataExchange(CData

29、Exchange* pDX);/ DDX/DDV support/AFX_VIRTUAL/ Implementationprotected:HICON m_hIcon;/ Generated message map functions/AFX_MSG(CFtpDlg)virtual BOOL OnInitDialog();afx_msg void OnSysCommand(UINT nID, LPARAM lParam);afx_msg void OnPaint();afx_msg HCURSOR OnQueryDragIcon();afx_msg void OnQuery();afx_msg

30、 void OnSelchangeListFile();afx_msg void OnDownload();afx_msg void OnUpload();afx_msg void OnRButtonDown(UINT nFlags, CPoint point);/AFX_MSGDECLARE_MESSAGE_MAP()private:BOOL PutFile(CString strSourceName,CString strDestName);BOOL GetFile(CString strSourceName,CString strDestName);void ListContent();

31、public:afx_msg void OnBnClickedCancel();afx_msg void OnLButtonDown(UINT nFlags, CPoint point);CEdit m_Port;/CString strPort;int Port;afx_msg void OnBnClickedLogin();CButton m_Login;afx_msg void OnBnClickedAdd();afx_msg void OnBnClickedDelete();BOOL NewFile(CString file);BOOL DeleteFile(CString file)

32、;afx_msg void OnLbnDblclkListFile();BOOL EnterFile(CString file);BOOL OpenFtpFile(CString file);CButton m_NewDir;CButton m_Delete;CString str;/AFX_INSERT_LOCATION/ Microsoft Visual C+ will insert additional declarations immediately before the previous line.#endif / !defined(AFX_FTPDLG_H_5786A2AC_3D7

33、B_11D4_8C39_0000E839EC5E_INCLUDED_)/ FtpDlg.cpp : implementation file/#include "stdafx.h"#include "afxinet.h"#include "FtpFile.h"#include "FtpDlg.h"#include "NameDlg.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#

34、endif/ CAboutDlg dialog used for App Aboutclass CAboutDlg : public CDialogpublic:CAboutDlg();/ Dialog Data/AFX_DATA(CAboutDlg)enum IDD = IDD_ABOUTBOX ;/AFX_DATA/ ClassWizard generated virtual function overrides/AFX_VIRTUAL(CAboutDlg)protected:virtual void DoDataExchange(CDataExchange* pDX); / DDX/DD

35、V support/AFX_VIRTUAL/ Implementationprotected:/AFX_MSG(CAboutDlg)/AFX_MSGDECLARE_MESSAGE_MAP();CAboutDlg:CAboutDlg() : CDialog(CAboutDlg:IDD)/AFX_DATA_INIT(CAboutDlg)/AFX_DATA_INITvoid CAboutDlg:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(CAboutDlg)/AFX_DATA_MAPBEGIN

36、_MESSAGE_MAP(CAboutDlg, CDialog)/AFX_MSG_MAP(CAboutDlg)/ No message handlers/AFX_MSG_MAPEND_MESSAGE_MAP()/ CFtpDlg dialogCFtpDlg:CFtpDlg(CWnd* pParent /*=NULL*/): CDialog(CFtpDlg:IDD, pParent), Port(0), str(_T("")/AFX_DATA_INIT(CFtpDlg)m_strFtpSite = _T("");m_strName = _T("&

37、quot;);m_strPwd = _T("");/AFX_DATA_INIT/ Note that LoadIcon does not require a subsequent DestroyIcon in Win32m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);void CFtpDlg:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(CFtpDlg)DDX_Control(pDX, IDOK, m_BtnQuery

38、);DDX_Control(pDX, IDC_UPLOAD, m_BtnUpLoad);DDX_Control(pDX, IDC_STATIC_PWD, m_StaPwd);DDX_Control(pDX, IDC_STATIC_NAME, m_StaName);DDX_Control(pDX, IDC_STATIC_FTP, m_StaFtp);DDX_Control(pDX, IDC_EDIT_PWD, m_EditPwd);DDX_Control(pDX, IDC_EDIT_NAME, m_EditName);DDX_Control(pDX, IDC_EDIT_FTP, m_EditFt

39、p);DDX_Control(pDX, IDC_DOWNLOAD, m_BtnDownLoad);DDX_Control(pDX, IDC_LIST_FILE, m_ListFile);DDX_Text(pDX, IDC_EDIT_FTP, m_strFtpSite);DDX_Text(pDX, IDC_EDIT_NAME, m_strName);DDX_Text(pDX, IDC_EDIT_PWD, m_strPwd);/AFX_DATA_MAPDDX_Control(pDX, IDC_EDIT_PORT, m_Port);/ DDX_Text(pDX, IDC_EDIT_PORT, str

40、Port);DDX_Text(pDX, IDC_EDIT_PORT, Port);DDX_Control(pDX, IDC_LOGIN, m_Login);DDX_Control(pDX, ID_ADD, m_NewDir);DDX_Control(pDX, ID_DELETE, m_Delete);BEGIN_MESSAGE_MAP(CFtpDlg, CDialog)/AFX_MSG_MAP(CFtpDlg)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(IDOK, OnQuery)ON_LBN_SELCHA

41、NGE(IDC_LIST_FILE, OnSelchangeListFile)ON_BN_CLICKED(IDC_DOWNLOAD, OnDownload)ON_BN_CLICKED(IDC_UPLOAD, OnUpload)ON_WM_RBUTTONDOWN()/AFX_MSG_MAPON_BN_CLICKED(IDCANCEL, &CFtpDlg:OnBnClickedCancel)ON_WM_LBUTTONDOWN()ON_BN_CLICKED(IDC_LOGIN, &CFtpDlg:OnBnClickedLogin)ON_BN_CLICKED(ID_ADD, &

42、CFtpDlg:OnBnClickedAdd)ON_BN_CLICKED(ID_DELETE, &CFtpDlg:OnBnClickedDelete)ON_LBN_DBLCLK(IDC_LIST_FILE, &CFtpDlg:OnLbnDblclkListFile)END_MESSAGE_MAP()/ CFtpDlg message handlersBOOL CFtpDlg:OnInitDialog()CDialog:OnInitDialog();/ Add "About." menu item to system menu./ IDM_ABOUTBOX m

43、ust be in the system command range.ASSERT(IDM_ABOUTBOX & 0xFFF0) = IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX < 0xF000);CMenu* pSysMenu = GetSystemMenu(FALSE);if (pSysMenu != NULL)CString strAboutMenu;strAboutMenu.LoadString(IDS_ABOUTBOX);if (!strAboutMenu.IsEmpty()pSysMenu->AppendMenu(MF_SEPARATOR

44、);pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);/ Set the icon for this dialog. The framework does this automatically/ when the application's main window is not a dialogSetIcon(m_hIcon, TRUE);/ Set big iconSetIcon(m_hIcon, FALSE);/ Set small icon/ TODO: Add extra initialization

45、herem_strFtpSite=_T("");m_strName=_T("");m_strPwd=_T("");Port=21;UpdateData(FALSE);m_Login.EnableWindow(FALSE);return TRUE; / return TRUE unless you set the focus to a controlvoid CFtpDlg:OnSysCommand(UINT nID, LPARAM lParam)if (nID & 0xFFF0) = IDM_ABOUTBOX)CAboutDl

46、g dlgAbout;dlgAbout.DoModal();elseCDialog:OnSysCommand(nID, lParam);/ If you add a minimize button to your dialog, you will need the code below/ to draw the icon. For MFC applications using the document/view model,/ this is automatically done for you by the framework.void CFtpDlg:OnPaint() if (IsIco

47、nic()CPaintDC dc(this); / device context for paintingSendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);/ Center icon in client rectangleint cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x = (rect.Width() - cxIcon + 1)

48、/ 2;int y = (rect.Height() - cyIcon + 1) / 2;/ Draw the icondc.DrawIcon(x, y, m_hIcon);elseCDialog:OnPaint();/ The system calls this to obtain the cursor to display while the user drags/ the minimized window.HCURSOR CFtpDlg:OnQueryDragIcon()return (HCURSOR) m_hIcon;void CFtpDlg:OnQuery() UpdateData(

49、TRUE);while(m_ListFile.GetCount()!=0)m_ListFile.DeleteString(0);ListContent();void CFtpDlg:ListContent()CInternetSession* pSession;CFtpConnection* pConnection;CFtpFileFind* pFileFind;CString strFileName;BOOL bContinue;pConnection=NULL;pFileFind=NULL;pSession=new CInternetSession(AfxGetAppName(),1,PR

50、E_CONFIG_INTERNET_ACCESS);trypConnection=pSession->GetFtpConnection(m_strFtpSite,m_strName,m_strPwd,Port);catch (CInternetException* e)MessageBox("连接失败,请检查网络?地址和端口号是否正确","连接出错");e->Delete();pConnection=NULL;if (pConnection!=NULL)m_EditFtp.EnableWindow(FALSE);m_Port.EnableWi

51、ndow(FALSE);m_EditName.EnableWindow(FALSE);m_EditPwd.EnableWindow(FALSE);m_NewDir.EnableWindow(TRUE);m_BtnUpLoad.EnableWindow(TRUE);pFileFind=new CFtpFileFind(pConnection);bContinue=pFileFind->FindFile("*");if (!bContinue)pFileFind->Close();pFileFind=NULL;while (bContinue)bContinue=p

52、FileFind->FindNextFile();strFileName=pFileFind->GetFileName();if (pFileFind->IsDirectory()strFileName=""+strFileName;strFileName+=""m_ListFile.AddString(strFileName);if (pFileFind!=NULL)pFileFind->Close();pFileFind=NULL;delete pFileFind;if (pConnection!=NULL)pConnection->Close();delete pConnection;delete pSession;void CFtpDlg:OnSel

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论