08011302计网第二次实验.docx

上传人:b****6 文档编号:7968945 上传时间:2023-01-27 格式:DOCX 页数:22 大小:39.29KB
下载 相关 举报
08011302计网第二次实验.docx_第1页
第1页 / 共22页
08011302计网第二次实验.docx_第2页
第2页 / 共22页
08011302计网第二次实验.docx_第3页
第3页 / 共22页
08011302计网第二次实验.docx_第4页
第4页 / 共22页
08011302计网第二次实验.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

08011302计网第二次实验.docx

《08011302计网第二次实验.docx》由会员分享,可在线阅读,更多相关《08011302计网第二次实验.docx(22页珍藏版)》请在冰豆网上搜索。

08011302计网第二次实验.docx

08011302计网第二次实验

东南大学自动化学院

实验报告

课程名称:

信息通信网络概论

第2次实验

实验名称:

FTP客户端通信程序设计

院(系):

自动化专业:

自动化

姓名:

刘燊燊学号:

********

实验室:

金智楼五楼一号机房实验组别:

同组人员:

实验时间:

2013年12月9日

评定成绩:

审阅教师:

一.实验目的和要求………………………………………………3

二.实验原理………………………………………………………3-4

三.实验方案与实验步骤…………………………………………4-5

四.实验设备与器材配置…………………………………………5

五.实验记录………………………………………………………5-21

六.实验总结………………………………………………………21

七.思考题或讨论题………………………………………………21-22

实验二FTP客户端通信程序设计

一.实验目的和要求

1.了解Windows下的TCP/IP通信方式与网络操作

2.熟悉FTP的编程的过程;

3.学会用可视化编程语言编写调试简单的通信程序。

二.实验原理

在使用MFC编程时,要连接到FTP服务器是一件非常简单的事情,只需要两个简单的步骤,首先必须建立一个CinternetSession对象,用类CinternetSession创建并初始化一个或几个同时存在的Internet会话(Session),并描述与代理服务器的连接(如果有必要的话),如果在程序运行期间需要保持与Internet的廉洁,可以创建一个CinternetSession对象作为类CwinApp的成员。

MFC中的类CftpConnection管理我们与Internet服务器的连接,并直接操作服务器上的目录和文件,FTP时MFC的WinInet支持的三个Internet功能之一,我们需要先创建一个CinternetSession实例和一个CftpConnection对象就可以实现和一个FTP服务器通信,我们不需要直接创建CftpConnection对象,而是通过调用CinternetSession:

:

GetFtpConnection来完成这项工作。

他创建CFtpConnection对象并返回一个指向该对象的指针。

在FTP连接的程序中,主要适用下列7个函数:

1)CInternetSession对象

语法:

CInternetSession(LPCTSTRpstrAgent,DWORDdwConText,DWORDdwAccessType,LPCTSTRpstrProxyName,LPCTSTRpstrProxyBypass,DWORDdwFlags);

注释:

在创建CInternetSession对象时调用这个成员函数,CInternetSession是应用程序第一个要调用的Internet函数,它将创始化内部数据结构,以备将来在应用程序中调用。

如果dwFlags包含INTERNET_FLAG_ASYNC,那末从这个句柄派生的所有的句柄,在状态回调例程注冊之前,都会出现异步状态。

如果沒有打开Internet连接,CInternetSession就会抛出一个例外,fxThorowInternetException。

2)GetFtpConnection()函数。

语法:

CFtpConnection*CIternetSession:

:

GetFtpConnection(LPCTSTRpstrServer,LPCTSTRpstrUserName,LPCTSTRpstrPassword,INTERNET_PORTnPort,BOOLbPassive);

注释:

调用这个函数建立一个FTP连接,并获得一个指向CFtpConnection对象的指针,GetFtpConnection连接到一个FTP服务器,创建并返回指向CFtpConnection对象的指针,它不在服务器上进行任何操作。

如果打算读写文件,必须进行分步操作。

关于查找,打开和读/写文件的信息需参考CFtpConnection和CFtpFileFind类。

对这个函数的调用返回一个指向CFtpConnection对象的指针。

如果调用失败,检查抛出的CInternetException对象,就可以确定失败的原因。

3)GetFile()函数。

语法:

BOOLGetFile(LPCTSTRpstrRemoteFile,LPCTSTRpstrLocalFile,BOOLbFailExists,DWORDdwAttributes,DWORDdwFlags,DWORDdwContext);

注释:

调用这个成员函数,可以从FTP服务器取得文件,并且把文件保存在本地机器上。

GetFile()函数是一个比较高级的例程,它可以处理所有有关从FTP服务器读文件,以及把文件存放在本地机器上的工作。

如果dwFlags为FILE_TRANSFER_TYPE_ASCII,文件数据的传输也会把控制和格式符转化为Windows中的等阶符号。

默认的传输模式是二进制模式,文件会以和服务器上相同的格式被下载。

pstrRemoteFile和pstrLocalFile可以是相对于当前目录的部分文件名,也可以是全文件名,在这两个名字中间,都既可以用反斜杠(\)或者正斜杠(/)来作为文件名的目录分隔符,GetFile()在使用前会把目录分隔符转化为适当的字符。

可以用自己选择的值来取代dwContext默认的值,设置为上下文标识符与CFtpConnection对象的定位操作有关,这个操作由CFtpConnection中的CInternetSession对象创建。

返回给CInternetSession:

:

OnStatusCallBack的值指出了所标识操作的状态。

如果调用成功,函数的返回为非0,否则返回0,如果调用失败,可以调用Win32函数GetLastError(),确认出错的原因。

4)PutFile()函数。

语法:

BOOLPutFile(LPCTSTRpstrLocalFile,LPCTSTRpstrRemoveFile,DWORDdwFlags,DWORDdwContext);

注释:

调用这个成员函数可以把文件保存到FTP服务器。

PutFile()函数是一个比较高级的例程,它可以处理有关把文件存放到服务器上的工作。

只发送数据,或要严格控制文件传输的应用程序,应该调用OpenFile和CInternet:

:

Write。

利用自己选择的值来取代dwContext默认的值,设置为上下文标识符,上下文标识符是CInternetSession对象创建的CFtpConnection对象的特定操作有关,这个值返回给CInternetSession:

:

OnStateCallBack,从而把操作的状态通报给它所标识的上下文。

如果调用成功,函数的返回为非0,否则返回0,如果调用失败,可以调用Win32函数GetLastError(),确认出错的原因。

5)FTP文件查找函数。

调用这个成员函数构造一个CftpFileFind对象。

6)FindFile()函数。

调用这个函数查找FTP文件,调用它检索到第一个FTP文件后,可以调用FindNextFile()检索后面的FTP文件。

7)FindNextFile()函数。

调用这个函数继续查找文件,在调用任何属性以前,必须已经至少调用过一次此函数。

以上函数的具体使用方法可以参见MSDN。

 

三.实验方案与实验步骤

1、创建一个internet会话。

CInternetSession*pSession;

pSession=newCInternetSession(AfxGetAppName(),1,

PRE_CONFIG_INTERNET_ACCESS);

2、建立与FTP服务器的连接。

CFtpConnection*pConnection;

pConnection=pSession->GetFtpConnection(m_strFtpSite,

m_strName,m_strPwd);

3、如果连接成功,获得当前登陆的缺省目录下所有的文件和目录名称。

CFtpFileFind*pFileFind;

pFileFind=newCFtpFileFind(pConnection);

Find()

4、下载文件或上传文件。

OnDownload()

OnUpload()

5、关闭连接。

四.实验设备与器材配置

实验室具有基于TCP/IP协议的Windows网络硬软件环境;

五.实验记录

主要部分代码记录:

//08011302Dlg.cpp:

implementationfile

//

#include"stdafx.h"

#include"08011302.h"

#include"afxinet.h"

#include"08011302Dlg.h"

#ifdef_DEBUG

#definenewDEBUG_NEW

#undefTHIS_FILE

staticcharTHIS_FILE[]=__FILE__;

#endif

/////////////////////////////////////////////////////////////////////////////

//CAboutDlgdialogusedforAppAbout

classCAboutDlg:

publicCDialog

{

public:

CAboutDlg();

//DialogData

//{{AFX_DATA(CAboutDlg)

enum{IDD=IDD_ABOUTBOX};

//}}AFX_DATA

//ClassWizardgeneratedvirtualfunctionoverrides

//{{AFX_VIRTUAL(CAboutDlg)

protected:

virtualvoidDoDataExchange(CDataExchange*pDX);//DDX/DDVsupport

//}}AFX_VIRTUAL

//Implementation

protected:

//{{AFX_MSG(CAboutDlg)

//}}AFX_MSG

DECLARE_MESSAGE_MAP()

};

CAboutDlg:

:

CAboutDlg():

CDialog(CAboutDlg:

:

IDD)

{

//{{AFX_DATA_INIT(CAboutDlg)

//}}AFX_DATA_INIT

}

voidCAboutDlg:

:

DoDataExchange(CDataExchange*pDX)

{

CDialog:

:

DoDataExchange(pDX);

//{{AFX_DATA_MAP(CAboutDlg)

//}}AFX_DATA_MAP

}

BEGIN_MESSAGE_MAP(CAboutDlg,CDialog)

//{{AFX_MSG_MAP(CAboutDlg)

//Nomessagehandlers

//}}AFX_MSG_MAP

END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////

//CMy08011302Dlgdialog

CMy08011302Dlg:

:

CMy08011302Dlg(CWnd*pParent/*=NULL*/)

:

CDialog(CMy08011302Dlg:

:

IDD,pParent)

{

//{{AFX_DATA_INIT(CMy08011302Dlg)

m_strFtpSite=_T("");

m_strName=_T("");

m_strPwd=_T("");

//}}AFX_DATA_INIT

//NotethatLoadIcondoesnotrequireasubsequentDestroyIconinWin32

m_hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME);

}

voidCMy08011302Dlg:

:

DoDataExchange(CDataExchange*pDX)

{

CDialog:

:

DoDataExchange(pDX);

//{{AFX_DATA_MAP(CMy08011302Dlg)

DDX_Control(pDX,IDC_LIST_FILE,m_ListFile);

DDX_Control(pDX,IDC_EDIT_PWD,m_EditPwd);

DDX_Control(pDX,IDC_EDIT_NAME,m_EditName);

DDX_Control(pDX,IDC_EDIT_FTP,m_EditFtp);

DDX_Control(pDX,IDC_DOWNLOAD,m_BtnDownLoad);

DDX_Control(pDX,IDOK,m_BtnConnect);

DDX_Control(pDX,IDCANCEL,m_cancel);

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_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_MAP

}

BEGIN_MESSAGE_MAP(CMy08011302Dlg,CDialog)

//{{AFX_MSG_MAP(CMy08011302Dlg)

ON_WM_SYSCOMMAND()

ON_WM_PAINT()

ON_WM_QUERYDRAGICON()

ON_BN_CLICKED(IDOK,OnConnect)

ON_BN_CLICKED(IDC_UPLOAD,OnUpload)

ON_BN_CLICKED(IDC_DOWNLOAD,OnDownload)

ON_EN_CHANGE(IDC_EDIT_FTP,OnChangeEditFtp)

ON_EN_CHANGE(IDC_EDIT_NAME,OnChangeEditName)

ON_EN_CHANGE(IDC_EDIT_PWD,OnChangeEditPwd)

ON_LBN_SELCHANGE(IDC_LIST_FILE,OnSelchangeListFile)

ON_LBN_DBLCLK(IDC_LIST_FILE,OnDblclkListFile)

//}}AFX_MSG_MAP

END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////

//CMy08011302Dlgmessagehandlers

BOOLCMy08011302Dlg:

:

OnInitDialog()

{

CDialog:

:

OnInitDialog();

//Add"About..."menuitemtosystemmenu.

//IDM_ABOUTBOXmustbeinthesystemcommandrange.

ASSERT((IDM_ABOUTBOX&0xFFF0)==IDM_ABOUTBOX);

ASSERT(IDM_ABOUTBOX<0xF000);

CMenu*pSysMenu=GetSystemMenu(FALSE);

if(pSysMenu!

=NULL)

{

CStringstrAboutMenu;

strAboutMenu.LoadString(IDS_ABOUTBOX);

if(!

strAboutMenu.IsEmpty())

{

pSysMenu->AppendMenu(MF_SEPARATOR);

pSysMenu->AppendMenu(MF_STRING,IDM_ABOUTBOX,strAboutMenu);

}

}

//Settheiconforthisdialog.Theframeworkdoesthisautomatically

//whentheapplication'smainwindowisnotadialog

SetIcon(m_hIcon,TRUE);//Setbigicon

SetIcon(m_hIcon,FALSE);//Setsmallicon

//TODO:

Addextrainitializationhere

//域名初始化

m_strFtpSite=_T("10.1.51.108");

//登陆名初始化

m_strName=_T("JSNet2013");

//口令初始化

m_strPwd=_T("");

//更新界面

UpdateData(FALSE);

//禁用下载和上传按钮

m_BtnDownLoad.EnableWindow(FALSE);

m_BtnUpLoad.EnableWindow(FALSE);

returnTRUE;//returnTRUEunlessyousetthefocustoacontrol

}

voidCMy08011302Dlg:

:

OnSysCommand(UINTnID,LPARAMlParam)

{

if((nID&0xFFF0)==IDM_ABOUTBOX)

{

CAboutDlgdlgAbout;

dlgAbout.DoModal();

}

else

{

CDialog:

:

OnSysCommand(nID,lParam);

}

}

//Ifyouaddaminimizebuttontoyourdialog,youwillneedthecodebelow

//todrawtheicon.ForMFCapplicationsusingthedocument/viewmodel,

//thisisautomaticallydoneforyoubytheframework.

voidCMy08011302Dlg:

:

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);

}

else

{

CDialog:

:

OnPaint();

}

}

//Thesystemcallsthistoobtainthecursortodisplaywhiletheuserdrags

//theminimizedwindow.

HCURSORCMy08011302Dlg:

:

OnQueryDragIcon()

{

return(HCURSOR)m_hIcon;

}

voidCMy08011302Dlg:

:

OnConnect()

{

//TODO:

Addyourcontrolnotificationhandlercodehere

CStringstrConnect;

m_BtnConnect.GetWindowText(strConnect);

//获得当前输入

UpdateData(TRUE);

//判断ftp地址栏是否为空

if(m_strFtpSite.IsEmpty())

{

MessageBox("请输入ftp服务器地址!

");

return;

}

//清除列表框内容

while(m_ListFile.GetCount()!

=0)

{

m_ListFile.DeleteString(0);

}

//TRACE("strConnect:

%s",strConnect);

//AfxMessageBox(strConnect);

if(strConnect=="连接")

{

//创建Internet会话

pSession=newCInternetSession(AfxGetAppName(),1,PRE_CONFIG_INTERNET_ACCESS);

try{

//试图建立FTP连接

pConnection=pSession->GetFtpConnection(m_strFtpSite,m_strName,m_strPwd);

}

catch(CInternetException*e)

{

//错误处理

e->Delete();

pConnection=NULL;

AfxMessageBox("连接错误,请检查地址和用户名密码");

return;

}

if(pConnection!

=NULL)

{

//创建CFtpFileFind对象

//传递CFtpConnection对象的指针

pFileFind=newCFtpFileFind(pConnection);

m_BtnUpLoad.EnableWindow(TRUE);

}

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

当前位置:首页 > 解决方案 > 学习计划

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

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