




已阅读5页,还剩37页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
FTP服务与客户端设计摘要 FTP为一种主流的网络文件传输协议。设计和实现FTP服务与客户端,有助于深入理解网络编程和FTP协议,使理论知识和实践结合起来。本文采用VC+6.0编程工具设计和实现了FTP服务与客户端设计。其主要设计工作为:服务器端设计和客户端设计。服务器端设计模块主要有:服务器日志模块,在线用户模块,程序设置模块 ,统计模块,安全模块。客户端设计模块主要有:连接服务器模块,上传文件模块,下载文件模块。通过实际测试和应用,验证了本文设计的正确性。关键词 FTP 服务器 客户端 VC+6.0The design of FTP Server and ClientAbstract FTP is a mainstream network file transfer protocol. Design and Implementation of FTP services and clients will help in-depth understanding of network programming and FTP, and make the theoretical knowledge and practice together. In this paper, using VC + +6.0 programming tool, the FTP server and client designe are designed and implemented. The main design work is for: the design of server and client . Server-side design modules are: server logs module, online modules, procedures set module, statistics module, the security module. lient design modules are: connect to server module, upload module, download files module. Through practical application and testing ,it verifys the correctness of the design of the paper.Keywords FTP Sever Client VC+6.0目 录第1章绪论21.1FTP介绍31.2VC+6.0介绍61.3 本文工作内容8第2章 系统整体设计92.1 FTP服务器整体设计92.2 FTP客户端整体设计10第3章 FTP服务器模块设计113.1服务器日志模块113.2 在线用户模块163.3 程序设置模块193.4 统计模块223.5 安全模块25第4章 FTP客户端模块设计334.1连接服务器模块334.2 下载文件模块354.3 上传文件模块40第5章 结论和展望44致 谢45参考文献46第1章 绪论1.1 FTP介绍FTP的主要作用,就是让用户连接上一个远程计算机(这些计算机上运行着FTP服务器程序)察看远程计算机有哪些文件,然后把文件从远程计算机上拷到本地计算机,或把本地计算机的文件送到远程计算机去。以hDz9wb- i(l*R中国Web技术站N GEHv /X1fG4ma8S(l74LNvh ?以下传文件为例,当启动FTP从远程计算机拷贝文件时,事实上启动了两个程序:一个本地机上的FTP客户程序:它向FTP服务器提出拷贝文件的请求。 另一个是启动在远程计算机的上的FTP服务器程序,它响应请求把指定的文件传送到计算机中。FTP采用“客户机/服务器”方式,用户端要在自己的本地计算机上安装FTP客户程序。FTP客户程序有字符界面和图形界面两种。字符界面的FTP的命令复杂、繁多。图形界面的FTP客户程序,操作上要简洁方便的多。简单地说,支持FTP协议的服务器就是FTP服务器。 一般来说,用户联网的首要目的就是实现信息共享,文件传输是信息共享非常重要的一个内容之一。Internet上早期实现传输文件,并不是一件容易的事, 我们知道 Internet是一个非常复杂的计算机环境,有PC,有工作站,有MAC,有大型机,据统计连接在Internet上的计算机已有上千万台,而这些计算 机可能运行不同的操作系统, 有运行Unix的服务器,也有运行Dos、Windows的PC机和运行MacOS的苹果机等等,而各种操作系统之间的文件交流问题,需要建立一个统一的 文件传输协议,这就是所谓的FTP。基于不同的操作系统有不同的FTP应用程序,而所有这些应用程序都遵守同一种协议,这样用户就可以把自己的文件传送给 别人,或者从其它的用户环境中获得文件。中国Web技术站| MZ5g0mq-|G$与大多数Internet服务一样,FTP也是一个客户机/服务器系统。用户通过一个支持FTP协议的客户机程序,连接到在远程主机上的FTP服务器程 序。用户通过客户机程序向服务器程序发出命令,服务器程序执行用户所发出的命令,并将执行的结果返回到客户机。比如说,用户发出一条命令,要求服务器向用 户传送某一个文件的一份拷贝,服务器会响应这条命令,将指定文件送至用户的机器上。客户机程序代表用户接收到这个文件,将其存放在用户目录中。中国Web技术站b:Qq5xu;m:c在FTP的使用当中,用户经常遇到两个概念:下载(Download)和上载(Upload)。下载文件就是从远程主机拷贝文件至自己的计算机上;上载文件就是将文件从自己的计算机中拷贝至远程主机上。用Internet语言来说,用户可通过客户机程序向(从)远程主机上载(下载)文件。中国Web技术站ewrF/E$DA.v 使用FTP时必须首先登录,在远程主机上获得相应的权限以后,方可上载或下载文件。也就是说,要想同哪一台计算机传送文件,就必须具有哪一台计算机的适当 授权。换言之,除非有用户ID和口令,否则便无法传送文件。这种情况违背了Internet的开放性,Internet上的FTP主机何止千万,不可能要 求每个用户在每一台主机上都拥有帐号。匿名FTP就是为解决这个问题而产生的。0P#YK)Z.8N4G,?M U%j 匿名FTP是这样一种机制,用户可通过它连接到远程主机上,并从其下载文件,而无需成为其注册用户。系统管理员建立了一个特殊的用户ID,名为anonymous, Internet上的任何人在任何地方都可使用该用户ID。中国Web技术站2v1n)En(o!Iw&w7G$F 通过FTP程序连接匿名FTP主机的方式同连接普通FTP主机的方式差不多,只是在要求提供用户标识ID时必须输入anonymous,该用户ID的口令 可以是任意的字符串。习惯上,用自己的E-mail地址作为口令,使系统维护程序能够记录下来谁在存取这些文件。zkh*a*J8R/E-O 值得注意的是,匿名FTP不适用于所有Internet主机,它只适用于那些提供了这项服务的主机。当远程主机提供匿名FTP服务时,会指定某些目录向公 众开放,允许匿名存取。系统中的其余目录则处于隐匿状态。作为一种安全措施,大多数匿名FTP主机都允许用户从其下载文件,而不允许用户向其上载文件,也 就是说,用户可将匿名FTP主机上的所有文件全部拷贝到自己的机器上,但不能将自己机器上的任何一个文件拷贝至匿名FTP主机上。即使有些匿名FTP主机 确实允许用户上载文件,用户也只能将文件上载至某一指定上载目录中。随后,系统管理员会去检查这些文件,他会将这些文件移至另一个公共下载目录中,供其他 用户下载,利用这种方式,远程主机的用户得到了保护,避免了有人上载有问题的文件,如带病毒的文件。中国Web技术站F:jm dD&V 作为一个Internet用户,可通过FTP在任何两台Internet主机之间拷贝文件。但是,实际上大多数人只有一个Internet帐户,FTP主 要用于下载公共文件,例如共享软件、各公司技术支持文件等。 Internet上有成千上万台匿名FTP主机,这些主机上存放着数不清的文件,供用户免费拷贝。实际上,几乎所有类型的信息,所有类型的计算机程序都可 以在Internet上找到。这是Internet吸引我们的重要原因之一。匿名FTP使用户有机会存取到世界上最大的信息库,这个信息库是日积月累起来 的,并且还在不断增长,永不关闭,涉及到几乎所有主题。而且,这一切是免费的。中国Web技术站1f6Qa-h 匿名FTP是Internet网上发布软件的常用方法。Internet之所以能延续到今天,是因为人们使用通过标准协议提供标准服务的程序。像这样的程 序,有许多就是通过匿名FTP发布的,任何人都可以存取它们。Internet中的有数目巨大的匿名FTP主机以及更多的文件,那么到底怎样才能知道某一 特定文件位于哪个匿名FTP主机上的那个目录中呢?这正是Archie服务器所要完成的工作。Archie将自动在FTP主机中进行搜索,构造一个包含全部文件目录信息的数据库,使你可以直接找到所需文件的位置信息。其支持两种模式,一种方式叫做Standard (也就是 Active,主动方式),一种是 Passive (也就是PASV,被动方式)。 Standard模式 FTP的客户端发送 PORT 命令到FTPserver。Passive模式FTP的客户端发送 PASV命令到 FTP Server。Standard模式FTP 客户端首先和FTP Server的TCP 21端口建立连接,通过这个通道发送命令,客户端需要接收数据的时候在这个通道上发送PORT命令。 PORT命令包含了客户端用什么端口接收数据。在传送数据的时候,服务器端通过自己的TCP 20端口发送数据。 FTP server必须和客户端建立一个新的连接用来传送数据。Passive模式在建立控制通道的时候和Standard模式类似,当客户端通过这个通道发送PASV 命令的时候,FTP server打开一个位于1024和5000之间的随机端口并且通知客户端在这个端口上传送数据的请求,然后FTP server 将通过这个端口进行数据的传送,这个时候FTP server不再需要建立一个新的和客户端之间的连接。现在的FTP软件里面包括在IE5以上的版本里面也已经支持这两种模式了。一般一些FTP客户端的软件就比较好设置了,一般都有一个PASV的选项,比如 CuteFTP,传输的方式都有Standard和PASV的选项,可以自己进行选择;另外在IE里面如果要设置成PASV模式的话可以选中工具 Internet选项高级为FTP站点启用文件夹视图,否则就采用Standard模式。1.2 VC+6.0介绍本课题设计采用Microsoft Visual C+6.0作为开发工具。Visual c+是开发Windows应用程序的主流开发工具,可以利用的资源多。Visual C+ 不仅仅是一个编译器。它是一个全面的应用程序开发环境,使用它你充分利用具有面向对象特性的 C+ 来开发出专业级的 Windows 应用程序。Visual C+作为一种程序设计语言,它同时也是一个集成开发工具,提供了软件代码自动生成和可视化的资源编辑功能。在使用Visual C+开发应用程序的过程中,系统为我们生成了大量的各种类型的文件。Visual C+采用的框架是MFC。MFC不仅仅是人们通常理解的一个类库。你如果选择了MFC,也就选择了一种程序结构,一种编程风格。MFC 是一个很大的、扩展了的 C+ 类层次结构,它能使开发 Windows 应用程序变得更加容易。MFC 是在整个 Windows 家族中都是兼容的,也就是说,无论是 Windows3.x、Windows95 还是 Windows NT,所使用的 MFC 是兼容的。每当新的 Windows 版本出现时,MFC 也会得到修改以便使旧的编译器和代码能在新的系统中工作。MFC 也回得到扩展,添加新的特性、变得更加容易建立应用程序。 使用 MFC 的最大优点是它为你做了所有最难做的事。MFC 中包含了上成千上万行正确、优化和功能强大的 Windows 代码。你所调用的很多成员函数完成了你自己可能很难完成的工作。从这点上将,MFC 极大地加快了你的程序开发速度。由于MFC编程方法充分利用了面向对象技术的优点,它使得我们编程时极少需要关心对象方法的实现细节,同时类库中的各种对象的强大功能足以完成我们程序中的绝大部分所需功能,这使得应用程序中程序员所需要编写的代码大为减少,有力地保证了程序的良好的可调试性。最重要的是MFC类库在提供的对象的各种属性和方法都是经过谨慎的编写和严格的测试,可靠性很高,这就保证了使用MFC类库不会影响程序的可靠性和正确性。MFC的常用类有:1).CWnd:窗口,它是大多数“看得见的东西”的父类(Windows里几乎所有看得见的东西都是一个窗口,大窗口里有许多小窗口),比如视图CView、 框架窗口CFrameWnd、工具条CToolBar、对话框CDialog、按钮CButton,etc;一个例外是菜单(CMenu)不是从窗口派生 的。该类很大,一开始也不必学,知道就行了。 2).CDocument文档,负责内存数据与磁盘的交互。最重要的是OnOpenDocument(读入),OnSaveDocument(写盘),Serialize(读写)。 3).CView视图,负责内存数据与用户的交互。包括数据的显示、用户操作的响应(如菜单的选取、鼠标的响应)。最重要的是OnDraw(重画窗 口),通常用CWnd:Invalidate()来启动它。另外,它通过消息映射表处理菜单、工具条、快捷键和其他用户消息。你自己的许多功能都要加在 里面,你打交道最多的就是它。 4).CDC设备文本。无论是显示器还是打印机,都是画图给用户看。这图就抽象为CDC。CDC与其他GDI(图形设备接口)一起,完成文字和图形、图 像的显示工作。把CDC想象成一张纸,每个窗口都有一个CDC相联系,负责画窗口。CDC有个常用子类CClientDC(窗口客户区),画图通常通过 CClientDC完成。 5).CDialog对话框。 6).CWinApp应用程序类。似于C中的main函数,是程序执行的入口和管理者,负责程序建立、消灭,主窗口和文档模板的建立。最常用函数InitInstance():初始化。 7).CGdiObject及子类,用于向设备文本画图。它们都需要在使用前选进DC。 8).CPen笔,画线。 9).CBrush刷子,填充。 10).CFont字体,控制文字输出的字体。 11).CBitmap位图。 12).CPalette调色板 。 13).CRgn区域,指定一块区域可以用于做特殊处理。 14).CFile文件。最重要的不外是Open(打开),Read(读入),Write(写)。 15).CString字符串。封装了C中的字符数组,非常实用。 16).CPoint点,就是(x,y)对。 17).CRect矩形,就是(left,top,right,bottom)。 18).CSize大小,就是(cx,cy)对(宽、高)。1.3 本文工作内容本文的主要工作为FTP服务器和客户端的设计。其主要设计内容有:(1)服务器设计: 服务器日志模块。 在线用户模块。 程序设置模块 。 统计模块。 安全模块。(2)客户端设计: 连接服务器模块。 上传文件模块。 下载文件模块。 第2章 系统整体设计本系统的设计为FTP服务器和客户端设计,主要设计模块分为服务器设计模块和客户端设计模块。服务器设计模块包括:服务器日志模块,在线用户模块,程序设置模块 ,统计模块,安全模块。客户端设计模块包括:连接服务器模块,上传文件模块,下载文件模块。2.1 FTP服务器整体设计 服务器设计模块包括:服务器日志模块,在线用户模块,程序设置模块 ,统计模块,安全模块。其软件设计模块层次图如图2.1所示。图2.1 FTP服务器模块设计层次图Fig. 2.1 FTP server module level design plans服务器日志模块。服务器日志模块的主要功能为显示和记录用户的登录信息和一系列的操作信息。例如用户上传文件内容,上传时间;下载文件内容,下载时间等等。在线用户模块。在线用户模块的主要功能为显示当前连接上服务器的用户。程序设置模块。程序设置模块的主要功能为配置服务器参数。例如允许用户下载,允许用户上传等一些列用户对服务器的操作参数配置。统计模块。统计模块的主要功能为统计历史时间上,服务器各种操作的总量并显示。例如服务器的总下载量,总上传量,总连接用户数等。安全模块。安全模块的主要功能为配置服务器的安全性。主要配置内容为设置允许接入服务器的IP和禁止接入服务器的IP。2.2 FTP客户端整体设计客户端设计模块包括:连接服务器模块,上传文件模块,下载文件模块。其软件设计层次图如图2.2所示。图2.2 FTP客户端模块设计层次图Fig. 2.2 FTP client module level design plans连接服务器模块。连接服务器模块的主要功能为根据用户输入的用户名、密码、服务器名和连接端口,完成客户端对服务器的接入。上传文件模块。上传文件模块的主要功能为浏览本地文件,选择上传文件,上传文件到服务器。下载文件模块。下载文件模块的主要功能为显示服务器文件目录,根据用户选择下载相应文件,存储到本地机器硬盘上。第3章 FTP服务器模块设计服务器的主要设计模块为五个模块:服务器日志模块,在线用户模块,程序设置模块 ,统计模块,安全模块。3.1服务器日志模块服务器日志模块的主要功能为显示和记录用户的登录信息和一系列的操作信息。其具体显示和记录的日志信息为:用户登录信息;用户上传文件信息;用户下载文件信息;用户设置服务器文件目录信息;用户创建服务器文件目录信息;用户删除服务器文件目录信息;用户修改服务器文件目录信息;用户下线信息。其程序具体设计方法为:当服务器接收到客户端命令信息时,将信息显示在服务器Log信息窗口,并将其记录在文件中。其程序设计流程图如图3.1.1所示。图3.1.1服务器日志模块设计流程图Fig. 3.1.1 Server logs modular design flow chart其服务器日志模块运行界面图如图3.1.2所示图3.1.2 服务器日志模块运行界面图Fig. 3.1.2 Server logs module running interface 其设计主要实现程序代码如下:AddTraceLine函数的主要功能为向服务器日志信息显示List控件增加一个元素,用以显示到来的信息。void CTracePage:AddTraceLine(int nLevel, LPCTSTR pstrFormat, .)CString str;/ format and write the data we were givenva_list args;va_start(args, pstrFormat);str.FormatV(pstrFormat, args);try/ create new messageCLogMsg *pLogMsg = new CLogMsg;GetLocalTime(&pLogMsg-m_sysTime);pLogMsg-m_nLevel = nLevel;pLogMsg-m_strText = str;m_QueueLock.Lock();m_LogQueue.AddTail(pLogMsg);m_QueueLock.Unlock();/ schedule log actionPostMessage(WM_ADDTRACELINE);catch(.)OnAddTraceLine函数为日志消息响应函数,当服务器器接收到客户端的信息时,向服务器日子模块发送日志消息;日子模块在响应函数OnAddTraceLine中,判断消息的类别,根据其类别设定其消息显示内容和内容显示颜色。LRESULT CTracePage:OnAddTraceLine(WPARAM, LPARAM)CLogMsg *pLogMsg;try/ get first message in the queue/m_QueueLock.Lock();pLogMsg = (CLogMsg *)m_LogQueue.RemoveHead();/m_QueueLock.Unlock();switch(pLogMsg-m_nLevel)case 1:m_TraceList.AddString(pLogMsg-m_strText, RGB(0,130,0);break;case 2:m_TraceList.AddString(pLogMsg-m_strText, RGB(0,0,255);break;case 3:m_TraceList.AddString(pLogMsg-m_strText, RGB(255,0,0);break;default:m_TraceList.AddString(pLogMsg-m_strText, RGB(0,0,0);break;/*CString strDateTime;strDateTime.Format(%02d/%02d/%02d %02d:%02d:%02d.%03d , pLogMsg-m_sysTime.wDay, pLogMsg-m_sysTime.wMonth, pLogMsg-m_sysTime.wYear,pLogMsg-m_sysTime.wHour, pLogMsg-m_sysTime.wMinute, pLogMsg-m_sysTime.wSecond, pLogMsg-m_sysTime.wMilliseconds);switch(pLogMsg-m_nLevel)case 1:m_LogFile error_lvl strDateTime m_strText endl;break;case 2:m_LogFile warning_lvl strDateTime m_strText endl;break;case 3:default:m_LogFile trace_lvl strDateTime m_strText TrackPopupMenu(0, point.x, point.y, this, NULL);3.2 在线用户模块在线用户模块的主要功能为显示当前连接上服务器的用户。其显示内容有:用户登录用户名,用户IP,用户登录时间。显示方法为使用ClistCtrl控件将显示内容显示在其上。ClistCtrl控件常用操作方法如下。1)设置ClistCtrl类型。DWORD SetExtendedStyle(DWORD dwNewStyle);其中LVS_EX_CHECKBOXES 表示添加CheckBox,LVS_EX_FULLROWSELECT 表示选择整行,LVS_EX_GRIDLINES 表示添加表格线。如果设置了LVS_EX_CHECKBOXES属性,则可以用BOOL GetCheck( int nItem ) const;来得到某一行是否Checked。2) 删除操作。BOOL DeleteItem( int nItem),删除指定的元素,nItem为要删除的元素。BOOL DeleteAllItems( ),删除所有的元素。3) 插入元素操作。int InsertItem( int nItem, LPCTSTR lpszItem),nItem为插入元素索引号,lpszItem为插入元素标签地址。4)插入列操作。int InsertColumn( int nCol, LPCTSTR lpszColumnHeading, int nFormat = LVCFMT_LEFT, int Width = -1, int nSubItem = -1 ),nCol为新列索引号,lpszColumnHeading列元素存放名称地址。5)设置列宽操作。BOOL SetColumnWidth( int nCol, int cx ), nCol列所引号,cx设置宽度。6)设置元素值操作。BOOL SetItemText(int nItem,int nSubItem, LPCTSTR lpszText ),nItem设置元素,nSubItem设置子元素,lpszText值内容地址。其程序设计流程图如图3.2.1所示。图3.2.1 在线用户模块设计流程图Fig. 3.2.1 Online user modular design flow chart在线用户模块运行界面图如图3.2.2所示。图3.2.2 在线用户模块运行界面图Fig. 3.2.2 Online user modular running interface其程序设计主要实现代码如下:OnInitDialog()为在线用户模块对话框初始函数,在线用户模块在这里为在线用户List显示控件,增添三个元素:“用户名”,“IP地址”,“登陆时间”,用来显示登陆用户的信息。BOOL COnlineUsersPage:OnInitDialog() CDialog:OnInitDialog();m_OnlineUsers.InsertColumn(1, 用户名);m_OnlineUsers.InsertColumn(2, IP 地址);m_OnlineUsers.InsertColumn(3, 登录时间);DWORD dwStyle = m_OnlineUsers.GetExtendedStyle();dwStyle |= LVS_EX_FULLROWSELECT; m_OnlineUsers.SetExtendedStyle(dwStyle);return TRUE;AddUser函数为在线用户信息显示List控件,增加元素函数。当有新的用户登录服务器时,在线用户模块调用AddUser函数,显示新的登录用户信息。void COnlineUsersPage:AddUser(DWORD nThreadID, LPCTSTR lpszName, LPCTSTR lpszAddress)CString strThreadID;strThreadID.Format(%d, nThreadID);LVFINDINFO info;info.flags = LVFI_PARTIAL|LVFI_STRING;info.psz = (LPCTSTR)strThreadID;int nIndex = m_OnlineUsers.FindItem(&info);if (nIndex = -1)nIndex = m_OnlineUsers.InsertItem(0, strThreadID);m_OnlineUsers.SetItemText(nIndex, 1, lpszName);m_OnlineUsers.SetItemText(nIndex, 2, lpszAddress);m_OnlineUsers.SetItemText(nIndex, 3, CTime:GetCurrentTime().Format(%H:%M:%S);RemoveUser函数为在线用户信息显示List控件,删除元素函数。当有用户下线时或则断开服务器连接时,在线用户模块调用RemoveUser函数,删除相应的登录用户信息。void COnlineUsersPage:RemoveUser(DWORD nThreadID)LVFINDINFO info;CString strThreadID;strThreadID.Format(%d, nThreadID);info.flags = LVFI_PARTIAL|LVFI_STRING;info.psz = (LPCTSTR)strThreadID;int nIndex = m_OnlineUsers.FindItem(&info);if (nIndex != -1)m_OnlineUsers.DeleteItem(nIndex);3.3 程序设置模块程序设置模块的主要功能为配置服务器参数。其配置参数有:FTP连接端口,最大用户连接数,服务器开启方式,服务器系统信息,Log文件查看和清除。其程序设计方法为:系统时刻监控程序设置模块,当程序设置模块触发应用消息时,系统重新读入配置信息;当程序设置模块触发查看Log信息时,打开Log文件;当程序设置模块触发清除Log信息时,清空Log文件。其程序流程图如图3.3.1所示。图3.3.1 程序设置模块设计流程图Fig. 3.3.1 Procedures settings modular design flow chart程序设置模块运行界面图如图3.3.2所示。图3.3.2 程序设置模块运行界面图Fig. 3.3.2 Procedures settings modular running interface其程序设计主要实现实现代码如下:OnDestroy函数为程序设置模块销毁函数。当主程序退出时,销毁程序设置模块,此时程序设置模块调用OnDestroy函数读取配置参数,并将其写入配置文件中存储。void CConfigurationPage:OnDestroy() UpdateData();/ save settingsAfxGetApp()-WriteProfileInt(Settings, Port, m_nPort);AfxGetApp()-WriteProfileInt(Settings, MaxUsers, m_nMaxUsers);AfxGetApp()-WriteProfileInt(Settings, Timeout, m_nTimeout);AfxGetApp()-WriteProfileString(Settings, WelcomeMsg, m_strWelcomeMessage); AfxGetApp()-WriteProfileString(Settings, GoodbyeMsg, m_strGoodbyeMessage); AfxGetApp()-WriteProfileInt(Settings, LaunchOnStartup, m_bLaunchOnStartup);AfxGetApp()-WriteProfileInt(Settings, StartInTray, m_bStartInTray);AfxGetApp()-WriteProfileInt(Settings, AutoActivate, m_bAutoActivate);AfxGetApp()-WriteProfileInt(Settings, LogLevel, m_nLogLevel);AfxGetApp()-WriteProfileString(Settings, AppName, m_strApplicationName);CDialogResize:OnDestroy();OnView()函数为程序设置模块的日志文件查看函数。当用点击查看日志按钮时,程序设置模块调用OnView()函数打开日志文件。void CConfigurationPage:OnView() int ExecStatus = (UINT)ShellExecute(m_hWnd, open, NOTEPAD.EXE, (LPCTSTR)theApp.m_LogFile.m_FileName, 0, SW_SHOW); switch(ExecStatus) case 0: MessageBox(Systeem is out of Memory,ShellExecute Error,MB_OK | MB_ICONEXCLAMATION); break; case 2: MessageBox(NOTEPAD.EXE is not found !,ShellExecute Error,MB_OK | MB_ICONEXCLAMATION); break; default: if (ExecStatus SendMessage(WM_COMMAND, IDC_APPLY);/ save settingsAfxGetApp()-WriteProfileInt(Settings, Port, m_nPort);AfxGetApp()-WriteProfileInt(Settings, MaxUsers, m_nMaxUsers);AfxGetApp()-WriteProfileInt(Settings, Timeout, m_nTimeout);AfxGetApp()-WriteProfileString(Settings, WelcomeMsg, m_strWelcomeMessage); AfxGetApp()-WriteProfileString(Settings, GoodbyeMsg, m_strGoodbyeMessage); AfxGetApp()-WriteProfileInt(Settings, LaunchOnStartup, m_bLaunchOnStartup);AfxGetApp()-WriteProfileInt(Settings, StartInTray, m_bStartInTray);AfxGetApp()-WriteProfileInt(Settings, AutoActivate, m_bAutoActivate);AfxGetApp()-WriteProfileInt(Settings, LogLevel, m_nLogLevel);AfxGetApp()-WriteProfileString(Settings, AppName, m_strApplicationName);3.4 统计模块统计模块的主要功能为统计历史时间上,服务器各种操作的总量并显示。其统计参数有:总连接用户数,当前在线用户数,文件下载数,文件上传数,文件下载失败数,文件上传失败数,下载文件总量,上传文件总量。其设计方法为:当有用户登录成功后,加一总连接用户数,加一在线用户数;当有用户下线时,减一在线用户数;当有用户下载文件时,加一文件总下载数,下载文件总量加上下载文件大小,如果下载失败,加一下载失败总数;当有上传文件时,加一上传文件总数,上传文件总量加上上传文件大小,如果上传失败,加一上传文件失败总数。其程序设计流程图如图3.4.1所示。图3.4.1 统计模块程序设计流程图Fig. 3.4.1 Statistics module design process flow chart其统计模块运行界面图如图3.4.2所示。图3.4.2 统计模块运行界面图Fig. 3.4.2 Statistics module running interface其程序主要设计代码如下:统计模块程序在其对话框初始化程序OnInitDialog()中,向统计信息显示List控件中添加显示元素。BOOL CStatisticsPage:OnInitDialog() CDialogResize:OnInitDialog();InitResizing(FALSE, FALSE, WS_CLIPCHILDREN);m_StatisticsCtrl.InsertColumn(0, 名称);m_StatisticsCtrl.InsertColumn(1, 值); m_StatisticsCtrl.InsertItem(0, 总连接用户数);m_StatisticsCtrl.SetItemText(0, 1, 0);m_StatisticsCtrl.InsertItem(1, 当前在线用户数);m_StatisticsCtrl.SetItemText(1, 1, 0);m_StatisticsCtrl.InsertItem(2, 下载文件总量);m_StatisticsCtrl.SetItemText(2, 1, 0);m_StatisticsCtrl.InsertItem(3, 上传文件总量);m_StatisticsCtrl.SetItemText(3, 1, 0);m_StatisticsCtrl.InsertItem(4, 下载文件失败数);m_StatisticsCtrl.SetItemText(4, 1, 0);m_StatisticsCtrl.InsertItem(5, 上传文件失败数);m_StatisticsCtrl.SetItemText(5, 1, 0);m_StatisticsCtrl.InsertItem(6, 总上传文件大小);m_StatisticsCtrl.SetItemT
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 解除直播合同协议书范本
- 提分必经之路2025年VFP试题及答案
- 众筹合同协议书合法不
- 入户调查合同协议书
- 乐器培训机构合同协议书
- 2025年嵌入式考试真题及答案
- 占地补偿合同协议书范本
- 联通合同协议书范本大全
- 精细备考MS Office考试试题与答案
- 软件工程项目实施效果评估试题及答案
- 2025年九省联考新高考 英语试卷(含答案解析)
- 盐碱地质量等级评价技术规程
- 农民合作社资产负债表、盈余及盈余分配表、成员权益表
- 2024-2025学年福建省莆田市初三下学期二测模拟一语文试题含解析
- 2022国家电网企业文化、电力与能源战略题库(答案)
- 完整的策划书模板
- 土木工程材料期末考试试题库
- 模拟电子技术基础智慧树知到期末考试答案章节答案2024年北京航空航天大学
- 旅游定制师培训课件
- 中国青光眼指南
- 智慧矿山行业洞察研究报告 2023
评论
0/150
提交评论