软件技术专业毕业实习报告.docx

上传人:b****2 文档编号:2465194 上传时间:2023-05-03 格式:DOCX 页数:40 大小:42.36KB
下载 相关 举报
软件技术专业毕业实习报告.docx_第1页
第1页 / 共40页
软件技术专业毕业实习报告.docx_第2页
第2页 / 共40页
软件技术专业毕业实习报告.docx_第3页
第3页 / 共40页
软件技术专业毕业实习报告.docx_第4页
第4页 / 共40页
软件技术专业毕业实习报告.docx_第5页
第5页 / 共40页
软件技术专业毕业实习报告.docx_第6页
第6页 / 共40页
软件技术专业毕业实习报告.docx_第7页
第7页 / 共40页
软件技术专业毕业实习报告.docx_第8页
第8页 / 共40页
软件技术专业毕业实习报告.docx_第9页
第9页 / 共40页
软件技术专业毕业实习报告.docx_第10页
第10页 / 共40页
软件技术专业毕业实习报告.docx_第11页
第11页 / 共40页
软件技术专业毕业实习报告.docx_第12页
第12页 / 共40页
软件技术专业毕业实习报告.docx_第13页
第13页 / 共40页
软件技术专业毕业实习报告.docx_第14页
第14页 / 共40页
软件技术专业毕业实习报告.docx_第15页
第15页 / 共40页
软件技术专业毕业实习报告.docx_第16页
第16页 / 共40页
软件技术专业毕业实习报告.docx_第17页
第17页 / 共40页
软件技术专业毕业实习报告.docx_第18页
第18页 / 共40页
软件技术专业毕业实习报告.docx_第19页
第19页 / 共40页
软件技术专业毕业实习报告.docx_第20页
第20页 / 共40页
亲,该文档总共40页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

软件技术专业毕业实习报告.docx

《软件技术专业毕业实习报告.docx》由会员分享,可在线阅读,更多相关《软件技术专业毕业实习报告.docx(40页珍藏版)》请在冰点文库上搜索。

软件技术专业毕业实习报告.docx

软件技术专业毕业实习报告

《软件实习》

 

专业班级

学号

姓名

指导老师

 

厦门软件学院

[实习目的]

熟练掌握一门工具,对B/S,C/S框架有一定了解,在此基础上编写一些基本的服务程序。

[实习内容]

我们这次做的是一个FTP客户端程序。

采用的是B/S框架模式。

可以通过客户端从服务器下载数据,或向服务器传送数据。

[FTP思想概述]

FTP是通过两个连接实现的。

有一个连接总是保持的,即控制连接,通过这个连接,客户端向服务器发送命令并从服务器取得对命令的应答,通过应答,客户端可以知道命令最后执行的结果如何。

另一个是数据连接,数据连接只有在服务器与客户端有数据连接的时候才建立服务器上文件目录信息,上传下载文件都是通过这个数据连接进程的。

另外,数据传输使用的是反向连接,即客户端穿件数据连接套接字的服务器端,然后向服务器端发送PORT命令,让FTP服务器来反向连接客户端。

[主要类框架]

FtpclientDlg为这个客户端的主要框架类,里面包含了5个类。

1,CFtpClientDlg:

publicCDialog为这个客户端的对话框类。

2,CControlSock:

publicCAsyncSocket控制连接,用于服务器与客户端的命令及应答传输。

成员变量:

m_SendBuffer,m_Receive:

存放命令的序列,连接到一个链表。

*m_dlg:

主对话框指针,用于显示对话框中的数据

Sendcmd:

向服务器发送命令

重载了OnRecive,OnSend两个函数

3,CListenSock:

publicCAsynSocket监听连接,将数据传输情况下监听服务器连接请求。

主要重载OnAccept函数

4,CDataSock:

publicCAsynSocket数据连接,用于显示服务器目录信息及文件数据传输。

成员变量:

m_ReceiveBuffer:

存放命令的序列,连接到一个链表。

*m_dlg:

主对话框指针,用于显示对话框中的数据

*m_pFile:

文件指针,上传下载文件时打开本地文件用于读写。

5,CFtp封装Ftp基本操作。

USER:

用户名

PASS:

密码

CWD:

改变文件目录

TYPE:

文件类型

CDUP:

向上层目录

LIST:

目录下的文件列表

RETR:

下载服务器上指定目录的而文件

STOR:

向服务器上传文件

成员函数:

ConnectServer:

用于连接到一个指定的FTP服务器

Put:

上传文件至服务器

Get:

从服务器上下载指定文件到本地

ChangeDirDown:

进入服务器上一子目录

ChangeDirUp:

进入服务器上的上一层目录

6.CFtpClientDlg中的一些消息相应函数

OnClickList1:

“服务器文件目录列表”列表框的单击事件相应函数

OnDbclkList1:

“服务器文件目录列表”列表框的双击事件相应函数OnConnect:

按钮“连接”的单击时间响应函数

OnDisconnect:

按钮“断开”的单击时间响应函数

OnDirup:

按钮“上层父目录”的单击时间响应函数

OnDirdown:

按钮“进入子目录”的单击时间响应函数

OnGet:

按钮“下载本文件”的单击时间响应函数

OnPut:

按钮“上传文件”的单击时间响应函数

 

[主要代码]

#include"stdafx.h"

#include"FtpClient.h"

#include"FtpClientDlg.h"

#ifdef_DEBUG

#definenewDEBUG_NEW

#undefTHIS_FILE

staticcharTHIS_FILE[]=__FILE__;

#endif

//CAboutDlgdialogusedforAppAbout

/////////globalvar/////////////////////

inttransfortype;

CDataSock*m_dataSock=NULL;

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

//CFtpClientDlgdialog

CFtpClientDlg:

:

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

:

CDialog(CFtpClientDlg:

:

IDD,pParent)

{

//{{AFX_DATA_INIT(CFtpClientDlg)

//}}AFX_DATA_INIT

//NotethatLoadIcondoesnotrequireasubsequentDestroyIconinWin32

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

m_imgs.Create(IDB_BITMAP1,16,2,RGB(255,255,255));

ftpclient=NULL;

}

voidCFtpClientDlg:

:

DoDataExchange(CDataExchange*pDX)

{

CDialog:

:

DoDataExchange(pDX);

//{{AFX_DATA_MAP(CFtpClientDlg)

//}}AFX_DATA_MAP

}

BEGIN_MESSAGE_MAP(CFtpClientDlg,CDialog)

//{{AFX_MSG_MAP(CFtpClientDlg)

ON_WM_SYSCOMMAND()

ON_WM_PAINT()

ON_WM_QUERYDRAGICON()

ON_NOTIFY(NM_CLICK,IDC_LIST1,OnClickList1)

ON_NOTIFY(NM_DBLCLK,IDC_LIST1,OnDblclkList1)

ON_BN_CLICKED(IDC_CONNECT,OnConnect)

ON_BN_CLICKED(IDC_DISCONNECT,OnDisconnect)

ON_BN_CLICKED(IDC_DIRUP,OnDirup)

ON_BN_CLICKED(IDC_DIRDOWN,OnDirdown)

ON_BN_CLICKED(IDC_GET,OnGet)

ON_BN_CLICKED(IDC_PUT,OnPut)

//}}AFX_MSG_MAP

END_MESSAGE_MAP()

//CFtpClientDlgmessagehandlers

BOOLCFtpClientDlg:

:

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

}

}

SetIcon(m_hIcon,TRUE);//Setbigicon

SetIcon(m_hIcon,FALSE);//Setsmallicon

CListCtrl*m_list;

m_list=(CListCtrl*)GetDlgItem(IDC_LIST1);

m_list->InsertColumn(0,"文件名",LVCFMT_LEFT,90);

m_list->InsertColumn(1,"文件长度",LVCFMT_LEFT,70);

m_list->InsertColumn(2,"创建日期",LVCFMT_LEFT,90);

m_list->InsertColumn(3,"文件属性",LVCFMT_LEFT,105);

m_list->SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);

m_list->SetImageList(&m_imgs,LVSIL_SMALL);

CEdit*edit;

edit=(CEdit*)GetDlgItem(IDC_SERVERT_PORT);

edit->SetWindowText("21");

edit=(CEdit*)GetDlgItem(IDC_USR);

edit->SetWindowText("anonymous");

edit=(CEdit*)GetDlgItem(IDC_PASS);

edit->SetWindowText("1@");

((CButton*)GetDlgItem(IDC_DISCONNECT))->EnableWindow(false);

((CButton*)GetDlgItem(IDC_DIRUP))->EnableWindow(false);

((CButton*)GetDlgItem(IDC_PUT))->EnableWindow(false);

((CButton*)GetDlgItem(IDC_GET))->EnableWindow(false);

((CButton*)GetDlgItem(IDC_DIRDOWN))->EnableWindow(false);

((CButton*)GetDlgItem(IDC_DIRUP))->EnableWindow(false);

((CListCtrl*)GetDlgItem(IDC_LIST1))->EnableWindow(false);

returnTRUE;//returnTRUEunlessyousetthefocustoacontrol

}

voidCFtpClientDlg:

:

OnSysCommand(UINTnID,LPARAMlParam)

{

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

{

CAboutDlgdlgAbout;

dlgAbout.DoModal();

}

else

{

CDialog:

:

OnSysCommand(nID,lParam);

}

}

voidCFtpClientDlg:

:

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

}

}

HCURSORCFtpClientDlg:

:

OnQueryDragIcon()

{

return(HCURSOR)m_hIcon;

}

//CContrlSock

CContrlSock:

:

CContrlSock()

{

}

CContrlSock:

:

~CContrlSock()

{

}

//Donoteditthefollowinglines,whichareneededbyClassWizard.

#if0

BEGIN_MESSAGE_MAP(CContrlSock,CAsyncSocket)

//{{AFX_MSG_MAP(CContrlSock)

//}}AFX_MSG_MAP

END_MESSAGE_MAP()

#endif//0

///控制套接字向服务器发送命令

voidCContrlSock:

:

sendcmd()

{

CStringSendBuffer;

intn;

///如果命令链表不空

if(!

m_SendBuffer.IsEmpty())

{

//取出链表头的澳门百家乐一条命令字符串并将其从链表中删除

SendBuffer=m_SendBuffer.RemoveHead();

//发送该命令字符串

n=Send(SendBuffer,SendBuffer.GetLength());

//如果命令发送失败

if(SOCKET_ERROR==n)

{

//m_pFtpView->MessageBox("Errorhappenedwhensendingcommandtohost!

","Error");

}

//如果命令字符串没有完全发送出去

elseif(n

{

//将未发送出去的字符串保存,留待下次发送

SendBuffer=SendBuffer.Right(SendBuffer.GetLength()-n);

m_SendBuffer.AddHead(SendBuffer);

}

}

}

voidCContrlSock:

:

OnReceive(intnErrorCode)

{

//TODO:

Addyourspecializedcodehereand/orcallthebaseclass

CStringBuffer,Command;

charbuffer[256],*pBuffer,*p1,*p2;

intn,nCommand;

if(SOCKET_ERROR==(n=Receive(buffer,255)))

return;

buffer[n]='\0';

m_ReceiveBuffer+=buffer;

Buffer=m_ReceiveBuffer;

m_ReceiveBuffer.Empty();

if(!

Buffer.IsEmpty())

{

pBuffer=(char*)(LPCSTR)Buffer;

p1=pBuffer;

pBuffer+=n;

while(p1

{

p2=strstr(p1,"\r\n");

if(NULL!

=p1)

{

strncpy((char*)Command.GetBuffer(p2-p1+3),p1,p2-p1+2)

[p2-p1+2]='\0';

p1=p2+2;

Command.ReleaseBuffer();

}

else

{

m_ReceiveBuffer=p1;

break;

}

CEdit*edit=(CEdit*)m_dlg->GetDlgItem(IDC_EDIT_INFO);

m_dlg->outinfo+=Command;

edit->SetWindowText(m_dlg->outinfo);

if(3

{

if(isdigit(Command[0])&&isdigit(Command[1])&&isdigit(Command[2])

&&(''==Command[3]))

{

sscanf(Command,"%d",&nCommand);

switch(nCommand)

{

//对于命令usr和passwd的应答

case230:

((CButton*)m_dlg->GetDlgItem(IDC_DISCONNECT))->EnableWindow(true);

((CButton*)m_dlg->GetDlgItem(IDC_DIRUP))->EnableWindow(true);

((CButton*)m_dlg->GetDlgItem(IDC_PUT))->EnableWindow(true);

((CListCtrl*)m_dlg->GetDlgItem(IDC_LIST1))->EnableWindow(true);

default:

if((nCommand<200)||(nCommand>=400)||(332==nCommand))

break;

OnSend(0);

break;

//对于命令port

case200:

OnSend(0);

break;

case421:

((CButton*)m_dlg->GetDlgItem(IDC_DISCONNECT))->EnableWindow(false);

((CButton*)m_dlg->GetDlgItem(IDC_DIRUP))->EnableWindow(false);

((CButton*)m_dlg->GetDlgItem(IDC_PUT))->EnableWindow(false);

((CButton*)m_dlg->GetDlgItem(IDC_DIRDOWN))->EnableWindow(false);

((CButton*)m_dlg->GetDlgItem(IDC_DIRUP))->EnableWindow(false);

((CListCtrl*)m_dlg->GetDlgItem(IDC_LIST1))->EnableWindow(false);

break;

}

}

}

}

}

}

//CListenSock

CListenSock:

:

CListenSock()

{

}

CListenSock:

:

~CListenSock()

{

}

//Donoteditthefollowinglines,whichareneededbyClassWizard.

#if0

BEGIN_MESSAGE_MAP(CListenSock,CAsyncSocket)

//{{AFX_MSG_MAP(CListenSock)

//}}AFX_MSG_MAP

END_MESSAGE_MAP()

#endif//0

//CListenSockmemberfunctions

voidCListenSock:

:

OnAccept(intnErrorCode)

{

//TODO:

Addyourspecializedcodehereand/orcallthebaseclass

if(NULL!

=m_dataSock)

{

Accept(*m_dataSock);

//如果是下载文件或者取得服务器上文件信息

if(transfortype==1||transfortype==2)

//为套接字请求事件通知

m_dataSock->AsyncSelect(FD_READ|FD_CLOSE);

//如果是上载文件

if(transfortype==3)

//为套接字请求事件通知

m_dataSock->AsyncSelect(FD_WRITE|FD_CLOSE);

}

}

//C

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

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

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2