李玲玲
摘要:針對(duì)傳統(tǒng)教學(xué)的諸多弊端,開放式教學(xué)的普遍應(yīng)用,伴隨著網(wǎng)絡(luò)技術(shù)的迅猛發(fā)展,帶動(dòng)了教學(xué)和管理方式的改革。網(wǎng)絡(luò)與教學(xué)的結(jié)合,為教學(xué)的發(fā)展提供了更加多元化的發(fā)展空間。該文提出一個(gè)基于C/S架構(gòu)的教學(xué)管理監(jiān)控系統(tǒng),該系統(tǒng)結(jié)構(gòu)清晰,實(shí)用性強(qiáng),具有可擴(kuò)展性。此系統(tǒng)涉及數(shù)據(jù)通信、網(wǎng)絡(luò)教學(xué)、信息管理、屏幕監(jiān)控等功能,在該文中重點(diǎn)講解教學(xué)功能模塊的實(shí)現(xiàn)方法。
關(guān)鍵詞:C/S架構(gòu);教學(xué)管理;監(jiān)控系統(tǒng)
中圖分類號(hào):TP315 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2018)28-0058-02
開放式教學(xué)的普遍應(yīng)用,伴隨著網(wǎng)絡(luò)技術(shù)的迅猛發(fā)展,帶動(dòng)了教學(xué)和管理方式的改革。網(wǎng)絡(luò)與教學(xué)的結(jié)合,為教學(xué)的發(fā)展提供了更加多元化的發(fā)展空間。本文提出一個(gè)基于C/S架構(gòu)的教學(xué)管理監(jiān)控系統(tǒng),此系統(tǒng)主要實(shí)現(xiàn)數(shù)據(jù)通信、網(wǎng)絡(luò)教學(xué)、遠(yuǎn)程協(xié)助、信息管理與分配、屏幕監(jiān)控、交流等功能。
1 總體設(shè)計(jì)
教學(xué)管理與監(jiān)控系統(tǒng)采用C/S通信結(jié)構(gòu),服務(wù)器端主要實(shí)現(xiàn)數(shù)據(jù)通信和網(wǎng)絡(luò)教學(xué)功能,包括信息管理與分配、數(shù)據(jù)監(jiān)控、教學(xué)等功能。系統(tǒng)結(jié)構(gòu)圖如圖1所示??蛻舳说墓δ馨ǖ卿?、注冊(cè)、與服務(wù)器交流等功能。
1.1 教師端功能
教師端主要包括以下幾個(gè)功能模塊:
信息管理模塊:主要包括學(xué)生信息和成績(jī)信息管理,本系統(tǒng)中數(shù)據(jù)庫(kù)使用SQL Server 2008,需要建立用戶信息數(shù)據(jù)庫(kù)表和成績(jī)信息數(shù)據(jù)庫(kù)表,在程序中要實(shí)現(xiàn)數(shù)據(jù)庫(kù)表的管理,比如添加、刪除、修改等操作。
服務(wù)器登錄模塊:服務(wù)器登錄,可以選擇不同的權(quán)限,有教師、管理員、超級(jí)管理員三種權(quán)限。
權(quán)限管理模塊:在服務(wù)器登錄時(shí),可以選擇不同的權(quán)限進(jìn)行登錄,不同的權(quán)限也對(duì)應(yīng)相關(guān)的功能:教師負(fù)責(zé)教學(xué)、學(xué)生管理、成績(jī)管理;管理員可以管理教師信息;超級(jí)管理員可以配置相關(guān)系統(tǒng)的功能。
文件傳輸模塊:要向所有客戶端廣發(fā)文件信息,將服務(wù)器端的文件傳遞到客戶端的指定位置。
投影教學(xué)模塊:投影教學(xué)即教師向所有學(xué)生發(fā)送消息,要求所有學(xué)生的電腦黑屏并且提求所有學(xué)生注意投影。以方便老師教學(xué)。
遠(yuǎn)程協(xié)助模塊:即教師可以遠(yuǎn)端操作學(xué)生機(jī)電腦,以完成對(duì)學(xué)生的幫助和指導(dǎo)。
1.2 學(xué)生端功能
學(xué)生端主要包括以下幾個(gè)功能模塊:
注冊(cè):學(xué)生機(jī)可以在本機(jī)輸入自己的相關(guān)信息,然后向教師發(fā)送注冊(cè)信息,消息格式“長(zhǎng)度|CUC|信息串”,信息將被記錄于教師機(jī)的數(shù)據(jù)庫(kù)。教師收到注冊(cè)信息后,解析出消息內(nèi)容:首先在數(shù)據(jù)庫(kù)中查找是否存在該學(xué)生學(xué)號(hào),如果不存在,則將學(xué)生信息添加至數(shù)據(jù)庫(kù)用戶信息表,并向?qū)W生發(fā)送"3|CUC|YES"。否則,向?qū)W生機(jī)發(fā)送注冊(cè)失敗命令"2|CUC|NO"。
登錄:學(xué)生機(jī)向教師機(jī)發(fā)送登錄命令,教師機(jī)收到登錄命令后,解析出消息中的數(shù)據(jù)(學(xué)號(hào)和密碼);然后根據(jù)學(xué)號(hào)查找數(shù)據(jù)庫(kù),如果數(shù)據(jù)庫(kù)中沒有此學(xué)號(hào),則向?qū)W生機(jī)發(fā)送"3|CUL|SNONO",表示用戶名不存在;如果數(shù)據(jù)庫(kù)中有此學(xué)生,但密碼不正確,則向?qū)W生機(jī)發(fā)送"3|CUL|PASSNO";如果學(xué)號(hào)和密碼都正確,則向?qū)W生機(jī)發(fā)送"3|CUL|YES",表示登錄成功。
下線:學(xué)生機(jī)如果關(guān)閉系統(tǒng),將會(huì)向服務(wù)器發(fā)送"DISCONNECT"消息,教師機(jī)接收到該消息后,提示某學(xué)生下線,并結(jié)束該學(xué)生的通信線程。
2 關(guān)鍵技術(shù)實(shí)現(xiàn)
2.1 創(chuàng)建局域網(wǎng)通信
整個(gè)C/S結(jié)構(gòu)采用SOCKET通信,系統(tǒng)使用VS2008編寫,先創(chuàng)建單文檔項(xiàng)目,并將視圖的基類改為CFormView,這樣可以隨意在VIEW框中增加控件。服務(wù)器需要用到多個(gè)線程,一個(gè)線程負(fù)責(zé)客戶端的連接(登錄和注冊(cè))的操作(設(shè)為線程函數(shù)A);另一個(gè)線程負(fù)責(zé)通信過(guò)程中的數(shù)據(jù)接收與處理(設(shè)為線程函數(shù)B);當(dāng)學(xué)生連接成功后,創(chuàng)建該學(xué)生的數(shù)據(jù)通信線程。線程函數(shù)B會(huì)被引用多次,即會(huì)被創(chuàng)建多個(gè)線程,當(dāng)前有多少學(xué)生在線就會(huì)創(chuàng)建多少個(gè)線程。
接下來(lái)介紹服務(wù)器的創(chuàng)建流程:
使用WSAStartup函數(shù)創(chuàng)建SOCKET版本,或申明一個(gè)連接的開始。
再使用socket或者WSASocket建立流式套接字,返回套接字號(hào)。
bind函數(shù)將套接字與本地地址相連,進(jìn)行綁定。綁定時(shí)要配置相關(guān)結(jié)構(gòu)體(包括IP地址、端口號(hào))SOCKADDR_IN。
使用listen設(shè)置服務(wù)器的監(jiān)控個(gè)數(shù),如:listen(sListeningSocket, LISTEN_LEN);。
利用while(1)的循環(huán),使用accept監(jiān)控客戶端的連接,如果連接成功,則返回客戶端的套接字,用于與客戶端通信。
當(dāng)監(jiān)控到學(xué)生的連接后,需要判斷學(xué)生的登錄信息和注冊(cè)信息。
每監(jiān)控到一個(gè)學(xué)生上線,使用CreateThread創(chuàng)建一個(gè)線程。
關(guān)閉連接: closesocket (套接字);WSACleanup();。
服務(wù)器創(chuàng)建流程圖如圖2所示:
再介紹客戶端的連接流程:
使用WSAStartup函數(shù)創(chuàng)建SOCKET版本,或者申明一個(gè)連接的開始。
再使用socket或者WSASocket建立流式套接字,返回套接字號(hào)。
配置SOCKADDR_IN結(jié)構(gòu)體參數(shù);包括端口,服務(wù)器IP地址等,利用connect函數(shù)去與服務(wù)器建立連接。
連接建立成功后,就可以利用套接字與服務(wù)器進(jìn)行通信,包括發(fā)送數(shù)據(jù)和接收數(shù)據(jù)(send、recv)。
關(guān)閉連接:closesocket(套接字);WSACleanup();。
客戶端創(chuàng)建流程圖如圖3所示:
2.2 投影教學(xué)功能實(shí)現(xiàn)
投影教學(xué)即教師向所有學(xué)生發(fā)送消息,要求所有學(xué)生的電腦黑屏并且提求所有學(xué)生注意投影,以方便老師教學(xué)。投影教學(xué)的流程如下:
教師向所有學(xué)生發(fā)送投影教學(xué)啟動(dòng)命令"2|TP|ON"。
學(xué)生機(jī)接收命令后,調(diào)用相關(guān)窗口進(jìn)行黑屏和文件顯示處理,并鎖定鍵盤和鼠標(biāo)。
當(dāng)教師向?qū)W生發(fā)送投影教學(xué)關(guān)閉命令后"2|TP|OFF",學(xué)生機(jī)操作恢復(fù),屏幕黑屏取消。
2.3 遠(yuǎn)程協(xié)助功能實(shí)現(xiàn)
遠(yuǎn)程協(xié)助包括兩部分的功能:學(xué)生桌面?zhèn)鬏敽蛥f(xié)助兩個(gè)功能。
學(xué)生桌面?zhèn)鬏斄鞒蹋?/p>
教師機(jī)向?qū)W生機(jī)發(fā)送“遠(yuǎn)程協(xié)助”命令:"2|RomteHelp|ON"
學(xué)生機(jī)接收到“遠(yuǎn)程協(xié)助”命令后,學(xué)生機(jī)選擇是否接收協(xié)助,并向教師機(jī)發(fā)送相關(guān)命令。
教師機(jī)如果接收到同意協(xié)助的命令"3|RomteHelp|YES"(如果接收到的命令是不同意,則提示學(xué)生機(jī)不同意"2|RomteHelp|NO"),教師機(jī)先獲取學(xué)生機(jī)的分辨率信息,并向?qū)W生機(jī)發(fā)送桌面分塊,初始化接收桌面數(shù)據(jù)的結(jié)構(gòu)。
學(xué)生機(jī)接收桌面分塊命令后,根據(jù)桌面的分塊,初始化發(fā)送桌面數(shù)據(jù)的結(jié)構(gòu),將記錄桌面每一塊區(qū)域的右上角坐標(biāo)和左下角坐標(biāo),以及該區(qū)域的位圖。
教師機(jī)向?qū)W生機(jī)發(fā)送桌面更新命令"7|RomteHelp |REFRESH",客戶端接收到更新命令后向教師機(jī)傳遞桌面更新的塊數(shù)、更新塊的坐標(biāo)、塊的壓縮信息;同時(shí)教師機(jī)還需要接收更新的塊數(shù)、更新塊的坐標(biāo)、塊的壓縮信息,并解壓縮,然后將塊信息(坐標(biāo)、塊壓縮)存入接收結(jié)構(gòu)鏈表。
在遠(yuǎn)程協(xié)助相關(guān)界面上畫出學(xué)生機(jī)桌面信息,在OnPaint函數(shù)中繪制桌面。
當(dāng)教師機(jī)需要停止遠(yuǎn)程協(xié)助時(shí),發(fā)送"2|RomteHelp|OFF"。
協(xié)助功能流程:
在學(xué)生機(jī)桌面?zhèn)鞯浇處煓C(jī)后,教師可以“操作”該桌面,包括鼠標(biāo)左鍵按下、彈起;右鍵按下、彈起;當(dāng)“桌面”響應(yīng)這些消息后,向?qū)W生端發(fā)送WM開頭的消息。
學(xué)生機(jī)收到WM消息后,根據(jù)不同的消息模擬鼠標(biāo)和鍵盤響應(yīng)。首先將消息解出,消息包括了鼠標(biāo)響應(yīng)的坐標(biāo)。學(xué)生機(jī)將坐標(biāo)取出后,轉(zhuǎn)換成本機(jī)分辨率的坐標(biāo),然后再轉(zhuǎn)換成MOUSE_EVENT函數(shù)對(duì)應(yīng)的坐標(biāo)(0,0 -65535,65535),轉(zhuǎn)換坐標(biāo)后再使用mouse_event模擬出來(lái)。
學(xué)生機(jī)根據(jù)模擬的操作,執(zhí)行操作后,教師機(jī)再發(fā)送桌面更新命令,并再次接收學(xué)生桌面信息存放于GdiREVList鏈表中。
2.4 同步教學(xué)功能的實(shí)現(xiàn)
此功能是遠(yuǎn)程協(xié)助的逆過(guò)程。服務(wù)器是桌面信息發(fā)送方,學(xué)生機(jī)是桌面信息的接收方。同步教學(xué)實(shí)現(xiàn)流程如下:
教師機(jī)向所有學(xué)生發(fā)送同步教學(xué)命令"2|TeachSyn|ON"
學(xué)生機(jī)收到命令后,開始獲取教師機(jī)的分辯率,并向?qū)W生機(jī)發(fā)送桌面分塊,初始化接收桌面數(shù)據(jù)的結(jié)構(gòu)。
教師機(jī)接收桌面分塊命令后,根據(jù)桌面的分塊,初始化發(fā)送桌面數(shù)據(jù)的結(jié)構(gòu),將記錄桌面每一塊區(qū)域的右上角坐標(biāo)和左下角坐標(biāo)以及該塊區(qū)域的位圖。
后面的處理,與遠(yuǎn)程協(xié)助相同。只是由學(xué)生機(jī)發(fā)起更新桌面的命令,教師機(jī)將桌面信息發(fā)送給學(xué)生機(jī)。
教師可以發(fā)送"3|TeachSyn|OFF"命令,關(guān)閉同步教學(xué)。在關(guān)閉同步教學(xué)時(shí),注意要等待SendRegionDisplay函數(shù)執(zhí)行完畢后,再釋放Clear_GdiSend(&GdiSendStart;)。
3 結(jié)束語(yǔ)
值得注意的是,由于整個(gè)C/S通信框架只有一個(gè)SOCKET通信,所以在使用同步教學(xué)時(shí),應(yīng)當(dāng)限制教師向?qū)W生機(jī)發(fā)送信息,更不可在做同步教學(xué)正在進(jìn)行時(shí)發(fā)送遠(yuǎn)程協(xié)助和屏幕監(jiān)控等命令。同樣的道理,遠(yuǎn)程協(xié)助或屏幕監(jiān)控正在進(jìn)行時(shí),也應(yīng)該限制其他消息的發(fā)送,包括學(xué)生端的。這可以避免消息的沖突。在本文中主要介紹了教學(xué)管理監(jiān)控系統(tǒng)中的教學(xué)功能,后續(xù)再詳細(xì)介紹系統(tǒng)中的管理監(jiān)控系統(tǒng)。
參考文獻(xiàn):
[1] 周瑞玲,肖發(fā)新.基于C/S和B/S混合模式的教學(xué)管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].辦公自動(dòng)化,2009(152).
[2] 張夢(mèng)蝶.基于C/S模式的軟件工程網(wǎng)絡(luò)教學(xué)系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[D].成都:電子科技大學(xué),2012.
[3] 雷雪.基于C/S模式的遠(yuǎn)程監(jiān)控系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[D].北京:北京郵電大學(xué), 2011.
【通聯(lián)編輯:梁書】