〔摘 要〕提出了一種基于客戶機/服務器模式的圖書館服務器遠程管理系統(tǒng)的設計方法,它采用WinSocket信息訪問技術,設計出客戶端和服務器端兩個子系統(tǒng),給出了數(shù)據(jù)流圖、實體關系圖、功能模塊圖和程序流程圖及其部分關鍵代碼。系統(tǒng)可在機房無人值守時對服務器進行遠程監(jiān)控和維護,保障網(wǎng)絡系統(tǒng)的正常運行。
〔關鍵詞〕服務器遠程管理;WinSocket;客戶端/服務器模式;系統(tǒng)設計
〔中圖分類號〕G250.71 〔文獻標識碼〕B 〔文章編號〕1008-0821(2009)01-0078-04
Design and Realization of Server Remote Management System of Library
Yin Feng Chen Shunping Zhou Qianwei
(Library,Changsha University,Changsha 410003,China)
〔Abstract〕A design method of remote management system of library server which based C/S model was introduced in this paper.Two subsystem which included client system and server system by using winsocket technology was designed.Otherwise,the data flow graph and the entity relational graph,the functional module chart and the program flow diagram and the part essential code were given in this paper.The server could be monitored and maintenanced when nobody in computer room in order to ensure normal operation of network.
〔Key words〕server remote management;WinSocket;C/S;system design
目前遠程控制技術顯得越來越重要[1]。如:遠程計算機維護、移動辦公、遠程教學等等。高校圖書館服務器儲藏了大量豐富的數(shù)字資源,維護其正常運行非常重要。利用遠程管理技術可在機房無人值守時對服務器進行監(jiān)控和維護,以滿足廣大讀者查詢文獻信息的需要[2]。本文利用基于TCP/IP網(wǎng)絡協(xié)議的Socket通信技術設計了一個遠程服務器管理系統(tǒng),能夠有效監(jiān)控服務器的運行狀態(tài),確保圖書館信息網(wǎng)絡系統(tǒng)的正常服務。
1 系統(tǒng)開發(fā)原理
本文采用Microsoft Visual C++ 6.0作為開發(fā)工具,因為VC++ 6.0中有關網(wǎng)絡通信的Socket API函數(shù)豐富,功能強大,完全能夠實現(xiàn)設計要求[3]。
Socket(套接字)的原意是插座。在Socket下編程,應用程序一旦申請到一個Socket,就相當于獲得一個與其他應用程序通信的輸入輸出接口,而該應用程序到底與哪個應用程序通信,取決于其IP地址[4]。執(zhí)行跨機應用進程時要在網(wǎng)絡的每一端建立套接字,2個套接字之間建立連接后,就可以通過套接字的“讀”、“寫”操作實現(xiàn)網(wǎng)絡通信功能。Socket接口介于應用程序與硬件之間,它可以提供標準函數(shù)以符合不同的網(wǎng)絡硬件規(guī)格[5]。
對Socket的理解可以簡化為:它是封裝了數(shù)據(jù)流(Stream)的從機器到機器的一條軟接線。通過這條軟接線,并借助于線兩端的收發(fā)程序,網(wǎng)絡上的機器間實現(xiàn)了信息的交流與互通。分離在服務器端和客戶端的應用程序可以通過調用Socket接口來執(zhí)行預定的功能。所以,Socket接口的介入使得開發(fā)分布式應用程序變得更為簡單。
套接字(socket)在網(wǎng)絡軟件設計中有著極大的應用。如果把機器比作房間,那么創(chuàng)建了Socket(套接字)的程序就是房間的后門[6]。只要了解該Socket接收數(shù)據(jù)的協(xié)議(后門的鑰匙),就可以輕松地打開房門而進入該房間。為了網(wǎng)絡信息服務的安全,我們有必要在服務器端控制來自客戶的信息訪問行為。Socket正是迎合這種需求而被廣泛應用的一種網(wǎng)絡信息訪問技術。
2 系統(tǒng)分析
2.1 數(shù)據(jù)流分析
系統(tǒng)的數(shù)據(jù)傳遞(流動)是以建立了連接的客戶端和服務器端為前提的。服務器端程序運行后時刻處于監(jiān)聽狀態(tài),一旦有客戶端的連接請求,它就會去接收,并生成一個與來訪客戶端傳送信息的Socket通信接口。利用這一特性,我們可以在客戶端界面設計一些按鈕,設置好自己感興趣的各種服務器信息參數(shù),然后點擊按鈕要求服務器執(zhí)行一些遠程操作,就如同在本地操作服務器一樣。點擊事件發(fā)生后,客戶端捕捉這一消息并記錄下來,然后生成相應的命令消息并保存于臨時緩沖區(qū)。當協(xié)議要發(fā)送信息時,就把臨時緩沖區(qū)的內容放到緩沖區(qū)并完成發(fā)送。服務器端通過協(xié)議把客戶端發(fā)送過來的內容收存到接收緩沖區(qū),然后分析緩沖區(qū)內的命令參數(shù),進行相應的處理。其執(zhí)行結果反饋給客戶端顯示。這樣,一次通信過程就順利完成了。下面是系統(tǒng)的數(shù)據(jù)流圖(圖1)。
2.2 實體關系分析
系統(tǒng)的實體可分為客戶端和服務端兩個。雙方都有接收/發(fā)送緩沖區(qū),通信用的Socket接口,通信端口等。不同的是,服務端有一個監(jiān)聽用的Socket對象、IP地址、命令解析器等;客戶端有命令請求接收器(也叫消息池),并且一個服務端可以同時連接多個與之匹配的相應客戶端。因此它們之間的關系是一對多的關系。系統(tǒng)的基本ER圖如圖2所示。
3 系統(tǒng)設計與實現(xiàn)
3.1 系統(tǒng)結構設計
系統(tǒng)分為4個模塊,即管理員登錄模塊,文件上傳、下載模塊,進程管理模塊和顯示服務器參數(shù)模塊。主要采用Winsocket編程接口來實現(xiàn)客戶端和服務器之間的通信,用到的數(shù)據(jù)結構有文件屬性結構、進程信息結構、鼠標信息結構等。系統(tǒng)要求先運行服務端程序,服務端程序主要是用SDK開發(fā),沒有具體的界面,是隱藏運行的。它有一個總(入口)開關函數(shù)負責客戶端發(fā)送的命令消息的解析分解和分發(fā)處理??蛻舳擞杏脩舻卿浗缑妫褂谜咻斎牒戏ǖ挠脩裘兔艽a才能登錄到客戶端,接下來才有可能實現(xiàn)對服務器的有效控制。菜單命令接口有文件上傳、下載,運行服務器上的程序或者打開文件等。
管理員登錄模塊主要是驗證用戶身份的合法性。文件上傳和下載是有效的管理服務器資源的一個最基本的途徑。進程管理模塊的主要功能是在本地客戶端上用一個窗口顯示遠程服務器端上運行者的進程,并能對進程進行實時的觀察監(jiān)控,能對進程進行一些相應的管理,如暫停、結束等操作,能向服務器的屏幕上寫一些文本信息,能控制服務器端鼠標的鎖定與解鎖,駕馭服務器上相關程序、文件的打開或者運行。顯示服務器參數(shù)模塊主要是顯示當前正在運行的系統(tǒng)服務器端的一些計算機情況和操作系統(tǒng)信息等等,基本上是一些與遠程服務器狀態(tài)息息相關的的參數(shù)信息。
系統(tǒng)實現(xiàn)的主要技術難點在于怎樣定義合理的數(shù)據(jù)結構來完成各種信息的傳遞與接收,因為文件的上傳、下載涉及到文件格式的一致性問題。系統(tǒng)功能模塊如圖3所示。
3.2 客戶端設計
客戶端設計思路如流程圖(圖4)所示。
客戶端部分關鍵代碼如下:
void CZclientDlg::OnBtnProcess()
{ ∥進程管理按鈕點擊事件消息響應函數(shù)
UpdateData(TRUE);
BeginWaitCursor();
if(!pProcessDlg)
{ pProcessDlg=new CProcessManageDlg(this);
pProcessDlg->Create(IDD_DIALOG_PROCESSMANAGER,this);
pProcessDlg->ShowWindow(SW_HIDE);
}
else
{ pProcessDlg->m_ctlProcess.ResetContent(); }
strcpy(chrMission,″ \\0″);∥為命令留出一位(見readme文件)
chrMission[0]=16;∥設置命令
if(!ConnectSocket())
{ AfxMessageBox(″無法連接″);
return;
}
send(sktClient,chrMission,300,0);
MyProcessInfo ProcessInfo;
recv(sktClient,(char *)ProcessInfo,sizeof(MyProcessInfo),0);
int nprocesscnt=0;∥統(tǒng)計服務器上的進程個數(shù)
while(ProcessInfo.bIsNext)
{ nprocesscnt++;
int index=pProcessDlg->m_ctlProcess.AddString(ProcessInfo.szExeFile);
pProcessDlg->m_ctlProcess.SetItemData(index,ProcessInfo.th32ProcessID);
recv(sktClient,(char *)ProcessInfo,sizeof(MyProcessInfo),0);
}
char buffer[20];
itoa(nprocesscnt,buffer,10);∥把整型進程數(shù)轉換成CString類型
pProcessDlg->SetDlgItemText(IDC_EDIT_COUNT,buffer);
pProcessDlg->ShowWindow(SW_SHOW);
pProcessDlg->SetActiveWindow();
pProcessDlg->SetFocus();
pProcessDlg->pDlg=this;
}
3.3 服務端設計
服務端程序要先于客戶端程序運行,它負責監(jiān)聽客戶端的連接請求和服務請求,為每一個有訪問(這里具體為控制和管理)需求的客戶端提供一個通信接口(這里具體為一個Socket對象),預備工作做完了,之后就是相互之間的數(shù)據(jù)、消息等的發(fā)送和接收,以及命令的執(zhí)行和結果的反饋。服務端設計思路如流程圖(圖5)所示。由于篇幅所限,代碼略去。
4 結 語
以上介紹了服務器遠程管理系統(tǒng)的設計思路及其過程。本文設計的客戶端是有具體運行界面的,主要用于實施各種對遠程服務器的操作,比如終止可疑進程的運行,打開服務器上的文件或運行應用程序等。服務器端程序是一個隱藏運行的后臺進程,主要技術用到了基于TCP/IP協(xié)議的WinSock網(wǎng)絡編程接口,利用它可以與遠程計算機建立連接,并實現(xiàn)向服務器屏幕發(fā)送消息、捕捉屏幕、文件傳輸和進程管理等功能。客戶端可以實時了解當前表征服務器的運行狀態(tài)的一些參數(shù),如磁盤和內存等物理硬件的使用情況,當前運行的進程的有用信息,CPU使用率等。應用本文介紹的原理及方法,可設計出適用一般網(wǎng)絡管理的服務器遠程控制系統(tǒng)。
參考文獻
[1]朱曉蕾,余達太,孫昌國,等.基于客戶/服務器模式的遠程控制系統(tǒng)[J].計算機工程與設計,2004,25(5):51-53.
[2]孫鑫,余安萍.VC++深入詳解[M].北京:電子工業(yè)出版社,2006:523-556.
[3]馬安鵬.Visual C++ 6程序設計導學[M].北京:清華大學出版社,2002:180-200.
[4]雷斌,等.Visual C++ 6.0網(wǎng)絡編程技術[M].北京:人民郵電出版社,2000:33-43.
[5]陳偉,等.Visual C++網(wǎng)絡高級編程[M].北京:人民郵電出版社,2001:19-31,69-74.
[6]譚術,郭聰輝.遠程控制與攻擊技術揭秘[M].北京:家庭電腦世界出版社,2004:117-145,189-194.