cs模式遠(yuǎn)程控制程序設(shè)計(jì)畢業(yè)論文_第1頁(yè)
已閱讀1頁(yè),還剩10頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、<p>  目 錄</p><p>  第一章 引言 …………………………………………………………………………………1 </p><p>  第二章 相關(guān)技術(shù) …………………………………………………………………………1</p><p>  2.1 WinSock編程模型 ……………………………………………………………………1</p

2、><p>  2.1.1 WinSock 基本概念 …………………………………………………………………1</p><p>  2.1.2 選擇合適的通訊協(xié)議 ………………………………………………………………1</p><p>  2.2 TCP 和 UDP 基礎(chǔ) …………………………………………………………………2</p><p>  2.

3、2.1 TCP協(xié)議基礎(chǔ) ………………………………………………………………………2</p><p>  2.2.2 UDP協(xié)議基礎(chǔ) …………………………………………………………………… 2</p><p>  2.2.3 協(xié)議的設(shè)置 …………………………………………………………………………2</p><p>  2.3 面向連接的客戶/服務(wù)器模型時(shí)序圖 ………

4、………………………………3</p><p>  第三章 CS模式遠(yuǎn)程控制程序設(shè)計(jì) ……………………………………………… 3</p><p>  3.1 主要實(shí)現(xiàn)功能 ………………………………………………………………………3</p><p>  3.2 客戶端(監(jiān)控端)設(shè)計(jì) ………………………………………………………………4</p><p>

5、  3.2.1添加主機(jī) ……………………………………………………………………………4</p><p>  3.2.2發(fā)送消息 ……………………………………………………………………………5</p><p>  3.2.3監(jiān)視屏幕 ……………………………………………………………………………5</p><p>  3.2.4文件操作 ……………………………………………

6、………………………………5 </p><p>  3.2.5關(guān)閉、重啟計(jì)算機(jī) ……………………………………………………………………7 </p><p>  3.3 服務(wù)器端(被監(jiān)控端)程序設(shè)計(jì) …………………………………………………7</p><p>  3.3.1 進(jìn)行偵聽,時(shí)刻準(zhǔn)備接受連接 ………………………………………………………7</p>&l

7、t;p>  3.3.2 子功能程序?qū)崿F(xiàn) …………………………………………………………………… 8</p><p>  3.3.3“文件傳輸”程序?qū)崿F(xiàn) ………………………………………………………………9</p><p>  第四章 總結(jié)與展望 ……………………………………………………………………11</p><p>  參考文獻(xiàn) ……………………………………

8、……………………………………………… 11</p><p>  英文摘要 ………………………………………………………………………………………12</p><p>  CS模式遠(yuǎn)程控制程序設(shè)計(jì)</p><p>  摘 要:網(wǎng)絡(luò)實(shí)時(shí)監(jiān)控系統(tǒng)由客戶端和服務(wù)器端兩個(gè)子系統(tǒng)組成??蛻舳擞糜趯?shí)施各種對(duì)聯(lián)網(wǎng)計(jì)算機(jī)的監(jiān)控操作,服務(wù)器端對(duì)于接收到的數(shù)據(jù)進(jìn)行分析,解釋并執(zhí)行。本文首先

9、對(duì)WinSock 控件作了簡(jiǎn)單介紹,及如何選擇適合的協(xié)議:用戶數(shù)據(jù)文報(bào)協(xié)議(UDP)還是傳輸控制協(xié)議(TCP)。最后闡述了如何利用 WinSock 控件與遠(yuǎn)程計(jì)算機(jī)建立連接,并實(shí)現(xiàn)發(fā)送消息、監(jiān)視屏幕、文件傳輸?shù)裙δ堋?lt;/p><p>  關(guān)鍵詞: WinSock控件,TCP/UDP協(xié)議,客戶端/服務(wù)器模式,遠(yuǎn)程控制,文件傳輸</p><p><b>  1 引言</b>

10、;</p><p>  網(wǎng)絡(luò)在計(jì)算機(jī)世界里,越來(lái)越發(fā)揮著舉足輕重的作用,很多單位、部門都建立了自己的內(nèi)部網(wǎng)。對(duì)于網(wǎng)絡(luò)管理人員來(lái)說(shuō),在整個(gè)網(wǎng)絡(luò)運(yùn)行期間,希望能夠?qū)崟r(shí)的監(jiān)控聯(lián)網(wǎng)計(jì)算機(jī)的運(yùn)行狀態(tài)和進(jìn)行一些相關(guān)操作;希望能夠傳輸文件;希望能夠防止病毒的蔓延、非法程序的拷貝、杜絕某些用戶的越權(quán)或非法操作等。為此,我們都希望編寫一個(gè)適合于自己所在局域網(wǎng)的通訊程序。在此,使用VB 6.0(Visual Basic 6.0)開發(fā)

11、了一套能對(duì)聯(lián)網(wǎng)的每臺(tái)計(jì)算機(jī)進(jìn)行實(shí)時(shí)監(jiān)控的網(wǎng)絡(luò)系統(tǒng)。</p><p><b>  2 相關(guān)技術(shù)</b></p><p>  客戶/服務(wù)器技術(shù)是當(dāng)今比較流行與具有發(fā)展的技術(shù)之一。以之構(gòu)成的客戶、服務(wù)器應(yīng)用系統(tǒng)具有系統(tǒng)結(jié)構(gòu)優(yōu)化、資源利用率高、整體運(yùn)算速度快的優(yōu)點(diǎn),因而得到了廣泛的應(yīng)用。在WINDOWS應(yīng)用程序中,處理實(shí)時(shí)通訊最常用到的還是MICROSOFT公司提供的WinS

12、ock控件。</p><p>  2.1 WinSock編程模型</p><p>  網(wǎng)絡(luò)客戶/服務(wù)器模式的原理是一臺(tái)主機(jī)提供服務(wù)(服務(wù)器),另一臺(tái)主機(jī)接受服務(wù)(客戶機(jī))。作為服務(wù)器的主機(jī)打開一個(gè)端口并進(jìn)行監(jiān)聽, 如果有客戶機(jī)向服務(wù)器的這一端口提出連接請(qǐng)求, 服務(wù)器上的相應(yīng)程序就會(huì)自動(dòng)運(yùn)行,來(lái)應(yīng)答客戶機(jī)的請(qǐng)求。而WinSock的正確使用,給設(shè)計(jì)者帶來(lái)了極大的方便,使得各種應(yīng)用程序能夠在Wi

13、ndows環(huán)境下順利進(jìn)行各種網(wǎng)絡(luò)通訊。</p><p>  2.1.1 WinSock 基本概念</p><p>  Winsock 的全名是Windows Socket,是Microsoft windows 環(huán)境下的標(biāo)準(zhǔn)TCP/IP 網(wǎng)絡(luò)開發(fā)環(huán)境,是介于Windows TCP/IP 的Protocol stack之間的一項(xiàng)標(biāo)準(zhǔn)接口。Winsock是一個(gè)基于Socket 模型的API,它

14、包括許多為Unix 開發(fā)的Berkeley函數(shù)和基于Windows消息驅(qū)動(dòng)機(jī)制的Windows擴(kuò)展函數(shù),Winsock規(guī)范定義了一個(gè)TCP/IP網(wǎng)絡(luò)上開發(fā)Windows程序的接口標(biāo)準(zhǔn),其所提供的程序庫(kù)Winsock.DLL 會(huì)負(fù)起與網(wǎng)絡(luò)底層溝通的工作,它提供了訪問(wèn) TCP 和 UDP 網(wǎng)絡(luò)服務(wù)的方便途徑。Microsoft Access、Visual Basic、Visual C++ 或 Visual FoxPro 的開發(fā)人員都可使用它

15、。進(jìn)而使得設(shè)計(jì)者能設(shè)計(jì)出更多功能或更具有用戶友好性的網(wǎng)絡(luò)軟件。</p><p>  2.1.2 選擇合適的通訊協(xié)議</p><p>  在使用WinSock時(shí),首先需要考慮使用什么協(xié)議??梢允褂玫膮f(xié)議包括 TCP協(xié)議 和 UDP協(xié)議。兩種協(xié)議之間的重要區(qū)別在于它們的連接狀態(tài):</p><p>  (1)TCP 協(xié)議控件是基于連接的協(xié)議,可以將它同電話系統(tǒng)相比。在開始

16、數(shù)據(jù)傳輸之前,用戶必須先建立連接。</p><p> ?。?) UDP 協(xié)議是一種無(wú)連接協(xié)議,兩臺(tái)計(jì)算機(jī)之間的傳輸類似于傳遞郵件:消息從一臺(tái)計(jì)算機(jī)發(fā)送到另一臺(tái)計(jì)算機(jī),但是兩者之間沒(méi)有明確的連接。另外,單次傳輸?shù)淖畲髷?shù)據(jù)量取決于具體的網(wǎng)絡(luò)。 </p><p>  到底選擇哪一種協(xié)議通常是由需要?jiǎng)?chuàng)建的應(yīng)用程序決定的。下面的幾個(gè)問(wèn)題將有助于選擇適宜的協(xié)議:</p><p>

17、; ?。?)在收發(fā)數(shù)據(jù)的時(shí)候,應(yīng)用程序是否需要得到客戶端或者服務(wù)器的確認(rèn)信息?如果需要,使用 TCP 協(xié)議,在收發(fā)數(shù)據(jù)之前先建立明確的連接。</p><p> ?。?)數(shù)據(jù)量是否特別大(例如圖象與聲音文件)?在連接建立之后,TCP 協(xié)議將維護(hù)連接并確保數(shù)據(jù)的完整性。不過(guò),這種連接需要更多的計(jì)算資源,因而是比較“昂貴”的。</p><p> ?。?)數(shù)據(jù)發(fā)送是間歇的,還是在一個(gè)會(huì)話內(nèi)?例如,

18、如果應(yīng)用程序在某個(gè)任務(wù)完成的時(shí)候需要通知某個(gè)計(jì)算機(jī),UDP 協(xié)議是更適宜的。UDP 協(xié)議適合發(fā)送少量的數(shù)據(jù)。 </p><p>  2.2 TCP 和 UDP 基礎(chǔ) </p><p>  利用WinSock控件可以與遠(yuǎn)程計(jì)算機(jī)建立連接,并通過(guò)用戶數(shù)據(jù)文報(bào)協(xié)議 (UDP)或者傳輸控制協(xié)議 (TCP)進(jìn)行數(shù)據(jù)交換。這兩種協(xié)議都可以用來(lái)創(chuàng)建客戶與服務(wù)器應(yīng)用程序。通過(guò)設(shè)置WinSock控件的屬

19、性并調(diào)用其方法就可輕易連接到一臺(tái)遠(yuǎn)程機(jī)器上去,并且還可雙向交換數(shù)據(jù)。</p><p>  2.2.1 TCP協(xié)議基礎(chǔ)</p><p>  TCP協(xié)議:傳輸控制協(xié)議(Transmission Control Protocol),允許創(chuàng)建和維護(hù)與遠(yuǎn)程計(jì)算機(jī)的連接。建立連接后的兩臺(tái)計(jì)算機(jī)就可彼此進(jìn)行數(shù)據(jù)傳輸。</p><p>  在創(chuàng)建應(yīng)用程序之前,必須決定應(yīng)用程序是服

20、務(wù)器還是客戶端:</p><p>  如果創(chuàng)建客戶端應(yīng)用程序,就必須知道服務(wù)器計(jì)算機(jī)名或者 IP 地址(RemoteHost 屬性),還要知道進(jìn)行“偵聽”的端口(RemotePort 屬性),然后調(diào)用 Connect 方法。</p><p>  如果創(chuàng)建服務(wù)器應(yīng)用程序,就應(yīng)設(shè)置一個(gè)收聽端口(LocalPort 屬性)并調(diào)用 Listen 方法。當(dāng)客戶端提出連接請(qǐng)求時(shí),就會(huì)發(fā)生 Connec

21、tionRequest 事件。為了完成連接,可調(diào)用 ConnectionRequest 事件內(nèi)的 Accept 方法。</p><p>  建立連接后,任何一方計(jì)算機(jī)都可以收發(fā)數(shù)據(jù)。為了發(fā)送數(shù)據(jù),可調(diào)用 SendData 方法。當(dāng)接收數(shù)據(jù)時(shí)會(huì)發(fā)生 DataArrival 事件。調(diào)用 DataArrival 事件內(nèi)的 GetData 方法就可獲取數(shù)據(jù)。</p><p>  2.2.2 UD

22、P協(xié)議基礎(chǔ)</p><p>  UDP協(xié)議:用戶數(shù)據(jù)文報(bào)協(xié)議(User Datagram Protocol,是一個(gè)無(wú)連接協(xié)議。跟 TCP 的操作不同,計(jì)算機(jī)并不建立連接。另外 UDP 應(yīng)用程序可以是客戶機(jī),也可以是服務(wù)器。</p><p>  為了傳輸數(shù)據(jù),首先要設(shè)置客戶計(jì)算機(jī)的 LocalPort 屬性。然后,服務(wù)器計(jì)算機(jī)只需將 RemoteHost 設(shè)置為客戶計(jì)算機(jī)的 Internet

23、 地址,并將 RemotePort 屬性設(shè)置為跟客戶計(jì)算機(jī)的 LocalPort 屬性相同的端口,并調(diào)用 SendData 方法來(lái)著手發(fā)送信息。于是,客戶計(jì)算機(jī)使用 DataArrival 事件內(nèi)的 GetData 方法來(lái)獲取已發(fā)送的信息。</p><p>  2.2.3 協(xié)議的設(shè)置</p><p>  在設(shè)計(jì)時(shí),我們可以按如下方式設(shè)置應(yīng)用程序使用的協(xié)議:</p><p

24、>  在“屬性”窗口中單擊“協(xié)議”,然后選擇 sckTCPProtocol 或者 sckUDPProtocol;也可以使用程序代碼來(lái)設(shè)置 Protocol 屬性,如下所示:</p><p>  WinSock1.Protocol = sckTCPProtocol</p><p>  2.3 面向連接的客戶/服務(wù)器模型時(shí)序圖</p><p>  在面向連接的客戶

25、/服務(wù)器模型下,采用Winsock開發(fā)接口實(shí)現(xiàn)通訊程序,其典型的時(shí)序圖如圖1所示:</p><p>  3 CS模式遠(yuǎn)程控制程序設(shè)計(jì)</p><p>  上面我們講了很多的基礎(chǔ)知識(shí),是這個(gè)CS遠(yuǎn)程控制應(yīng)用程序所必須了解的。下面我們來(lái)進(jìn)一步了解此軟件的具體實(shí)現(xiàn)過(guò)程。</p><p>  網(wǎng)絡(luò)實(shí)時(shí)監(jiān)控系統(tǒng)由兩個(gè)子系統(tǒng)組成:客戶端系統(tǒng)和服務(wù)器端系統(tǒng)。客戶端(監(jiān)控端)系統(tǒng)安

26、裝在網(wǎng)絡(luò)管理人員的計(jì)算機(jī)上,用于實(shí)施各種對(duì)聯(lián)網(wǎng)計(jì)算機(jī)的監(jiān)控操作;服務(wù)器端(被監(jiān)控端)系統(tǒng)安裝在每臺(tái)聯(lián)網(wǎng)的計(jì)算機(jī)上,它運(yùn)行后以圖標(biāo)的方式出現(xiàn)在系統(tǒng)任務(wù)欄的提示區(qū)中,不影響被監(jiān)控端的其他操作,只用于響應(yīng)客戶端的監(jiān)控命令,并根據(jù)客戶端的需要,及時(shí)采樣服務(wù)器端的相應(yīng)數(shù)據(jù)返回給監(jiān)控端。 </p><p>  3.1 主要實(shí)現(xiàn)功能:</p><p>  該軟件主要用于遠(yuǎn)程監(jiān)控,主要功能包括:<

27、/p><p> ?。?)添加主機(jī)。Winsock使用的TCP協(xié)議和UDP協(xié)議允許建立并保持一個(gè)到遠(yuǎn)程計(jì)算機(jī)上的連接,且可以在連接結(jié)束之前實(shí)時(shí)地進(jìn)行數(shù)據(jù)交換。即我們?cè)谂c遠(yuǎn)程計(jì)算機(jī)建立連接之前,可以自由選擇想連接的計(jì)算機(jī)(連接對(duì)象)。在添加遠(yuǎn)程計(jì)算機(jī)的同時(shí),我們把遠(yuǎn)程計(jì)算機(jī)的名稱、IP地址、端口號(hào)等保存起來(lái);</p><p> ?。?)限制系統(tǒng)功能:包括遠(yuǎn)程關(guān)機(jī)、遠(yuǎn)程重啟計(jì)算機(jī);</p>

28、;<p> ?。?)遠(yuǎn)程文件操作:主要是文件的上傳、下載;</p><p> ?。?)發(fā)送信息:向被控端(服務(wù)端)發(fā)送簡(jiǎn)短信息;</p><p>  3.2 客戶端(監(jiān)控端)設(shè)計(jì)</p><p>  在監(jiān)控端主要設(shè)計(jì)了與服務(wù)端進(jìn)行交互的一些界面,實(shí)現(xiàn)上述功能的各個(gè)窗體。</p><p>  在客戶端應(yīng)用程序中,主窗體上部的菜單

29、欄中各菜單命令用于實(shí)現(xiàn)各種功能。主菜單有四個(gè)菜單項(xiàng):文件、操作、設(shè)置和幫助。</p><p>  “文件”菜單有掃描網(wǎng)絡(luò)、添加主機(jī)、刪除主機(jī)、退出系統(tǒng)四個(gè)子菜單;</p><p>  “操作”菜單有監(jiān)視屏幕、系統(tǒng)控制、文件操作等子菜單,而系統(tǒng)控制又有其下一級(jí)菜單,發(fā)送消息和重起機(jī)器、關(guān)閉機(jī)器三個(gè)菜單命令,“文件操作”的下一級(jí)菜單有運(yùn)行程序、文件傳輸兩項(xiàng)。</p><p&

30、gt;  “設(shè)置”菜單中主要用到的菜單項(xiàng)是“查看”。“查看”有其下一級(jí)菜單,主要是大圖標(biāo)、小圖標(biāo)、列表和詳細(xì)資料四項(xiàng)。</p><p>  “幫助”菜單主要是對(duì)所做的這個(gè)軟件的一個(gè)簡(jiǎn)單介紹。</p><p>  3.2.1 添加主機(jī)</p><p>  圖2 添加主機(jī)的界面</p><p>  我們用WinSock控件實(shí)現(xiàn)的是點(diǎn)對(duì)點(diǎn)的通

31、訊。那其中一點(diǎn)是客戶端計(jì)算機(jī),另一點(diǎn)是服務(wù)端的計(jì)算機(jī)。通過(guò)“添加主機(jī)”這一操作,我們就把服務(wù)端計(jì)算機(jī)的信息保存起來(lái),為tcpclient.RemoteHost、 tcpclient.RemotePort 提供了數(shù)據(jù)(tcpClient為WinSock 控件的名字)。</p><p>  添加了主機(jī)后我們?cè)谥鞔绑w上會(huì)看到多了一個(gè)“計(jì)算機(jī)”圖標(biāo)。在這里使用了ListView控件。</p><p&g

32、t;  ListView 控件以 ListItem 對(duì)象的形式顯示數(shù)據(jù)。每個(gè) ListItem 對(duì)象都可有一個(gè)可選的圖標(biāo)與其標(biāo)簽相關(guān)聯(lián)。該控件擅長(zhǎng)于表示數(shù)據(jù)的子集(比如數(shù)據(jù)庫(kù)的成員)或分布式對(duì)象(比如文檔模板)。該控件可以以四種不同的視圖模式顯示數(shù)據(jù):圖標(biāo)、小圖標(biāo)、列表和報(bào)表。</p><p>  ListItem 對(duì)象由標(biāo)簽(Text 屬性)和由 ImageList 控件提供的可選圖像構(gòu)成。并且它可以具有兩個(gè)

33、ImageList 控件,分別用來(lái)設(shè)置 Icons 和 SmallIcons 屬性。當(dāng)然,要在 ListView 控件中使用圖像,必須先向兩個(gè) ImageList 控件中充填適當(dāng)?shù)膱D像。隨后,將 ListView 控件和ImageList 控件關(guān)聯(lián)??梢栽贚istView 控件的“屬性頁(yè)”上設(shè)定;也可以在運(yùn)行時(shí)分配 ImageList 控件,所需要的代碼如下例所示:</p><p>  set object.Ic

34、ons [= imagelist]</p><p>  set object.SmallIcons [= imagelist]</p><p>  Icons,SmallIcons 屬性的語(yǔ)法說(shuō)明:</p><p>  object 對(duì)象表達(dá)式, 其值是 ListView 控件。 </p><p>  Imagelist 對(duì)象表

35、達(dá)式, 其值是 ImageList 控件。 </p><p>  這樣就將 ImageList 控件與 ListView 控件關(guān)聯(lián)。不在設(shè)計(jì)時(shí),而在運(yùn)行時(shí)設(shè)置 ImageList 控件的一個(gè)原因,是因?yàn)椴煌脩粜枰獎(jiǎng)討B(tài)的更換圖像。例如,使用單色顯示器的用戶會(huì)希望圖標(biāo)各部分的對(duì)比度大一些。</p><p>  ListView 控件中對(duì)于每一個(gè)ListItem 對(duì)象到底顯示哪個(gè)圖像,由它們索

36、引ListImage 對(duì)象來(lái)決定。在ImageList 與 ListView 控件關(guān)聯(lián)后,就可在過(guò)程中使用 Index 或 Key 屬性值來(lái)引用 ListImage 對(duì)象。</p><p>  3.2.2 發(fā)送消息</p><p>  在前面我們講了很多用WinSock控件建立連接方面的知識(shí)。明了只有雙方建立了連接之后,才能實(shí)現(xiàn)雙向數(shù)據(jù)交換。在此處當(dāng)打開“發(fā)送消息”窗體時(shí),WinSock

37、就主動(dòng)向遠(yuǎn)程計(jì)算機(jī)提出連接請(qǐng)求,并且遠(yuǎn)程計(jì)算機(jī)也接受了此連接時(shí),可看到“連接成功”的提示信息,按“確定”監(jiān)控端就可以發(fā)送消息了。我們只要在輸入框中輸入你想傳輸?shù)男畔?,再按“確定”就可以了。對(duì)方也就會(huì)收到此條消息。若沒(méi)有顯示提示信息,則表示連接沒(méi)有成功,我們也就無(wú)法進(jìn)行消息傳送了。</p><p>  有時(shí),用“發(fā)送消息”可以取得警告效果:</p><p>  例如:在機(jī)房上課,老師看到學(xué)生

38、沒(méi)有按照課堂所指定的作業(yè)(操作)在進(jìn)行,教師機(jī)(監(jiān)控端)就可以發(fā)送一條類似于這樣的消息:“課堂時(shí)間,請(qǐng)不要做與課堂內(nèi)容無(wú)關(guān)的東西!”來(lái)提醒學(xué)生。</p><p>  當(dāng)然我們也可以用此方式給予學(xué)生及時(shí)的幫助。</p><p>  3.2.3 監(jiān)視屏幕</p><p>  選擇了被監(jiān)控的計(jì)算機(jī)之后,單擊“監(jiān)視屏幕”菜單命令,出現(xiàn)“監(jiān)視屏幕”窗體,同時(shí)WinSock控

39、件與遠(yuǎn)程計(jì)算機(jī)進(jìn)行了連接,在窗體的頂端會(huì)出現(xiàn)“Connected: We can catch remote screen!”則表示已經(jīng)與遠(yuǎn)程機(jī)子成功建立了連接。不然,我們就無(wú)法捕獲對(duì)方的屏幕信息。</p><p>  單擊“show”按鈕,就可以顯示被監(jiān)控端的屏幕,知道對(duì)方此時(shí)此刻正在干什么,任務(wù)欄上還打開了哪些程序。</p><p>  若在課堂上,通過(guò)屏幕監(jiān)視,發(fā)現(xiàn)了學(xué)生在做一些與課堂

40、內(nèi)容無(wú)關(guān)的東西,就可以給學(xué)生“發(fā)送消息”,給予警告!</p><p>  3.2.4 文件操作</p><p><b>  ·運(yùn)行程序</b></p><p>  在主窗體中單擊“操作”菜單,進(jìn)入“文件操作”子菜單,在單擊“運(yùn)行程序”,我們就進(jìn)入了frmExecute.frm窗體??梢钥吹饺缦陆缑妫?lt;/p><p

41、>  圖 3 運(yùn)行程序的界面</p><p>  當(dāng)單擊下拉列表框的下來(lái)按鈕,選擇你所想運(yùn)行的程序在服務(wù)端計(jì)算機(jī)的位子,即選定程序所在的當(dāng)前路徑,在此后面輸入程序名,按下“確定”按鈕,當(dāng)對(duì)方收到此信息后就會(huì)自動(dòng)運(yùn)行程序。如果你沒(méi)有輸入要執(zhí)行的程序,按下“確定”按鈕,就會(huì)出現(xiàn)“您沒(méi)有指定被監(jiān)控端需要運(yùn)行的程序,您要打開指定的文件夾嗎?”的提示信息,“確定”或者“取消”你可以自由選擇。</p>

42、<p>  例如:“%WinDir%”表示的是Windows安裝目錄 ;“%SysDir%”表示的是Windows的系統(tǒng)目錄;“%AppDir%”表示的是應(yīng)用程序的當(dāng)前目錄等。</p><p>  若對(duì)于下拉列表框中所列的文件夾不熟悉,可以點(diǎn)擊“幫助”按鈕。就可以看到各字符串所代表的文件路徑。</p><p><b>  ·文件傳輸</b><

43、/p><p>  文件傳輸是監(jiān)控端一個(gè)比較強(qiáng)的功能,當(dāng)然在程序的實(shí)現(xiàn)上相較就稍復(fù)雜些。在frmFileTransfer.frm窗體中,在設(shè)計(jì)時(shí)放入了兩個(gè)Winsock控件,一個(gè)取名為tcpclient,用于傳輸一些命令和簡(jiǎn)短的信息,另一個(gè)為tcpSendFile,專用于文件的傳遞。</p><p>  在打開此窗體的同時(shí)這兩個(gè)控件都與遠(yuǎn)程計(jì)算機(jī)進(jìn)行連接,若我們?cè)诖绑w的左下角看到“tcpclie

44、nt connected: welcome!”的字樣,則表示tcpclient控件已連接成功;若出現(xiàn)用“Msgbox”提示的信息“Welcome to this system !”則表示tcpSendFile控件連接成功。只出現(xiàn)其中之一的提示,“文件傳輸”功能就不能正常實(shí)現(xiàn)。</p><p>  窗體的左邊框架(LocalFrame)里面顯示的是本地計(jì)算機(jī)的信息,右邊框架(RemoteFrame)顯示的是遠(yuǎn)程計(jì)算

45、機(jī)的信息。在頂部的下拉框中有三個(gè)選項(xiàng):“我的電腦”、“我的桌面”“我的文檔”。選擇“我的電腦”,在下方的lvLocal(ListView控件名)框中就會(huì)顯示“我的電腦”下的盤符信息。如果在右邊的下拉框中選擇“我的電腦”,就會(huì)在下方的lvRemote(ListView控件名)框中顯示遠(yuǎn)程機(jī)子“我的電腦”下的盤符信息,看到對(duì)方有幾個(gè)盤符。文本框中顯示的是當(dāng)前文件的路徑。</p><p>  圖4 文件傳輸?shù)慕缑?lt

46、;/p><p>  上圖就顯示了本地計(jì)算機(jī)中“我的電腦”的信息和遠(yuǎn)程計(jì)算機(jī)中“我的文檔”的信息。對(duì)于如何把遠(yuǎn)程計(jì)算機(jī)上的信息傳輸過(guò)來(lái),對(duì)于接受到的信息又是如何處理,如何區(qū)分哪些是盤符信息,哪些是文件夾、哪些是文件信息,我們?cè)诜?wù)器端程序設(shè)計(jì)中將作重點(diǎn)描述。</p><p>  3.2.5 關(guān)閉、重啟計(jì)算機(jī)</p><p>  在監(jiān)控端單擊“重啟機(jī)器”,在已經(jīng)與遠(yuǎn)程計(jì)算

47、機(jī)建立連接后,調(diào)用SendData方法,發(fā)送一個(gè)命令動(dòng)詞(字符串):"restart"。當(dāng)對(duì)方接收到此命令信息后,就會(huì)“重新啟動(dòng)計(jì)算機(jī)”。具體實(shí)現(xiàn)過(guò)程在服務(wù)器端作介紹。</p><p>  關(guān)閉計(jì)算機(jī)為同一原理。</p><p>  當(dāng)網(wǎng)絡(luò)管理人員發(fā)現(xiàn)有非法操作,比如上班玩游戲、安裝非法程序等,即可采取發(fā)送警告或強(qiáng)制措施,強(qiáng)迫其停止相應(yīng)操作。</p>&l

48、t;p>  3.3 服務(wù)器端(被監(jiān)控端)程序設(shè)計(jì)</p><p>  被監(jiān)控端界面非常的簡(jiǎn)單,有4個(gè)CommandBoutton按鈕。在主窗體(frmMain.frm)中添加了兩個(gè)WinSock 控件,分別取名為tcpFile和 tcpserver。tcpserver用于接收一些命令和簡(jiǎn)短的信息,而tcpFile專用于文件的傳遞。</p><p>  3.3.1 進(jìn)行偵聽,時(shí)刻準(zhǔn)備

49、接受連接</p><p>  在“開始服務(wù)”按鈕下的程序?yàn)椋?lt;/p><p>  Private Sub cmdBeg_Click()</p><p>  tcpserver.LocalPort = 2001</p><p>  tcpserver.Listen</p><p>  tcpFile.LocalPort

50、= 3000</p><p>  tcpFile.Listen</p><p>  cmdBeg.Enabled = False</p><p><b>  End Sub</b></p><p>  LocalPort 屬性:返回或者設(shè)置所用到的本地端口。在設(shè)計(jì)時(shí)是可讀/寫的,而且是可用的。在這里,我把服務(wù)器程序的端口

51、(LocalPort屬性)設(shè)置為2001和3000。</p><p>  計(jì)算機(jī)“端口”( Port)是計(jì)算機(jī)與外界通訊交流的出口.其中硬件領(lǐng)域的端口又稱接口,如:USB端口、串行端口等。軟件領(lǐng)域的端口一般指網(wǎng)絡(luò)中面向連接服務(wù)和無(wú)連接服務(wù)的通信協(xié)議端口,是一種抽象的軟件結(jié)構(gòu),包括一些數(shù)據(jù)結(jié)構(gòu)和I/O(基本輸入輸出)緩沖區(qū)。一般低于1024的端口都有確切的定義,它們對(duì)應(yīng)著因特網(wǎng)上常見(jiàn)的一些服務(wù)。為了避免沖突,我們最

52、好使用大于1024的端口號(hào)。</p><p>  當(dāng)tcpserver和tcpFile兩控件用Listen方法進(jìn)入偵聽狀態(tài)后,就等待客戶端程序的連接請(qǐng)求。當(dāng)客戶端提出連接請(qǐng)求時(shí),就進(jìn)行連接。</p><p>  3.3.2 子功能程序?qū)崿F(xiàn)</p><p>  當(dāng)WinSock控件的State狀態(tài)為sckConnected,則說(shuō)明雙方已成功建立了連接。此時(shí)客戶端就可以

53、數(shù)據(jù)發(fā)送過(guò)來(lái)(用tcpclient .SendData方法)。當(dāng)服務(wù)器程序接收到數(shù)據(jù)時(shí),產(chǎn)生DataArrival事件,參數(shù)BytesTotal包含接收到的數(shù)據(jù)字節(jié)數(shù)。用GetData方法接收數(shù)據(jù)。把接收到的數(shù)據(jù)存放于strData變量中(strDate 為變長(zhǎng)字符串(String)類型)中。</p><p>  程序?qū)τ诮邮盏降臄?shù)據(jù)進(jìn)行分析,得到一些命令動(dòng)詞。判斷各個(gè)命令動(dòng)詞,然后解釋并執(zhí)行。在這里調(diào)用了 De

54、alwithCommand子程序:</p><p><b>  主要處理部分為:</b></p><p>  nSepLen = InStr (1, strGetData, "|", vbTextCompare)</p><p>  If nSepLen > 0 Then</p><p>  s

55、trCmd = Left ( strGetData, nSepLen – 1 )</p><p>  strArg = Right ( strGetData, Len( strGetData ) – nSepLen )</p><p><b>  Else</b></p><p>  strCmd = strGetData</p>

56、<p>  strArg = ""</p><p><b>  End If</b></p><p>  注:用strCmd變量來(lái)存儲(chǔ)客戶端發(fā)過(guò)來(lái)的命令動(dòng)詞,便于程序進(jìn)行分辨處理。</p><p>  Select Case Ucase ( strCmd ) </p><p>  Cas

57、e "RESTART"</p><p>  Call AdjustTokenPrivilegesForNT '在95/98中調(diào)用沒(méi)作用 </p><p>  Call ExitWindowsEx(EWX_REBOOT, 0)</p><p>  Case "SHUTDOWN"</p><p&

58、gt;  Call AdjustTokenPrivilegesForNT '在95/98中調(diào)用沒(méi)作用</p><p>  Call ExitWindowsEx(EWX_SHUTDOWN, 0)</p><p>  Case "SHOWMSG" '接收客戶端“發(fā)送消息”發(fā)送來(lái)的信息</p><p>  MsgBox s

59、trArg</p><p>  tcpserver.SendData "對(duì)方已經(jīng)收到!"</p><p>  Case "EXECUTE"</p><p>  mypath = GetRealPath(strArg)</p><p>  RunShellExecute "open",

60、 mypath, Filename, fdirectory, SW_SHOWNOACTIVATE</p><p>  Case "CATCHSCREEN" '發(fā)送屏幕圖片</p><p>  FILname = "C:\catchscreen.bmp" '圖片名</p><p>  SavePictur

61、e CaptureScreen(), FILname</p><p>  Call SendOneFile(FILname)</p><p><b>  ……</b></p><p>  這是程序的一部分,實(shí)現(xiàn)了客戶端的五個(gè)功能:“重啟機(jī)器”、“關(guān)閉機(jī)器”、“發(fā)送消息”、文件操作中的“運(yùn)行程序”和“監(jiān)視屏幕”。在關(guān)閉、重啟計(jì)算機(jī)中調(diào)用了API函

62、數(shù):ExitWindowsEx,在“發(fā)送消息”中把收到的信息用MsgBox顯示出來(lái),并用SendData方法告示客戶端信息已經(jīng)收到。“運(yùn)行程序”(EXECUTE)用GetRealPath函數(shù)取得服務(wù)器端計(jì)算機(jī)的真實(shí)路徑,然后調(diào)用RunShellExecute函數(shù),如果沒(méi)有指明要執(zhí)行的程序,那就“打開”了客戶端指定的文件夾;如果指明了要執(zhí)行程序,被指定的程序就運(yùn)行起來(lái)了。例如:</p><p>  在客戶端發(fā)送:%

63、WinDir%\notepad.exe,在服務(wù)端就把 notepad.exe執(zhí)行起來(lái)。</p><p>  而對(duì)于“監(jiān)視屏幕”功能,也是發(fā)送了一個(gè)命令詞“CATCHSCREEN”,服務(wù)端就調(diào)用了CaptureScreen()函數(shù),生成了屏幕圖片并把它保存到一個(gè)文件中,然后再把文件傳送給客戶端,在客戶端單擊“SHOW”按鈕就把遠(yuǎn)程計(jì)算機(jī)的屏幕顯示出來(lái)了。</p><p>  3.3.3 “

64、文件傳輸”程序?qū)崿F(xiàn)</p><p>  前面提到:客戶端的“文件傳輸”窗體的右邊框架(RemoteFrame)顯示的是遠(yuǎn)程計(jì)算機(jī)的信息。對(duì)于如何把服務(wù)器端的“我的電腦”、“我的桌面”、“我的文檔”的信息傳送過(guò)去,并顯示出來(lái)呢?對(duì)于如何處理接受到的信息,如何區(qū)分哪些是盤符信息,哪些是文件夾、哪些是文件信息?我們?cè)诖俗髟敿?xì)說(shuō)明。</p><p>  這里我們運(yùn)用了一個(gè)重要技術(shù):在服務(wù)器端窗體中

65、添加了三個(gè)控件:驅(qū)動(dòng)器列表框(DriveListBox)、目錄列表框(DirListBox)和文件列表框(FileListBox)。</p><p>  當(dāng)客戶端要求的是“我的電腦”信息,我們就把驅(qū)動(dòng)器列表框Drremote中的盤符讀出,賦給變量strInfo,部分代碼如下:</p><p>  For i = 0 To DRremote.ListCount - 1 </p

66、><p>  strInfo = strInfo & DRremote.List(i) & "DRV" & vbCrLf</p><p><b>  Next</b></p><p>  然后用SendData 方法把strInfo信息發(fā)送給客戶端。</p><p>  如果是“我

67、的桌面”,則我們需要找出“我的桌面”的具體路徑,我們用GetCurrentUserDesktopPath函數(shù)取得桌面路徑。</p><p>  mypath = GetCurrentUserDesktopPath '把路徑賦給mypath變量</p><p>  DirFilpath = mypath '保存當(dāng)前路徑,作為所傳輸文件的上級(jí)目

68、錄</p><p>  strData = GetDirsAndFilesInfo(mypath) '用GetDirsAndFilesInfo獲得桌面的所有信息</p><p>  tcpserver.SendData strData '把信息發(fā)送給客戶端 </p><p>  在GetDirsAndFilesInfo函數(shù)中其實(shí)就是把目錄

69、列表框(DLremote)和文件列表框(FLremote)的內(nèi)容讀出。</p><p>  圖5 驅(qū)動(dòng)器、文件夾和文件信息的讀取</p><p>  對(duì)于“我的文檔”,它與“我的桌面”是同一原理。而對(duì)于某個(gè)文件夾下的內(nèi)容,我們的處理方法也是相同的。只是必須明確知道此文件夾的具體路徑。</p><p>  那我們又是如何區(qū)分哪些是盤符信息,哪些是文件夾、哪些是文件信息

70、的呢?</p><p>  我們把接收到的信息用ShowRemoteDirectiresAndFiles函數(shù)把它顯示到右邊的lvRemote(ListView 控件名)框中。用"PTH"之前的字符串來(lái)顯示路徑,用"DRV"來(lái)表示得到的是遠(yuǎn)程計(jì)算機(jī)的盤符信息,用"DIR" 表示文件夾信息,用"FIL" 表示文件信息。</p>

71、<p><b>  部分代碼如下: </b></p><p>  If Right(strSubString, 3) = "DRV" Then</p><p>  strSubString = Left(strSubString, Len(strSubString) - 3)</p><p>  Call Se

72、paratePathAndName(strSubString, substrpath, strName)</p><p>  Set itmX = lvRemote.ListItems.Add(, strSubString, strName, "drive", "drive")</p><p>  itmX.Tag = "DRV"

73、</p><p><b>  End If</b></p><p>  If Right(strSubString, 3) = "DIR" Then</p><p>  strSubString = Left(strSubString, Len(strSubString) - 3)</p><p> 

74、 Call SeparatePathAndName(strSubString, substrpath, strName)</p><p>  Set itmX = lvRemote.ListItems.Add(, strSubString, strName, "folder", "folder")</p><p>  itmX.Tag = "

75、;DIR"</p><p><b>  End If</b></p><p>  If Right(strSubString, 3) = "FIL" Then</p><p>  strSubString = Left(strSubString, Len(strSubString) - 3)</p>

76、<p>  Call SeparatePathAndName(strSubString, substrpath, strName)</p><p>  Set itmX = lvRemote.ListItems.Add(, strSubString, strName, "file", "file")</p><p>  itmX.Tag =

77、 "FIL"</p><p><b>  End If</b></p><p>  Listview控件以 ListItem 對(duì)象的形式顯示數(shù)據(jù)。每個(gè) ListItem 對(duì)象都可有一個(gè)可選的圖標(biāo)與其標(biāo)簽相關(guān)聯(lián)。這里我用“drive”(圖像名)表示驅(qū)動(dòng)器,用“folder”(圖像名)表示文件夾,用“file”(圖像名)表示文件。當(dāng)然也有大圖標(biāo),小圖標(biāo)

78、的區(qū)別。</p><p>  對(duì)于客戶端的“我的電腦”、“我的桌面”“我的文檔”各信息在lvLocal框中顯示的原理,與此處是完全相同的。</p><p>  上面我們完成了在lvLocal和lvRemote中分別顯示文件夾和文件信息,接下來(lái)我們就可以進(jìn)行“文件傳輸”,在選定了監(jiān)控端的文件后,我們首先把文件名傳送給被監(jiān)控端,然后單擊按鈕,通過(guò)tcpSendFile.SendData 把文件

79、傳送過(guò)去,被監(jiān)控端用tcpFile.GetData接收并生成文件即可。但其中涉及了文件的訪問(wèn),即文件的讀取操作和寫入操作。為了保持文件的尺寸,應(yīng)使用二進(jìn)制型訪問(wèn)。需要注意的是:當(dāng)把二進(jìn)制數(shù)據(jù)寫入文件中時(shí),使用的變量是Byte數(shù)據(jù)類型的數(shù)組,而不是String變量。</p><p>  文件有大有小,有些文件不到1K,而有些有幾兆(M),幾兆的文件并不能一次性就傳輸完畢,我們采取分塊傳輸,每塊的大小為6000字節(jié)。

80、主要是調(diào)用了SendOneFile()和WriteBlockToFile()兩個(gè)函數(shù)。</p><p>  當(dāng)文件接收完畢時(shí),發(fā)送一個(gè)結(jié)束標(biāo)志。在監(jiān)控端可收到“對(duì)方已經(jīng)接收完畢!”的提示信息。與此同時(shí),我們還必須刷新被監(jiān)控端當(dāng)前文件夾下的信息。刷新過(guò)程就是再次調(diào)用GetDirsAndFilesInfo函數(shù),并在lvRemote框中重新生成各個(gè)圖標(biāo)。</p><p>  對(duì)于文件從被監(jiān)控端傳

81、輸?shù)奖O(jiān)控端過(guò)程,選定遠(yuǎn)程計(jì)算機(jī)的文件,再單擊按鈕即可。實(shí)現(xiàn)原理與文件從監(jiān)控端傳輸?shù)奖槐O(jiān)控端是相同的。</p><p><b>  4 總結(jié)與展望</b></p><p>  以上討論了基于客戶/ 服務(wù)器模式,采用TCP 協(xié)議,用Winsock技術(shù)建立連接的網(wǎng)絡(luò)計(jì)算機(jī)實(shí)時(shí)監(jiān)控系統(tǒng)的設(shè)計(jì)過(guò)程。著重討論了客戶端通訊程序和服務(wù)器端通訊程序的設(shè)計(jì)。</p><

82、;p>  當(dāng)然它存在一定的缺陷,如在計(jì)算機(jī)開啟時(shí),服務(wù)端應(yīng)用程序就能夠自動(dòng)運(yùn)行,并使程序運(yùn)行后,把服務(wù)端應(yīng)用程序的圖標(biāo)顯示在Windows任務(wù)欄的提示區(qū)(托盤)中,而不顯示在任務(wù)欄或桌面上,給用戶以更加潔凈的感覺(jué)?;蛘吒M(jìn)一步,使服務(wù)端系統(tǒng)運(yùn)行后不僅在任務(wù)欄、桌面上不出現(xiàn),而且在任務(wù)列表中都不顯示(即同時(shí)按下Ctrl+Alt+Del鍵出現(xiàn)的任務(wù)窗口中找不到服務(wù)端系統(tǒng)的任務(wù)條,而實(shí)際上已運(yùn)行)。但由于本人專業(yè)知識(shí)水平有限,時(shí)間短暫的

83、制約,設(shè)計(jì)上的不足之處,還望各位批評(píng)指正。</p><p><b>  參考文獻(xiàn):</b></p><p>  [1](美)Eric Brierler,Anthony Prince,David Rinaldi 著,王建華、陳一飛、吳炳林等譯,《Visual Basic 6 開發(fā)人員指南》 機(jī)械工業(yè)出版社,1999年1月</p><p>  [2

84、] 蕭秋水等編著.《windows網(wǎng)絡(luò)編程之VB篇》清華大學(xué)出版社,2001.2</p><p>  [3] 汪曉平等編著.《Visual Basic 網(wǎng)絡(luò)高級(jí)編程》人民郵電出版社,2001.4</p><p>  [4] 劉瑞新等編著?!秜isual basic 程序設(shè)計(jì)教程》機(jī)械工業(yè)出版社2000.10</p><p>  [5](美)Carl FrankLin

85、 著,瀟湘工作室 譯,《Visual Basic 6.0 Internet 編程指南》人民郵電出版社, 1999年11月</p><p>  [6] 林永,張樂(lè)強(qiáng)編著, 《Visual Basic 6.0用戶編程手冊(cè)》,人民郵電出版社,2002年</p><p>  [7] MSDN Library Visual Studio 6.0 </p><p>  The

86、 Design of CS Mode Remote Control</p><p>  Abstract: Network real-time monitoring system consists of client and server. Client is used for the control operations towards the different network computers. Serv

87、er analyses the received data, then interprets and implements it. This paper make simple introduction to WinSock control at first, and how to choose the suitable protocol: User Datagram Protocol —UDP or the transmission

88、control protocol —TCP? Finally it explains how to utilize WinSock controlling part to set up and join with the remo</p><p>  Keywords: Winsock control, TCP/UCP protocol, Client/Server mode, Remote control,&

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論