FTP客户端xxWord格式.docx
- 文档编号:17564571
- 上传时间:2022-12-07
- 格式:DOCX
- 页数:44
- 大小:31.04KB
FTP客户端xxWord格式.docx
《FTP客户端xxWord格式.docx》由会员分享,可在线阅读,更多相关《FTP客户端xxWord格式.docx(44页珍藏版)》请在冰豆网上搜索。
(7)要求开发出的FTP客户端符合标准FTP协议规范,支持ASCII传输模式和二进制数据传输模式
(8)FTP的两种工作模式的选择Port模式(主动)和Passive模式(被动)
(1)使用的编程工具:
VC++6.0
(2)使用的语言:
C++
(3)使用的开发包:
使用MFC和WinInet
(4)开发平台:
Windows7
(1)计算机网络的基本知识
(2)了解FTP基本实现原理
(3)使用VC++6.0IDE进行MFC程序开发的基本知识
(4)熟悉WinInet中属于FTP部分的操作
(5)熟悉文件或文件夹操作
(6)熟悉控件的操作,如在ListCtrol添加图片(浏览文件或文夹的图标)
二、知识理解
(1)概要
Internet是一个非常复杂的计算机环境,Internet上的计算机已有上千万台,而这些计算机可能运行不同的操作系统,有运行Unix的服务器,也有运行Dos、Windows的PC机等等,而各种操作系统之间的文件交流问题,需要建立一个统一的文件传输协议,这就是所谓的FTP。
基于不同的操作系统有不同的FTP应用程序,而所有这些应用程序都遵守同一种协议,这样用户就可以把自己的文件传送给别人,或者从其它的用户环境中获得文件。
FTP也是一个客户端/服务器系统。
用户通过一个支持FTP协议的客户端程序,连接到在远程主机上的FTP服务器程序。
用户通过客户端程序向服务器程序发出命令,服务器程序执行用户所发出的命令,并将执行的结果返回到客户端。
使用FTP时必须首先登录,在远程主机上获得相应的权限以后,方可下载或上传文件。
"
下载"
文件就是从远程主机拷贝文件至自己的计算机上;
上传"
文件就是将文件从自己的计算机中拷贝至远程主机上
用户FTP:
种方式为已在FTP服务器上建立了特定帐号的用户使用,需要合法的用户名和密码才能登录到远程计算机传输文件。
匿名FTP:
用户作为“anonymous”登录到FTP服务器,不需要有自己的用户名和密码。
ASCII:
文本传输器使用ASCII字符,并由回车键和换行符分开
Binary:
二进制不用转换或格式化就可传字符,二进制模式比文本模式更快,并且可以传输所有ASCII值,所以系统管理员一般将FTP设置成二进制模式。
Port模式(主动):
FTP客户端首先和FTP服务器的TCP21端口建立连接,通过这个通道发送命令,客户端需要接收数据的时候在这个通道上发送PORT命令。
PORT命令包含了客户端用什么端口接收数据。
在传送数据的时候,服务器端通过自己的TCP20端口连接至客户端的指定端口发送数据。
FTPserver必须和客户端建立一个新的连接用来传送数据。
Passive模式(被动):
Passive模式在建立控制通道的时候和Standard模式类似,但建立连接后发送的不是Port命令,而是Pasv命令。
FTP服务器收到Pasv命令后,随机打开一个高端端口(端口号大于1024)并且通知客户端在这个端口上传送数据的请求,客户端连接FTP服务器此端口,然后FTP服务器将通过这个端口进行数据的传送,这个时候FTPserver不再需要建立一个新的和客户端之间的连接。
(1)头文件:
#include<
afxinet.h>
(2)打开连接和关闭:
必须先创建一个CInternetSession实例,然后创建CFtpConnection对象。
创建CFtpConnection对象不采用直接方式,而是调用CInternetSession:
:
GetFtpConnertion来创建并返回一个指向它的指针。
<
示例>
CInternetSession*pInternetSession;
CFtpConnection*pFtpConnection;
pInternetSession=newCInternetSession(………);
pFtpConnection=pInternetSession->
GetFtpConnection(………);
//使用结束后需要关闭
pFtpConnection->
Close();
if(pFtpConnection!
=NULL)
{
deletepFtpConnection;
}
pInternetSession->
if(pInternetSession!
{
deletepInternetSession;
}
SetCurrentDirectory
设置当前FTP目录
GetCurrentDirectory
获取此次连接的当前目录
GetCurrentDirectoryAsURL
获取作为URL的此次连接的当前目录
RemoveDirectory
从服务器移去指定目录
CreateDirectory
在服务器上构造一个目录
Rename
将服务器上的文件改名
Remove
从服务器上移去一个文件
PutFile
将一个文件放到服务器上
GetFile
从连接的服务器上获取一个文件
OpenFile
在连接的服务器上打开一个文件
Close
关闭与服务器的连接
三、完成进度
1、已完成部分
(2)提供登录界面,上传下载界面、帮助界面、关于界面
(4)提供本地文件上传功能,可对FTP主机文件进行下载和删除文件。
(7)支持ASCII传输模式和二进制数据传输模式,外加自动选择的模式
(9)提供用户操作的状态信息输出
只提供了本地文件的上传功能,暂时不能提供文件夹的上传功能,由于当初没有使用多线程对服务器端进行操作,若上传或下载的文件过大,会导致界面陷入长时间的不响应中。
(1)使用多线程进行操作
(2)提供文件夹上传和文件夹下载功能
(3)改进界面,提供更方便的操作
(4)增加上传和下载的队列
(5)同时可连接多个FTP服务器
(6)改善提示信息
(7)账户。
密码等用户资料在本地加密后保存
(8)增加更多的功能,如下载完成后关机等
四、模块化设计
五、详细设计
(1)CFtpDlg类的一些函数定义
//初始化
BOOLCFtpDlg:
OnInitDialog()
CDialog:
OnInitDialog();
//Add"
About..."
menuitemtosystemmenu.
//IDM_ABOUTBOXmustbeinthesystemcommandrange.
ASSERT((IDM_ABOUTBOX&
0xFFF0)==IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX<
0xF000);
CMenu*pSysMenu=GetSystemMenu(FALSE);
if(pSysMenu!
{
CStringstrAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if(!
strAboutMenu.IsEmpty())
pSysMenu->
AppendMenu(MF_SEPARATOR);
AppendMenu(MF_STRING,IDM_ABOUTBOX,strAboutMenu);
}
}
//Settheiconforthisdialog.Theframeworkdoesthisautomatically
//whentheapplication'
smainwindowisnotadialog
SetIcon(m_hIcon,TRUE);
//Setbigicon
SetIcon(m_hIcon,FALSE);
//Setsmallicon
m_ctrBinary.SetCheck
(1);
m_ctrActive.SetCheck
(1);
m_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(AfxGetResourceHandle(),MAKEINTRESOURCE(IDI_FILE));
m_imgList.Add(hIconFold);
m_imgList.Add(hIconFile);
m_ctrlLocalFile.SetImageList(&
m_imgList,LVSIL_SMALL);
//关联
m_ctrlServerFile.SetImageList(&
m_editServer.SetWindowText("
.cn"
m_editName.SetWindowText("
ngpxbbs"
m_editPassword.SetWindowText("
gdutngpxbbs"
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);
//设置列
m_ctrlLocalFile.InsertColumn(1,"
文件类型"
LVCFMT_LEFT,100,1);
m_ctrlLocalFile.InsertColumn(2,"
修改日期"
LVCFMT_LEFT,100,2);
m_ctrlServerFile.InsertColumn(0,"
m_ctrlServerFile.InsertColumn(1,"
m_ctrlServerFile.InsertColumn(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=:
intindex=m_ctrlLocal.FindString(0,"
c:
\\"
m_ctrlLocal.SetCurSel(index);
m_strLocPath="
;
//初始化为c盘
ListLocFile();
cFtpOpr.setEidt(&
m_ediMessage);
returnTRUE;
//returnTRUEunlessyousetthefocustoacontrol
voidCFtpDlg:
OnSysCommand(UINTnID,LPARAMlParam)
if((nID&
0xFFF0)==IDM_ABOUTBOX)
CAboutDlgdlgAbout;
dlgAbout.DoModal();
else
CDialog:
OnSysCommand(nID,lParam);
//Ifyouaddaminimizebuttontoyourdialog,youwillneedthecodebelow
//todrawtheicon.ForMFCapplicationsusingthedocument/viewmodel,
//thisisautomaticallydoneforyoubytheframework.
OnPaint()
if(IsIconic())
CPaintDCdc(this);
//devicecontextforpainting
SendMessage(WM_ICONERASEBKGND,(WPARAM)dc.GetSafeHdc(),0);
//Centericoninclientrectangle
intcxIcon=GetSystemMetrics(SM_CXICON);
intcyIcon=GetSystemMetrics(SM_CYICON);
CRectrect;
GetClientRect(&
rect);
intx=(rect.Width()-cxIcon+1)/2;
inty=(rect.Height()-cyIcon+1)/2;
//Drawtheicon
dc.DrawIcon(x,y,m_hIcon);
OnPaint();
//Thesystemcallsthistoobtainthecursortodisplaywhiletheuserdrags
//theminimizedwindow.
HCURSORCFtpDlg:
OnQueryDragIcon()
return(HCURSOR)m_hIcon;
//连接服务器
OnBtnConnect()
//TODO:
Addyourcontrolnotificationhandlercodehere
m_editServer.GetWindowText(m_strServer);
//记录FTP服务器地址
CStringstrtemp;
m_editPort.GetWindowText(strtemp);
myPort=:
atoi(strtemp);
//获得设置的端口号
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);
//使用匿名
CStringstrNameTemp;
m_editName.GetWindowText(strNameTemp);
//匿名登陆的用户名
i=cFtpOpr.set(m_strServer,strNameTemp,"
if(i)
//设置成功,打开连接
if(cFtpOpr.OpenConnection())
//连接成功
m_btnClo.EnableWindow(TRUE);
m_btnCon.EnableWindow(FALSE);
UpdateServerFile();
//更新服务器的文件显示
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
//连接失败
OnBtnClose()
//关闭连接
if(cFtpOpr.CloseConnection())
//关闭成功
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);
//双击本地文件列表控件中的选项
OnDblclkListLocalfile(NMHDR*pNMHDR,LRESULT*pResult)
POSITIONp=m_ctrlLocalFile.GetFirstSelectedItemPosition();
if(p==NULL)
return;
//获取刚选取的位置的下标(从0开始的)
intindex=m_ctrlLocalFile.GetNextSelectedItem(p);
//获得选中的内容
//得到第index行.第0列的内容(下标从0开始)
CStringFirstColumn=m_ctrlLocalFile.GetItemText(index,0);
CStringSecondColumn=m_ctrlLocalFi
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- FTP 客户端 xx