FTP客户端xxWord格式.docx

上传人:b****3 文档编号:17564571 上传时间:2022-12-07 格式:DOCX 页数:44 大小:31.04KB
下载 相关 举报
FTP客户端xxWord格式.docx_第1页
第1页 / 共44页
FTP客户端xxWord格式.docx_第2页
第2页 / 共44页
FTP客户端xxWord格式.docx_第3页
第3页 / 共44页
FTP客户端xxWord格式.docx_第4页
第4页 / 共44页
FTP客户端xxWord格式.docx_第5页
第5页 / 共44页
点击查看更多>>
下载资源
资源描述

FTP客户端xxWord格式.docx

《FTP客户端xxWord格式.docx》由会员分享,可在线阅读,更多相关《FTP客户端xxWord格式.docx(44页珍藏版)》请在冰豆网上搜索。

FTP客户端xxWord格式.docx

(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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 党团建设

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1