熊辉 陈晶晶 王焱
摘 要: 为了营造良好的机房教学氛围,提高教学质量与效率,研究了基于局域网的进程控制系统。介绍了软件的一些关键技术,并对基于局域网的进程控制软件的理论和技术进行了深入研究。通过运用MFC开发技术,Windows消息驱动技术、ADO和套接字通信技术,采用C/S模式的系统体系结构,实现了满足机房需求的基于局域网的进程控制。
关键词: MFC; SOCKET; 消息驱动; 进程控制; C/S模式
中图分类号:TP311 文献标志码:A 文章编号:1006-8228(2015)11-16-03
Abstract: In order to create a good teaching atmosphere and improve the teaching quality and efficiency, the process control system based on LAN is studied. Some key technologies of software are introduced, and the theory and technology of process control software based on LAN are studied in this paper. Through the use of MFC development technology, Windows message-driven technology, ADO and socket communication technology, the C/S system architecture mode is adopted, and the process control system based on local area network is realized.
Key words: MFC; socket; message-driven; process control; C/S mode
0 引言
随着计算机的普及和计算机网络技术的迅速发展,信息化、自动化已经成为了这个时代的主题。其中网络应用程序发展和应用更是为人们的生活、工作和娱乐等各方面提供了极大的便利。在各类网络应用技术中,套接字无疑是网络应用程序中极其重要的一环,它是连接应用程序和网络通信协议的接口,windows socket就是其中一种。营造良好的机房教学氛围、合理组织与管理机房教学,进而提高机房教学的质量和效率,是众多教育机构亟待解决的问题。非教学进程(如游戏等)的普及与泛滥,更是对机房的教学管理提出了严峻的挑战。一个完备的局域网进程控制系统不仅可以大大提高教学效率,还能促进学习者的学习。因此,设计一个基于套接字的局域网进程控制系统既具有理论研究的意义,又具有实际意义。
本系统设计采用C/S结构设计,服务器端与客户端软件通过套接字通信技术控制指令的传输,客户端通过定时扫描客户机上正在运行的软件信息,并通过查询数据库来判断软件可否运行,服务器端可以开启或关闭客户端的监控功能,也可以修改数据库中的信息。作为在机房环境下运行的软件,需要应对复杂的网络环境,该软件需要具有健全的异常处理能力和灵活的可移植性。
1 系统设计
1.1 系统架构设计
机房实验教学系统的总体框架结构可划分为两大模块,即服务器模块和客户端模块。本系统设计采用C/S结构设计,服务器端与客户端软件通过套接字通信技术进行控制指令的传输,客户端通过定时扫描客户机上正在运行的软件信息,并通过查询数据库来判断软件可否运行,服务器端可以开启或关闭客户端的监控功能,也可以修改数据库中的信息。
1.2 系统功能设计
1.2.1 服务器端功能模块描述
服务器端包括登录、数据库连接、套接字连接、软件信息操作、远程控制、界面设计六部分。用户通过登录对话框输入用户名和密码,经验证与数据库数据一致方可登录,当连接不正确时需要提供修改连接数据库相关的配置信息。本系统数据库采用ADO(Active Data Object)技术连接SQL Server 2000数据库,负责数据库的连接,数据库的增删改查等操作,并进行异常处理。服务器端使用套接字向客户端发送必要的配置信息(网络数据库的地址,登录用户和密码),通过特定指令开启客户端的屏蔽功能。
1.2.2 客户端功能模块描述
服务器端包括界面设计、开机自启动、数据库连接、套接字连接、软件信息扫描、监控六部分。其中界面设计实现隐藏界面,在任务管理器中应用程序中隐藏的功能;开机自启动通过修改注册表使程序开机自动启动;数据库连接采用ADO技术连接SQL Server 2008数据库,负责数据库的连接,数据库的增删改查等操作,并进行异常处理;套接字连接通过套接字接收服务器发送的配置信息(网络数据库的地址,登录用户和密码),接收到服务器的消息后开启监控服务;软件信息扫描每隔一段时间扫描当前正在运行的顶层窗口,获取窗口类和标题。通过查找数据库确认该窗口是否允许运行。如果在数据库中查找不到该窗口的信息,就将该条信息插入到数据库中,并通过套接字通知服务器端数据库有更新。
根据上述系统说明,设计出系统功能结构如图1。
[基于局域网的进程控制软件][服务器端][客户端][登录\&数据库连接\&套接字连接\&软件信息操作\&远程控制\&界面设计\&][开机自启动\&界面设计\&套接字连接\&数据库连接\&软件信息扫描\&监控\&]
图1 系统功能结构图
2 系统实现的关键技术
本系统开发采用了MFC编程技术[1]、套接字技术[2]和ADO数据库访问技术[3]这三个非常流行和成熟的技术。下面主要介绍程序设计、服务器端功能的实现和客户端功能的实现所涉及到的关键技术。
2.1 程序设计
该系统在MFC应用程序框架的基础上设计实现,其中大部分功能仍是通过调用最基本的Win32 API来实现。程序的进行是依靠外部事件来驱动,Windows时刻监视用户的一举一动,并分析用户的动作,将用户的动作以消息的形式发送给对应的程序,应用程序从消息队列中去除消息并分析,采取适当的动作来响应用户的操作[4]。
2.2 服务器端功能的实现
2.2.1 界面设计
界面框架的选择主要有两种方式:基于单文档的程序和基于对话框类型的程序。结合这两种框架的优缺点,本软件的服务器端需要与管理员(教师)进行较多的交互,对数据的处理由数据库负责,因此选择基于对话框的框架更适合。
⑴ 主界面设计
用户登录成功后显示主界面,列表每行前有一个勾选框,选中表示该类软件禁止运行,未选中表示允许运行。对列表中的信息进行修改后点击刷新按钮将修改的内容更新到数据库中。点击开启按钮通知客户端开启监控功能,点击应用按钮通知客户端数据库有更新,应用按钮初始化为不可用,当单击开启按钮后,才使应用按钮可用。用户也可以在右上角的编辑框中输入关键词从数据库中搜索类似的软件信息并且在列表中显示。
⑵ 用户管理界面
采用模态对话框形式显示用户管理界面对话框,如果登录用户为管理员,则可以对用户信息进行管理。如果登录用户为普通用户则只可以修改自己的用户信息。
2.2.2 登录
运行本软件后首先弹出该登录对话框,对应CLoginDlg类。通过单击设置按钮可以显示查看更多内容,并可以对相关信息进行修改,数据库地址、数据库登录名、数据库密码、广播地址、本地端口和客户端端口的内容初始读取自ini配置文件,当通过该对话框对内容进行了修改后也及时修改该ini配置文件。当单击登录按钮后首先检查登录名和密码是否填写,如果未填写则需提示用户。符合要求后可以登录,如果连接数据库出现异常,将弹出设置对话框。连接成功后,查找用户表,如果找到该用户并且密码正确则登录成功,该登录对话框关闭,弹出主界面,否则提示用户名或密码错误。
2.2.3 数据库连接
采用ADO技术连接网络数据库SQL 2000,通过对象模型Connection从应用程序中访问数据源,连接时所使用的用户名和口令等信息从配置文件中读取。通过对象模型Command对已建立连接的数据源进行指定的操作。通过对象模型Recordset将查询结果存储在本地,这些数据以行为单位。在默认情况下,Visual C++不支持ADO对象,要在程序中使用ADO对象,需要使用#import命令将ADO库文件msado15.dll导入到工程中。通过该库中的_ConnectionPtr、_CommandPtr、_RecordserPtr三种接口为数据库的连接、增加、删除、查找和修改提供接口。数据库的连接应遵循最迟连接和最早断开的原则[5]。异常处理方式为等待用户修改连接字。
2.2.4 套接字通信
本软件采用基于套接字进行通信,用于客户机与服务器端软件信息的及时交流,控制。套接字类型采用符合Windows消息驱动特性的网络事件异步选择机制的类型,基于消息驱动机制的异步程序,基于套接字通信中,套接字的接收处理时一个阻塞函数,因此如果没有接收到消息,该函数会处于等待状态而不会马上返回,使整个程序阻塞[6]。
2.2.5 软件信息操作
通过数据库连接对象将结果插入到LISTCTRL控件中,连接采用recordset提供的open函数,该方式的效率比connection连接方式快。控件提供CHECKBOX风格,结果中表示已禁止的行为勾选状态,是用户通过点击checkbox设置是否禁止该项。由于LISTCTRL控件支持的编辑功能只对第一列有效,因此通过获取鼠标双击区域的行列号并在该位置覆盖一个编辑框达到类似效果。列表中类型列的设置采用弹出菜单的方式,使用户通过鼠标方便的为软件分类。
2.3 客户端功能的实现
本软件客户端需要隐藏自己的主界面,目的是让用户无法关闭该程序, 软件的主窗口在初始化时被设置为SW_HIDE风格。当软件运行时,在任务栏和任务管理器中的应用程序中都看不到该软件。软件会采用开机自启动,把程序拷贝到系统目录,并改名为NETMANAGE.EXE。和服务器采用相同的方式连接数据库。异常处理方式为重新运行程序并等待服务器指令。采用与服务器相同类型的套接字,为使服务器和客户端能在同一机器上运行,绑定的端口号应与服务器的不一样。应用程序每秒扫描一次,为提高系统的执行效率,不采用遍历所有桌面窗口的方式,考虑到扫描频率和机房电脑的数量,本系统只扫描正在运行的桌面顶层窗口。为进一步减少数据库的访问,当检测到当前顶层窗口和上一秒是相同的,则表示该窗口未被禁止,因此不再继续访问数据库。当窗口发生变化时重新开始访问并查找数据库。当未查询到相关信息时,采用乐观加锁的方式将该信息插入到数据库当中,即仅在调用Update方法时锁定记录[7]。
3 结束语
通过一系列的测试表明,本软件能在局域网中有效地发现客户端上运行的程序,服务端经过设置后能有效的控制客户端上所运行的进程,从而控制了客户端的进程应用,在一定程度上提高了局域网内的管理质量和学习氛围。该软件的创新性在于,其对网络连接的灵活性、网络控制的方便性和完善的异常处理能力。
该软件通过定时扫描顶层窗口的方式来控制进程,这并不是最优的解决方式。另外,该软件通过获取窗口类名和窗口标题来区别软件信息,一少部分软件特别是系统程序仅通过这两项很难理解其是什么软件,需要通过查阅资料才能了解。但目前,用已知的方式对此改进,需要大量的数据处理。我们将继续研究,寻找更好的解决办法。
参考文献(References):
[1] 姚领田.精通MFC程序设计[M].人民邮电出版社,2006.
[2] 施炜,李铮,秦颍.Windows Sockets 规范及应用-Windows网
络编程接口[M].电子工业出版社,1996.
[3] 刘浩.Visual C++ SQL Server 数据库应用实例完全解析[M].
人民邮电出版社,2006.
[4] 袁翔.Visual C++实践与提高系列丛书——网络编程篇[M].
人民铁道出版社,2001.
[5] 王珊.数据库系统概论[M].高等教育出版社,2006.
[6] 叶树华.网络编程实用教程[M].人民邮电出版社,2010.
[7] 郑若忠.数据库原理[M].国防科技大学出版社,1998.