姚茂群
[摘要]主要介紹利用delphi開發工具軟件進行的一種軟件設計過程,并對設計中關鍵技術WIN32 API、管道、進程操作api、indy網絡開發套件以及網絡多線程的使用進行闡述。
[關鍵詞]DelphiWIN32 APIindy網絡開發套件多線程
中圖分類號:TP3文獻標識碼:A文章編號:1671-7597(2009)0710028-01
一、引言
隨互聯網的日益普及,各學校加大計算機硬件設備投入,給機房管理人員對服務器的維護和管理較大的壓力和負擔。為此,本文介紹的這種軟件就是針對這種情況而進行設計的,它使得機房管理人員無論在任何時候以及任何位置,只要有一臺連接互聯網的計算機就可以隨時登錄需要維護的服務器進行維護,極大地方便和減輕了管理人員的工作壓力。
二、系統開發環境
系統是在美國BORLAND公司的計算機語言開發系統Delphi7.0上進行開發的。能夠在Windows 98、Windows NT、Windows XP、Windows 2003環境下運行。
三、系統功能設計(總體設計)
系統的功能分為兩大部分:服務器端和客戶端。
1.服務器端主要功能。服務器端主要用來接收客戶端發來的請求,并對接收的請求進行分析,對符合條件的請求給予響應。主要功能如下:
(1)自啟動模塊:控制軟件隨Windows啟動。(2)服務器端管理模塊:設置連接密碼,啟動和停止服務功能。(3)日志顯示模塊:顯示客戶端的操作日志。(4)請求分析模塊:響應客戶端的請求,調用正確的響應程序。(5)響應密碼驗證模塊:判斷是否允許對客戶端控制。(6)響應遠程文件操作模塊:通過請求分析程序調用正確的具體文件操作程序。(7)響應遠程命令行模塊:獲得指定dos命令的執行結果,并把結果發送到客戶端。(8)響應遠程進程管理模塊:獲得進程列表,停止指定的進程,并把結果發送到客戶端。(9)響應遠程服務管理模塊:獲得服務列表,啟動和停止服務,并把結果發送到客戶端。(10)文字通訊模塊:接收客戶端信息,發送用戶輸入的信息。
2.客戶端主要功能。客戶端主要是用戶向服務器端發出需要服務的請求,等待服務器端的回應。主要功能有:
(1)網絡連接模塊:連接和斷開服務器端。(2)本地文件管理模塊:顯示文件列表、刪除文件或者目錄、重命名、新建目錄。(3)遠程文件管理模塊:與服務器端進行交互,管理服務器端的文件。(4)本地命令行模塊:執行指定的dos命令,并顯示結果。(5)遠程命令行:與服務器端進行交互,在客戶端顯示指定dos命令,在服務器端顯示執行結果。(6)遠程進程管理模塊:與服務器端進行交互,對服務器端進程進行管理。(7)遠程服務管理模塊:與服務器端進行交互,對服務器端的服務進行管理。(8)文字通訊:接收服務器端信息,發送客戶用戶輸入的信息。
四、軟件的詳細設計
(一)通信的數據包結構??蛻舳艘獙Ψ掌鞫诉M行操作,就要通過網絡,發送數據包給服務器端。服務器端分析數據包,調用相應的功能模塊,做出正確的響應,返回結果到客戶端。而這個數據要有一定的格式才能被雙方所識別。
(二)客戶端詳細設計。是對客戶端的各模塊的功能和子功能規劃處理流程,由于各模塊的流程較多,下面僅舉遠程文件管理模塊中的上傳文件模塊進行簡單說明:
procedure TForm_client.FileTool_upfileClick(Sender:TObject);
處理流程:上傳文件。從本地文件選擇要上傳的文件,然后上傳文件。文件按split劃分段數,分段傳輸。續傳文件時,按以存在文件的大小算出開始分段數,從開始分段數傳輸文件。
(三)服務器端詳細設計。下面僅舉請求分析模塊進行簡單說明,請求分析模塊的主要功能:響應客戶端的請求,調用正確的響應程序。
主要函數和過程:procedure Tform_server.IdTCPServer1Execute(A
Thread:TIdPeerThread);
處理流程:接收客戶端數據時調用此事件過程。對數據包進行分析,把數據分成四段,存入數組,第一段為功能號,第二段為子功能號,第三段第四段為參數。從而對相應客戶端請求調用相應的處理程序。
五、關鍵技術的實現
(一)WIN32 API的使用。DELPHI中將C或C++中引用的WINDOWS.H頭文件改寫為WINDOWS.PAS單元,使WINDOWS API函數的定義符合PASCAL語法。而其他的頭文件在DELPHI中也都有相應的.PAS單元一一對應,所以在DELPHI中調用API函數時,只須將相應的API函數單元加入到USES語句的單元之中,便可直接調用相應的函數了。
(二)管道的使用。使用管道的好處在于:讀寫它使用的是對文件操作的api,結果操作管道就和操作文件一樣。即使你在不同的計算機之間用命名管道來通信,你也不必了解和自己去實現網絡間通信的具體細節。該軟件的設計在客戶端和服務器端中都用到了匿名管道,它允許你和完全不相干的進程通信,條件是這個進程通過控制臺“console”來輸入輸出。
(三)進程操作api的使用。用以下兩組API調用實現:
1.創建系統的所有進程列表:
ProcessList:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
2.提取進程列表項信息存儲在TPROCESSENTRY32 pe中:
Process32First(ProcessList,pe),
Process32Next(ProcessList,pe)。
(四)indy網絡開發套件的使用。INDY提供INTERNET流行協議的客戶端和服務器控件。INDY控件集的客戶端和服務器控件都有完整、詳細的源代碼例程和幫助文件,根據一些例程就可簡單方便快速的建造各種服務器程序,在開發該軟件中服務器端使用了TIDTCPServer控件,客戶端采用了TIDTCPClient控件。它們各自的屬性和方法,編程時,參照相關參數進行設置就可以了。
(五)在delphi中使用多線程技術。Windows為線程控制提供了一系列的API函數調用。在Delphi中利用線程,可以直接調用Windows API的CreateThread函數來創建一個線程,也可以利用Delphi的VCL庫中的TThread對象,取代直接調用Windows API函數,這樣就可以直接對系統的底層進行操作。
參考文獻:
[1]何國民,實驗選課系統的設計及實現,實驗科學與技術,成都:電子科技大學出版社,2004.
[2]陳省,Delphi深度探索(第二版)[M].北京:電子工業出版社,2004.
[3]飛思科技產品研發中心,Delphi 7基礎編程[M].北京:電子工業出版社,2003.