熊輝 陳晶晶 王焱
摘 要: 為了營造良好的機房教學氛圍,提高教學質量與效率,研究了基于局域網的進程控制系統(tǒng)。介紹了軟件的一些關鍵技術,并對基于局域網的進程控制軟件的理論和技術進行了深入研究。通過運用MFC開發(fā)技術,Windows消息驅動技術、ADO和套接字通信技術,采用C/S模式的系統(tǒng)體系結構,實現了滿足機房需求的基于局域網的進程控制。
關鍵詞: 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 引言
隨著計算機的普及和計算機網絡技術的迅速發(fā)展,信息化、自動化已經成為了這個時代的主題。其中網絡應用程序發(fā)展和應用更是為人們的生活、工作和娛樂等各方面提供了極大的便利。在各類網絡應用技術中,套接字無疑是網絡應用程序中極其重要的一環(huán),它是連接應用程序和網絡通信協議的接口,windows socket就是其中一種。營造良好的機房教學氛圍、合理組織與管理機房教學,進而提高機房教學的質量和效率,是眾多教育機構亟待解決的問題。非教學進程(如游戲等)的普及與泛濫,更是對機房的教學管理提出了嚴峻的挑戰(zhàn)。一個完備的局域網進程控制系統(tǒng)不僅可以大大提高教學效率,還能促進學習者的學習。因此,設計一個基于套接字的局域網進程控制系統(tǒng)既具有理論研究的意義,又具有實際意義。
本系統(tǒng)設計采用C/S結構設計,服務器端與客戶端軟件通過套接字通信技術控制指令的傳輸,客戶端通過定時掃描客戶機上正在運行的軟件信息,并通過查詢數據庫來判斷軟件可否運行,服務器端可以開啟或關閉客戶端的監(jiān)控功能,也可以修改數據庫中的信息。作為在機房環(huán)境下運行的軟件,需要應對復雜的網絡環(huán)境,該軟件需要具有健全的異常處理能力和靈活的可移植性。
1 系統(tǒng)設計
1.1 系統(tǒng)架構設計
機房實驗教學系統(tǒng)的總體框架結構可劃分為兩大模塊,即服務器模塊和客戶端模塊。本系統(tǒng)設計采用C/S結構設計,服務器端與客戶端軟件通過套接字通信技術進行控制指令的傳輸,客戶端通過定時掃描客戶機上正在運行的軟件信息,并通過查詢數據庫來判斷軟件可否運行,服務器端可以開啟或關閉客戶端的監(jiān)控功能,也可以修改數據庫中的信息。
1.2 系統(tǒng)功能設計
1.2.1 服務器端功能模塊描述
服務器端包括登錄、數據庫連接、套接字連接、軟件信息操作、遠程控制、界面設計六部分。用戶通過登錄對話框輸入用戶名和密碼,經驗證與數據庫數據一致方可登錄,當連接不正確時需要提供修改連接數據庫相關的配置信息。本系統(tǒng)數據庫采用ADO(Active Data Object)技術連接SQL Server 2000數據庫,負責數據庫的連接,數據庫的增刪改查等操作,并進行異常處理。服務器端使用套接字向客戶端發(fā)送必要的配置信息(網絡數據庫的地址,登錄用戶和密碼),通過特定指令開啟客戶端的屏蔽功能。
1.2.2 客戶端功能模塊描述
服務器端包括界面設計、開機自啟動、數據庫連接、套接字連接、軟件信息掃描、監(jiān)控六部分。其中界面設計實現隱藏界面,在任務管理器中應用程序中隱藏的功能;開機自啟動通過修改注冊表使程序開機自動啟動;數據庫連接采用ADO技術連接SQL Server 2008數據庫,負責數據庫的連接,數據庫的增刪改查等操作,并進行異常處理;套接字連接通過套接字接收服務器發(fā)送的配置信息(網絡數據庫的地址,登錄用戶和密碼),接收到服務器的消息后開啟監(jiān)控服務;軟件信息掃描每隔一段時間掃描當前正在運行的頂層窗口,獲取窗口類和標題。通過查找數據庫確認該窗口是否允許運行。如果在數據庫中查找不到該窗口的信息,就將該條信息插入到數據庫中,并通過套接字通知服務器端數據庫有更新。
根據上述系統(tǒng)說明,設計出系統(tǒng)功能結構如圖1。
[基于局域網的進程控制軟件][服務器端][客戶端][登錄\&數據庫連接\&套接字連接\&軟件信息操作\&遠程控制\&界面設計\&][開機自啟動\&界面設計\&套接字連接\&數據庫連接\&軟件信息掃描\&監(jiān)控\&]
圖1 系統(tǒng)功能結構圖
2 系統(tǒng)實現的關鍵技術
本系統(tǒng)開發(fā)采用了MFC編程技術[1]、套接字技術[2]和ADO數據庫訪問技術[3]這三個非常流行和成熟的技術。下面主要介紹程序設計、服務器端功能的實現和客戶端功能的實現所涉及到的關鍵技術。
2.1 程序設計
該系統(tǒng)在MFC應用程序框架的基礎上設計實現,其中大部分功能仍是通過調用最基本的Win32 API來實現。程序的進行是依靠外部事件來驅動,Windows時刻監(jiān)視用戶的一舉一動,并分析用戶的動作,將用戶的動作以消息的形式發(fā)送給對應的程序,應用程序從消息隊列中去除消息并分析,采取適當的動作來響應用戶的操作[4]。
2.2 服務器端功能的實現
2.2.1 界面設計
界面框架的選擇主要有兩種方式:基于單文檔的程序和基于對話框類型的程序。結合這兩種框架的優(yōu)缺點,本軟件的服務器端需要與管理員(教師)進行較多的交互,對數據的處理由數據庫負責,因此選擇基于對話框的框架更適合。
⑴ 主界面設計
用戶登錄成功后顯示主界面,列表每行前有一個勾選框,選中表示該類軟件禁止運行,未選中表示允許運行。對列表中的信息進行修改后點擊刷新按鈕將修改的內容更新到數據庫中。點擊開啟按鈕通知客戶端開啟監(jiān)控功能,點擊應用按鈕通知客戶端數據庫有更新,應用按鈕初始化為不可用,當單擊開啟按鈕后,才使應用按鈕可用。用戶也可以在右上角的編輯框中輸入關鍵詞從數據庫中搜索類似的軟件信息并且在列表中顯示。
⑵ 用戶管理界面
采用模態(tài)對話框形式顯示用戶管理界面對話框,如果登錄用戶為管理員,則可以對用戶信息進行管理。如果登錄用戶為普通用戶則只可以修改自己的用戶信息。
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消息驅動特性的網絡事件異步選擇機制的類型,基于消息驅動機制的異步程序,基于套接字通信中,套接字的接收處理時一個阻塞函數,因此如果沒有接收到消息,該函數會處于等待狀態(tài)而不會馬上返回,使整個程序阻塞[6]。
2.2.5 軟件信息操作
通過數據庫連接對象將結果插入到LISTCTRL控件中,連接采用recordset提供的open函數,該方式的效率比connection連接方式快??丶峁〤HECKBOX風格,結果中表示已禁止的行為勾選狀態(tài),是用戶通過點擊checkbox設置是否禁止該項。由于LISTCTRL控件支持的編輯功能只對第一列有效,因此通過獲取鼠標雙擊區(qū)域的行列號并在該位置覆蓋一個編輯框達到類似效果。列表中類型列的設置采用彈出菜單的方式,使用戶通過鼠標方便的為軟件分類。
2.3 客戶端功能的實現
本軟件客戶端需要隱藏自己的主界面,目的是讓用戶無法關閉該程序, 軟件的主窗口在初始化時被設置為SW_HIDE風格。當軟件運行時,在任務欄和任務管理器中的應用程序中都看不到該軟件。軟件會采用開機自啟動,把程序拷貝到系統(tǒng)目錄,并改名為NETMANAGE.EXE。和服務器采用相同的方式連接數據庫。異常處理方式為重新運行程序并等待服務器指令。采用與服務器相同類型的套接字,為使服務器和客戶端能在同一機器上運行,綁定的端口號應與服務器的不一樣。應用程序每秒掃描一次,為提高系統(tǒng)的執(zhí)行效率,不采用遍歷所有桌面窗口的方式,考慮到掃描頻率和機房電腦的數量,本系統(tǒng)只掃描正在運行的桌面頂層窗口。為進一步減少數據庫的訪問,當檢測到當前頂層窗口和上一秒是相同的,則表示該窗口未被禁止,因此不再繼續(xù)訪問數據庫。當窗口發(fā)生變化時重新開始訪問并查找數據庫。當未查詢到相關信息時,采用樂觀加鎖的方式將該信息插入到數據庫當中,即僅在調用Update方法時鎖定記錄[7]。
3 結束語
通過一系列的測試表明,本軟件能在局域網中有效地發(fā)現客戶端上運行的程序,服務端經過設置后能有效的控制客戶端上所運行的進程,從而控制了客戶端的進程應用,在一定程度上提高了局域網內的管理質量和學習氛圍。該軟件的創(chuàng)新性在于,其對網絡連接的靈活性、網絡控制的方便性和完善的異常處理能力。
該軟件通過定時掃描頂層窗口的方式來控制進程,這并不是最優(yōu)的解決方式。另外,該軟件通過獲取窗口類名和窗口標題來區(qū)別軟件信息,一少部分軟件特別是系統(tǒng)程序僅通過這兩項很難理解其是什么軟件,需要通過查閱資料才能了解。但目前,用已知的方式對此改進,需要大量的數據處理。我們將繼續(xù)研究,尋找更好的解決辦法。
參考文獻(References):
[1] 姚領田.精通MFC程序設計[M].人民郵電出版社,2006.
[2] 施煒,李錚,秦潁.Windows Sockets 規(guī)范及應用-Windows網
絡編程接口[M].電子工業(yè)出版社,1996.
[3] 劉浩.Visual C++ SQL Server 數據庫應用實例完全解析[M].
人民郵電出版社,2006.
[4] 袁翔.Visual C++實踐與提高系列叢書——網絡編程篇[M].
人民鐵道出版社,2001.
[5] 王珊.數據庫系統(tǒng)概論[M].高等教育出版社,2006.
[6] 葉樹華.網絡編程實用教程[M].人民郵電出版社,2010.
[7] 鄭若忠.數據庫原理[M].國防科技大學出版社,1998.