版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
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ù)器模型時序圖 ………
4、………………………………3</p><p> 第三章 CS模式遠(yuǎn)程控制程序設(shè)計 ……………………………………………… 3</p><p> 3.1 主要實現(xiàn)功能 ………………………………………………………………………3</p><p> 3.2 客戶端(監(jiān)控端)設(shè)計 ………………………………………………………………4</p><p>
5、 3.2.1添加主機 ……………………………………………………………………………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)閉、重啟計算機 ……………………………………………………………………7 </p><p> 3.3 服務(wù)器端(被監(jiān)控端)程序設(shè)計 …………………………………………………7</p><p> 3.3.1 進行偵聽,時刻準(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> 參考文獻 ……………………………………
8、……………………………………………… 11</p><p> 英文摘要 ………………………………………………………………………………………12</p><p> CS模式遠(yuǎn)程控制程序設(shè)計</p><p> 摘 要:網(wǎng)絡(luò)實時監(jiān)控系統(tǒng)由客戶端和服務(wù)器端兩個子系統(tǒng)組成??蛻舳擞糜趯嵤└鞣N對聯(lián)網(wǎng)計算機的監(jiān)控操作,服務(wù)器端對于接收到的數(shù)據(jù)進行分析,解釋并執(zhí)行。本文首先
9、對WinSock 控件作了簡單介紹,及如何選擇適合的協(xié)議:用戶數(shù)據(jù)文報協(xié)議(UDP)還是傳輸控制協(xié)議(TCP)。最后闡述了如何利用 WinSock 控件與遠(yuǎn)程計算機建立連接,并實現(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ò)在計算機世界里,越來越發(fā)揮著舉足輕重的作用,很多單位、部門都建立了自己的內(nèi)部網(wǎng)。對于網(wǎng)絡(luò)管理人員來說,在整個網(wǎng)絡(luò)運行期間,希望能夠?qū)崟r的監(jiān)控聯(lián)網(wǎng)計算機的運行狀態(tài)和進行一些相關(guān)操作;希望能夠傳輸文件;希望能夠防止病毒的蔓延、非法程序的拷貝、杜絕某些用戶的越權(quán)或非法操作等。為此,我們都希望編寫一個適合于自己所在局域網(wǎng)的通訊程序。在此,使用VB 6.0(Visual Basic 6.0)開發(fā)
11、了一套能對聯(lián)網(wǎng)的每臺計算機進行實時監(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ōu)點,因而得到了廣泛的應(yīng)用。在WINDOWS應(yīng)用程序中,處理實時通訊最常用到的還是MICROSOFT公司提供的WinS
12、ock控件。</p><p> 2.1 WinSock編程模型</p><p> 網(wǎng)絡(luò)客戶/服務(wù)器模式的原理是一臺主機提供服務(wù)(服務(wù)器),另一臺主機接受服務(wù)(客戶機)。作為服務(wù)器的主機打開一個端口并進行監(jiān)聽, 如果有客戶機向服務(wù)器的這一端口提出連接請求, 服務(wù)器上的相應(yīng)程序就會自動運行,來應(yīng)答客戶機的請求。而WinSock的正確使用,給設(shè)計者帶來了極大的方便,使得各種應(yīng)用程序能夠在Wi
13、ndows環(huá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之間的一項標(biāo)準(zhǔn)接口。Winsock是一個基于Socket 模型的API,它
14、包括許多為Unix 開發(fā)的Berkeley函數(shù)和基于Windows消息驅(qū)動機制的Windows擴展函數(shù),Winsock規(guī)范定義了一個TCP/IP網(wǎng)絡(luò)上開發(fā)Windows程序的接口標(biāo)準(zhǔn),其所提供的程序庫Winsock.DLL 會負(fù)起與網(wǎng)絡(luò)底層溝通的工作,它提供了訪問 TCP 和 UDP 網(wǎng)絡(luò)服務(wù)的方便途徑。Microsoft Access、Visual Basic、Visual C++ 或 Visual FoxPro 的開發(fā)人員都可使用它
15、。進而使得設(shè)計者能設(shè)計出更多功能或更具有用戶友好性的網(wǎng)絡(luò)軟件。</p><p> 2.1.2 選擇合適的通訊協(xié)議</p><p> 在使用WinSock時,首先需要考慮使用什么協(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é)議是一種無連接協(xié)議,兩臺計算機之間的傳輸類似于傳遞郵件:消息從一臺計算機發(fā)送到另一臺計算機,但是兩者之間沒有明確的連接。另外,單次傳輸?shù)淖畲髷?shù)據(jù)量取決于具體的網(wǎng)絡(luò)。 </p><p> 到底選擇哪一種協(xié)議通常是由需要創(chuàng)建的應(yīng)用程序決定的。下面的幾個問題將有助于選擇適宜的協(xié)議:</p><p>
17、; ?。?)在收發(fā)數(shù)據(jù)的時候,應(yīng)用程序是否需要得到客戶端或者服務(wù)器的確認(rèn)信息?如果需要,使用 TCP 協(xié)議,在收發(fā)數(shù)據(jù)之前先建立明確的連接。</p><p> ?。?)數(shù)據(jù)量是否特別大(例如圖象與聲音文件)?在連接建立之后,TCP 協(xié)議將維護連接并確保數(shù)據(jù)的完整性。不過,這種連接需要更多的計算資源,因而是比較“昂貴”的。</p><p> ?。?)數(shù)據(jù)發(fā)送是間歇的,還是在一個會話內(nèi)?例如,
18、如果應(yīng)用程序在某個任務(wù)完成的時候需要通知某個計算機,UDP 協(xié)議是更適宜的。UDP 協(xié)議適合發(fā)送少量的數(shù)據(jù)。 </p><p> 2.2 TCP 和 UDP 基礎(chǔ) </p><p> 利用WinSock控件可以與遠(yuǎn)程計算機建立連接,并通過用戶數(shù)據(jù)文報協(xié)議 (UDP)或者傳輸控制協(xié)議 (TCP)進行數(shù)據(jù)交換。這兩種協(xié)議都可以用來創(chuàng)建客戶與服務(wù)器應(yīng)用程序。通過設(shè)置WinSock控件的屬
19、性并調(diào)用其方法就可輕易連接到一臺遠(yuǎn)程機器上去,并且還可雙向交換數(shù)據(jù)。</p><p> 2.2.1 TCP協(xié)議基礎(chǔ)</p><p> TCP協(xié)議:傳輸控制協(xié)議(Transmission Control Protocol),允許創(chuàng)建和維護與遠(yuǎn)程計算機的連接。建立連接后的兩臺計算機就可彼此進行數(shù)據(jù)傳輸。</p><p> 在創(chuàng)建應(yīng)用程序之前,必須決定應(yīng)用程序是服
20、務(wù)器還是客戶端:</p><p> 如果創(chuàng)建客戶端應(yīng)用程序,就必須知道服務(wù)器計算機名或者 IP 地址(RemoteHost 屬性),還要知道進行“偵聽”的端口(RemotePort 屬性),然后調(diào)用 Connect 方法。</p><p> 如果創(chuàng)建服務(wù)器應(yīng)用程序,就應(yīng)設(shè)置一個收聽端口(LocalPort 屬性)并調(diào)用 Listen 方法。當(dāng)客戶端提出連接請求時,就會發(fā)生 Connec
21、tionRequest 事件。為了完成連接,可調(diào)用 ConnectionRequest 事件內(nèi)的 Accept 方法。</p><p> 建立連接后,任何一方計算機都可以收發(fā)數(shù)據(jù)。為了發(fā)送數(shù)據(jù),可調(diào)用 SendData 方法。當(dāng)接收數(shù)據(jù)時會發(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ù)文報協(xié)議(User Datagram Protocol,是一個無連接協(xié)議。跟 TCP 的操作不同,計算機并不建立連接。另外 UDP 應(yīng)用程序可以是客戶機,也可以是服務(wù)器。</p><p> 為了傳輸數(shù)據(jù),首先要設(shè)置客戶計算機的 LocalPort 屬性。然后,服務(wù)器計算機只需將 RemoteHost 設(shè)置為客戶計算機的 Internet
23、 地址,并將 RemotePort 屬性設(shè)置為跟客戶計算機的 LocalPort 屬性相同的端口,并調(diào)用 SendData 方法來著手發(fā)送信息。于是,客戶計算機使用 DataArrival 事件內(nèi)的 GetData 方法來獲取已發(fā)送的信息。</p><p> 2.2.3 協(xié)議的設(shè)置</p><p> 在設(shè)計時,我們可以按如下方式設(shè)置應(yīng)用程序使用的協(xié)議:</p><p
24、> 在“屬性”窗口中單擊“協(xié)議”,然后選擇 sckTCPProtocol 或者 sckUDPProtocol;也可以使用程序代碼來設(shè)置 Protocol 屬性,如下所示:</p><p> WinSock1.Protocol = sckTCPProtocol</p><p> 2.3 面向連接的客戶/服務(wù)器模型時序圖</p><p> 在面向連接的客戶
25、/服務(wù)器模型下,采用Winsock開發(fā)接口實現(xiàn)通訊程序,其典型的時序圖如圖1所示:</p><p> 3 CS模式遠(yuǎn)程控制程序設(shè)計</p><p> 上面我們講了很多的基礎(chǔ)知識,是這個CS遠(yuǎn)程控制應(yīng)用程序所必須了解的。下面我們來進一步了解此軟件的具體實現(xiàn)過程。</p><p> 網(wǎng)絡(luò)實時監(jiān)控系統(tǒng)由兩個子系統(tǒng)組成:客戶端系統(tǒng)和服務(wù)器端系統(tǒng)??蛻舳耍ūO(jiān)控端)系統(tǒng)安
26、裝在網(wǎng)絡(luò)管理人員的計算機上,用于實施各種對聯(lián)網(wǎng)計算機的監(jiān)控操作;服務(wù)器端(被監(jiān)控端)系統(tǒng)安裝在每臺聯(lián)網(wǎng)的計算機上,它運行后以圖標(biāo)的方式出現(xiàn)在系統(tǒng)任務(wù)欄的提示區(qū)中,不影響被監(jiān)控端的其他操作,只用于響應(yīng)客戶端的監(jiān)控命令,并根據(jù)客戶端的需要,及時采樣服務(wù)器端的相應(yīng)數(shù)據(jù)返回給監(jiān)控端。 </p><p> 3.1 主要實現(xiàn)功能:</p><p> 該軟件主要用于遠(yuǎn)程監(jiān)控,主要功能包括:<
27、/p><p> ?。?)添加主機。Winsock使用的TCP協(xié)議和UDP協(xié)議允許建立并保持一個到遠(yuǎn)程計算機上的連接,且可以在連接結(jié)束之前實時地進行數(shù)據(jù)交換。即我們在與遠(yuǎn)程計算機建立連接之前,可以自由選擇想連接的計算機(連接對象)。在添加遠(yuǎn)程計算機的同時,我們把遠(yuǎn)程計算機的名稱、IP地址、端口號等保存起來;</p><p> ?。?)限制系統(tǒng)功能:包括遠(yuǎn)程關(guān)機、遠(yuǎn)程重啟計算機;</p>
28、;<p> (3)遠(yuǎn)程文件操作:主要是文件的上傳、下載;</p><p> (4)發(fā)送信息:向被控端(服務(wù)端)發(fā)送簡短信息;</p><p> 3.2 客戶端(監(jiān)控端)設(shè)計</p><p> 在監(jiān)控端主要設(shè)計了與服務(wù)端進行交互的一些界面,實現(xiàn)上述功能的各個窗體。</p><p> 在客戶端應(yīng)用程序中,主窗體上部的菜單
29、欄中各菜單命令用于實現(xiàn)各種功能。主菜單有四個菜單項:文件、操作、設(shè)置和幫助。</p><p> “文件”菜單有掃描網(wǎng)絡(luò)、添加主機、刪除主機、退出系統(tǒng)四個子菜單;</p><p> “操作”菜單有監(jiān)視屏幕、系統(tǒng)控制、文件操作等子菜單,而系統(tǒng)控制又有其下一級菜單,發(fā)送消息和重起機器、關(guān)閉機器三個菜單命令,“文件操作”的下一級菜單有運行程序、文件傳輸兩項。</p><p&
30、gt; “設(shè)置”菜單中主要用到的菜單項是“查看”?!安榭础庇衅湎乱患壊藛危饕谴髨D標(biāo)、小圖標(biāo)、列表和詳細(xì)資料四項。</p><p> “幫助”菜單主要是對所做的這個軟件的一個簡單介紹。</p><p> 3.2.1 添加主機</p><p> 圖2 添加主機的界面</p><p> 我們用WinSock控件實現(xiàn)的是點對點的通
31、訊。那其中一點是客戶端計算機,另一點是服務(wù)端的計算機。通過“添加主機”這一操作,我們就把服務(wù)端計算機的信息保存起來,為tcpclient.RemoteHost、 tcpclient.RemotePort 提供了數(shù)據(jù)(tcpClient為WinSock 控件的名字)。</p><p> 添加了主機后我們在主窗體上會看到多了一個“計算機”圖標(biāo)。在這里使用了ListView控件。</p><p&g
32、t; ListView 控件以 ListItem 對象的形式顯示數(shù)據(jù)。每個 ListItem 對象都可有一個可選的圖標(biāo)與其標(biāo)簽相關(guān)聯(lián)。該控件擅長于表示數(shù)據(jù)的子集(比如數(shù)據(jù)庫的成員)或分布式對象(比如文檔模板)。該控件可以以四種不同的視圖模式顯示數(shù)據(jù):圖標(biāo)、小圖標(biāo)、列表和報表。</p><p> ListItem 對象由標(biāo)簽(Text 屬性)和由 ImageList 控件提供的可選圖像構(gòu)成。并且它可以具有兩個
33、ImageList 控件,分別用來設(shè)置 Icons 和 SmallIcons 屬性。當(dāng)然,要在 ListView 控件中使用圖像,必須先向兩個 ImageList 控件中充填適當(dāng)?shù)膱D像。隨后,將 ListView 控件和ImageList 控件關(guān)聯(lián)??梢栽贚istView 控件的“屬性頁”上設(shè)定;也可以在運行時分配 ImageList 控件,所需要的代碼如下例所示:</p><p> set object.Ic
34、ons [= imagelist]</p><p> set object.SmallIcons [= imagelist]</p><p> Icons,SmallIcons 屬性的語法說明:</p><p> object 對象表達式, 其值是 ListView 控件。 </p><p> Imagelist 對象表
35、達式, 其值是 ImageList 控件。 </p><p> 這樣就將 ImageList 控件與 ListView 控件關(guān)聯(lián)。不在設(shè)計時,而在運行時設(shè)置 ImageList 控件的一個原因,是因為不同用戶需要動態(tài)的更換圖像。例如,使用單色顯示器的用戶會希望圖標(biāo)各部分的對比度大一些。</p><p> ListView 控件中對于每一個ListItem 對象到底顯示哪個圖像,由它們索
36、引ListImage 對象來決定。在ImageList 與 ListView 控件關(guān)聯(lián)后,就可在過程中使用 Index 或 Key 屬性值來引用 ListImage 對象。</p><p> 3.2.2 發(fā)送消息</p><p> 在前面我們講了很多用WinSock控件建立連接方面的知識。明了只有雙方建立了連接之后,才能實現(xiàn)雙向數(shù)據(jù)交換。在此處當(dāng)打開“發(fā)送消息”窗體時,WinSock
37、就主動向遠(yuǎn)程計算機提出連接請求,并且遠(yuǎn)程計算機也接受了此連接時,可看到“連接成功”的提示信息,按“確定”監(jiān)控端就可以發(fā)送消息了。我們只要在輸入框中輸入你想傳輸?shù)男畔?,再按“確定”就可以了。對方也就會收到此條消息。若沒有顯示提示信息,則表示連接沒有成功,我們也就無法進行消息傳送了。</p><p> 有時,用“發(fā)送消息”可以取得警告效果:</p><p> 例如:在機房上課,老師看到學(xué)生
38、沒有按照課堂所指定的作業(yè)(操作)在進行,教師機(監(jiān)控端)就可以發(fā)送一條類似于這樣的消息:“課堂時間,請不要做與課堂內(nèi)容無關(guān)的東西!”來提醒學(xué)生。</p><p> 當(dāng)然我們也可以用此方式給予學(xué)生及時的幫助。</p><p> 3.2.3 監(jiān)視屏幕</p><p> 選擇了被監(jiān)控的計算機之后,單擊“監(jiān)視屏幕”菜單命令,出現(xiàn)“監(jiān)視屏幕”窗體,同時WinSock控
39、件與遠(yuǎn)程計算機進行了連接,在窗體的頂端會出現(xiàn)“Connected: We can catch remote screen!”則表示已經(jīng)與遠(yuǎn)程機子成功建立了連接。不然,我們就無法捕獲對方的屏幕信息。</p><p> 單擊“show”按鈕,就可以顯示被監(jiān)控端的屏幕,知道對方此時此刻正在干什么,任務(wù)欄上還打開了哪些程序。</p><p> 若在課堂上,通過屏幕監(jiān)視,發(fā)現(xiàn)了學(xué)生在做一些與課堂
40、內(nèi)容無關(guān)的東西,就可以給學(xué)生“發(fā)送消息”,給予警告!</p><p> 3.2.4 文件操作</p><p><b> ·運行程序</b></p><p> 在主窗體中單擊“操作”菜單,進入“文件操作”子菜單,在單擊“運行程序”,我們就進入了frmExecute.frm窗體??梢钥吹饺缦陆缑妫?lt;/p><p
41、> 圖 3 運行程序的界面</p><p> 當(dāng)單擊下拉列表框的下來按鈕,選擇你所想運行的程序在服務(wù)端計算機的位子,即選定程序所在的當(dāng)前路徑,在此后面輸入程序名,按下“確定”按鈕,當(dāng)對方收到此信息后就會自動運行程序。如果你沒有輸入要執(zhí)行的程序,按下“確定”按鈕,就會出現(xiàn)“您沒有指定被監(jiān)控端需要運行的程序,您要打開指定的文件夾嗎?”的提示信息,“確定”或者“取消”你可以自由選擇。</p>
42、<p> 例如:“%WinDir%”表示的是Windows安裝目錄 ;“%SysDir%”表示的是Windows的系統(tǒng)目錄;“%AppDir%”表示的是應(yīng)用程序的當(dāng)前目錄等。</p><p> 若對于下拉列表框中所列的文件夾不熟悉,可以點擊“幫助”按鈕。就可以看到各字符串所代表的文件路徑。</p><p><b> ·文件傳輸</b><
43、/p><p> 文件傳輸是監(jiān)控端一個比較強的功能,當(dāng)然在程序的實現(xiàn)上相較就稍復(fù)雜些。在frmFileTransfer.frm窗體中,在設(shè)計時放入了兩個Winsock控件,一個取名為tcpclient,用于傳輸一些命令和簡短的信息,另一個為tcpSendFile,專用于文件的傳遞。</p><p> 在打開此窗體的同時這兩個控件都與遠(yuǎn)程計算機進行連接,若我們在窗體的左下角看到“tcpclie
44、nt connected: welcome!”的字樣,則表示tcpclient控件已連接成功;若出現(xiàn)用“Msgbox”提示的信息“Welcome to this system !”則表示tcpSendFile控件連接成功。只出現(xiàn)其中之一的提示,“文件傳輸”功能就不能正常實現(xiàn)。</p><p> 窗體的左邊框架(LocalFrame)里面顯示的是本地計算機的信息,右邊框架(RemoteFrame)顯示的是遠(yuǎn)程計算
45、機的信息。在頂部的下拉框中有三個選項:“我的電腦”、“我的桌面”“我的文檔”。選擇“我的電腦”,在下方的lvLocal(ListView控件名)框中就會顯示“我的電腦”下的盤符信息。如果在右邊的下拉框中選擇“我的電腦”,就會在下方的lvRemote(ListView控件名)框中顯示遠(yuǎn)程機子“我的電腦”下的盤符信息,看到對方有幾個盤符。文本框中顯示的是當(dāng)前文件的路徑。</p><p> 圖4 文件傳輸?shù)慕缑?lt
46、;/p><p> 上圖就顯示了本地計算機中“我的電腦”的信息和遠(yuǎn)程計算機中“我的文檔”的信息。對于如何把遠(yuǎn)程計算機上的信息傳輸過來,對于接受到的信息又是如何處理,如何區(qū)分哪些是盤符信息,哪些是文件夾、哪些是文件信息,我們在服務(wù)器端程序設(shè)計中將作重點描述。</p><p> 3.2.5 關(guān)閉、重啟計算機</p><p> 在監(jiān)控端單擊“重啟機器”,在已經(jīng)與遠(yuǎn)程計算
47、機建立連接后,調(diào)用SendData方法,發(fā)送一個命令動詞(字符串):"restart"。當(dāng)對方接收到此命令信息后,就會“重新啟動計算機”。具體實現(xiàn)過程在服務(wù)器端作介紹。</p><p> 關(guān)閉計算機為同一原理。</p><p> 當(dāng)網(wǎng)絡(luò)管理人員發(fā)現(xiàn)有非法操作,比如上班玩游戲、安裝非法程序等,即可采取發(fā)送警告或強制措施,強迫其停止相應(yīng)操作。</p>&l
48、t;p> 3.3 服務(wù)器端(被監(jiān)控端)程序設(shè)計</p><p> 被監(jiān)控端界面非常的簡單,有4個CommandBoutton按鈕。在主窗體(frmMain.frm)中添加了兩個WinSock 控件,分別取名為tcpFile和 tcpserver。tcpserver用于接收一些命令和簡短的信息,而tcpFile專用于文件的傳遞。</p><p> 3.3.1 進行偵聽,時刻準(zhǔn)備
49、接受連接</p><p> 在“開始服務(wù)”按鈕下的程序為:</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è)計時是可讀/寫的,而且是可用的。在這里,我把服務(wù)器程序的端口
51、(LocalPort屬性)設(shè)置為2001和3000。</p><p> 計算機“端口”( Port)是計算機與外界通訊交流的出口.其中硬件領(lǐng)域的端口又稱接口,如:USB端口、串行端口等。軟件領(lǐng)域的端口一般指網(wǎng)絡(luò)中面向連接服務(wù)和無連接服務(wù)的通信協(xié)議端口,是一種抽象的軟件結(jié)構(gòu),包括一些數(shù)據(jù)結(jié)構(gòu)和I/O(基本輸入輸出)緩沖區(qū)。一般低于1024的端口都有確切的定義,它們對應(yīng)著因特網(wǎng)上常見的一些服務(wù)。為了避免沖突,我們最
52、好使用大于1024的端口號。</p><p> 當(dāng)tcpserver和tcpFile兩控件用Listen方法進入偵聽狀態(tài)后,就等待客戶端程序的連接請求。當(dāng)客戶端提出連接請求時,就進行連接。</p><p> 3.3.2 子功能程序?qū)崿F(xiàn)</p><p> 當(dāng)WinSock控件的State狀態(tài)為sckConnected,則說明雙方已成功建立了連接。此時客戶端就可以
53、數(shù)據(jù)發(fā)送過來(用tcpclient .SendData方法)。當(dāng)服務(wù)器程序接收到數(shù)據(jù)時,產(chǎn)生DataArrival事件,參數(shù)BytesTotal包含接收到的數(shù)據(jù)字節(jié)數(shù)。用GetData方法接收數(shù)據(jù)。把接收到的數(shù)據(jù)存放于strData變量中(strDate 為變長字符串(String)類型)中。</p><p> 程序?qū)τ诮邮盏降臄?shù)據(jù)進行分析,得到一些命令動詞。判斷各個命令動詞,然后解釋并執(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變量來存儲客戶端發(fā)過來的命令動詞,便于程序進行分辨處理。</p><p> Select Case Ucase ( strCmd ) </p><p> Cas
57、e "RESTART"</p><p> Call AdjustTokenPrivilegesForNT '在95/98中調(diào)用沒作用 </p><p> Call ExitWindowsEx(EWX_REBOOT, 0)</p><p> Case "SHUTDOWN"</p><p&
58、gt; Call AdjustTokenPrivilegesForNT '在95/98中調(diào)用沒作用</p><p> Call ExitWindowsEx(EWX_SHUTDOWN, 0)</p><p> Case "SHOWMSG" '接收客戶端“發(fā)送消息”發(fā)送來的信息</p><p> MsgBox s
59、trArg</p><p> tcpserver.SendData "對方已經(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> 這是程序的一部分,實現(xiàn)了客戶端的五個功能:“重啟機器”、“關(guān)閉機器”、“發(fā)送消息”、文件操作中的“運行程序”和“監(jiān)視屏幕”。在關(guān)閉、重啟計算機中調(diào)用了API函
62、數(shù):ExitWindowsEx,在“發(fā)送消息”中把收到的信息用MsgBox顯示出來,并用SendData方法告示客戶端信息已經(jīng)收到?!斑\行程序”(EXECUTE)用GetRealPath函數(shù)取得服務(wù)器端計算機的真實路徑,然后調(diào)用RunShellExecute函數(shù),如果沒有指明要執(zhí)行的程序,那就“打開”了客戶端指定的文件夾;如果指明了要執(zhí)行程序,被指定的程序就運行起來了。例如:</p><p> 在客戶端發(fā)送:%
63、WinDir%\notepad.exe,在服務(wù)端就把 notepad.exe執(zhí)行起來。</p><p> 而對于“監(jiān)視屏幕”功能,也是發(fā)送了一個命令詞“CATCHSCREEN”,服務(wù)端就調(diào)用了CaptureScreen()函數(shù),生成了屏幕圖片并把它保存到一個文件中,然后再把文件傳送給客戶端,在客戶端單擊“SHOW”按鈕就把遠(yuǎn)程計算機的屏幕顯示出來了。</p><p> 3.3.3 “
64、文件傳輸”程序?qū)崿F(xiàn)</p><p> 前面提到:客戶端的“文件傳輸”窗體的右邊框架(RemoteFrame)顯示的是遠(yuǎn)程計算機的信息。對于如何把服務(wù)器端的“我的電腦”、“我的桌面”、“我的文檔”的信息傳送過去,并顯示出來呢?對于如何處理接受到的信息,如何區(qū)分哪些是盤符信息,哪些是文件夾、哪些是文件信息?我們在此作詳細(xì)說明。</p><p> 這里我們運用了一個重要技術(shù):在服務(wù)器端窗體中
65、添加了三個控件:驅(qū)動器列表框(DriveListBox)、目錄列表框(DirListBox)和文件列表框(FileListBox)。</p><p> 當(dāng)客戶端要求的是“我的電腦”信息,我們就把驅(qū)動器列表框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)前路徑,作為所傳輸文件的上級目
68、錄</p><p> strData = GetDirsAndFilesInfo(mypath) '用GetDirsAndFilesInfo獲得桌面的所有信息</p><p> tcpserver.SendData strData '把信息發(fā)送給客戶端 </p><p> 在GetDirsAndFilesInfo函數(shù)中其實就是把目錄
69、列表框(DLremote)和文件列表框(FLremote)的內(nèi)容讀出。</p><p> 圖5 驅(qū)動器、文件夾和文件信息的讀取</p><p> 對于“我的文檔”,它與“我的桌面”是同一原理。而對于某個文件夾下的內(nèi)容,我們的處理方法也是相同的。只是必須明確知道此文件夾的具體路徑。</p><p> 那我們又是如何區(qū)分哪些是盤符信息,哪些是文件夾、哪些是文件信息
70、的呢?</p><p> 我們把接收到的信息用ShowRemoteDirectiresAndFiles函數(shù)把它顯示到右邊的lvRemote(ListView 控件名)框中。用"PTH"之前的字符串來顯示路徑,用"DRV"來表示得到的是遠(yuǎn)程計算機的盤符信息,用"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 對象的形式顯示數(shù)據(jù)。每個 ListItem 對象都可有一個可選的圖標(biāo)與其標(biāo)簽相關(guān)聯(lián)。這里我用“drive”(圖像名)表示驅(qū)動器,用“folder”(圖像名)表示文件夾,用“file”(圖像名)表示文件。當(dāng)然也有大圖標(biāo),小圖標(biāo)
78、的區(qū)別。</p><p> 對于客戶端的“我的電腦”、“我的桌面”“我的文檔”各信息在lvLocal框中顯示的原理,與此處是完全相同的。</p><p> 上面我們完成了在lvLocal和lvRemote中分別顯示文件夾和文件信息,接下來我們就可以進行“文件傳輸”,在選定了監(jiān)控端的文件后,我們首先把文件名傳送給被監(jiān)控端,然后單擊按鈕,通過tcpSendFile.SendData 把文件
79、傳送過去,被監(jiān)控端用tcpFile.GetData接收并生成文件即可。但其中涉及了文件的訪問,即文件的讀取操作和寫入操作。為了保持文件的尺寸,應(yīng)使用二進制型訪問。需要注意的是:當(dāng)把二進制數(shù)據(jù)寫入文件中時,使用的變量是Byte數(shù)據(jù)類型的數(shù)組,而不是String變量。</p><p> 文件有大有小,有些文件不到1K,而有些有幾兆(M),幾兆的文件并不能一次性就傳輸完畢,我們采取分塊傳輸,每塊的大小為6000字節(jié)。
80、主要是調(diào)用了SendOneFile()和WriteBlockToFile()兩個函數(shù)。</p><p> 當(dāng)文件接收完畢時,發(fā)送一個結(jié)束標(biāo)志。在監(jiān)控端可收到“對方已經(jīng)接收完畢!”的提示信息。與此同時,我們還必須刷新被監(jiān)控端當(dāng)前文件夾下的信息。刷新過程就是再次調(diào)用GetDirsAndFilesInfo函數(shù),并在lvRemote框中重新生成各個圖標(biāo)。</p><p> 對于文件從被監(jiān)控端傳
81、輸?shù)奖O(jiān)控端過程,選定遠(yuǎn)程計算機的文件,再單擊按鈕即可。實現(xiàn)原理與文件從監(jiān)控端傳輸?shù)奖槐O(jiān)控端是相同的。</p><p><b> 4 總結(jié)與展望</b></p><p> 以上討論了基于客戶/ 服務(wù)器模式,采用TCP 協(xié)議,用Winsock技術(shù)建立連接的網(wǎng)絡(luò)計算機實時監(jiān)控系統(tǒng)的設(shè)計過程。著重討論了客戶端通訊程序和服務(wù)器端通訊程序的設(shè)計。</p><
82、;p> 當(dāng)然它存在一定的缺陷,如在計算機開啟時,服務(wù)端應(yīng)用程序就能夠自動運行,并使程序運行后,把服務(wù)端應(yīng)用程序的圖標(biāo)顯示在Windows任務(wù)欄的提示區(qū)(托盤)中,而不顯示在任務(wù)欄或桌面上,給用戶以更加潔凈的感覺。或者更進一步,使服務(wù)端系統(tǒng)運行后不僅在任務(wù)欄、桌面上不出現(xiàn),而且在任務(wù)列表中都不顯示(即同時按下Ctrl+Alt+Del鍵出現(xiàn)的任務(wù)窗口中找不到服務(wù)端系統(tǒng)的任務(wù)條,而實際上已運行)。但由于本人專業(yè)知識水平有限,時間短暫的
83、制約,設(shè)計上的不足之處,還望各位批評指正。</p><p><b> 參考文獻:</b></p><p> [1](美)Eric Brierler,Anthony Prince,David Rinaldi 著,王建華、陳一飛、吳炳林等譯,《Visual Basic 6 開發(fā)人員指南》 機械工業(yè)出版社,1999年1月</p><p> [2
84、] 蕭秋水等編著.《windows網(wǎng)絡(luò)編程之VB篇》清華大學(xué)出版社,2001.2</p><p> [3] 汪曉平等編著.《Visual Basic 網(wǎng)絡(luò)高級編程》人民郵電出版社,2001.4</p><p> [4] 劉瑞新等編著?!秜isual basic 程序設(shè)計教程》機械工業(yè)出版社2000.10</p><p> [5](美)Carl FrankLin
85、 著,瀟湘工作室 譯,《Visual Basic 6.0 Internet 編程指南》人民郵電出版社, 1999年11月</p><p> [6] 林永,張樂強編著, 《Visual Basic 6.0用戶編程手冊》,人民郵電出版社,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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- cs模式遠(yuǎn)程控制程序設(shè)計畢業(yè)論文
- 畢業(yè)論文---網(wǎng)絡(luò)遠(yuǎn)程通信與控制程序設(shè)計
- 畢業(yè)論文---網(wǎng)絡(luò)遠(yuǎn)程通信與控制程序設(shè)計
- 畢業(yè)設(shè)計---計算機遠(yuǎn)程控制程序設(shè)計
- 畢業(yè)論文--電鑄過程plc控制程序設(shè)計
- 畢業(yè)論文--電鑄過程plc控制程序設(shè)計
- 基本控制程序設(shè)計
- 過程控制程序
- 工程控制程序
- 畢業(yè)論文范文——基于plc作息時間控制程序設(shè)計
- 特殊過程控制程序
- 畢業(yè)論文---電鍍自動生產(chǎn)線plc控制程序設(shè)計
- 塑料注塑成型生產(chǎn)線控制程序設(shè)計【畢業(yè)論文+cad】
- 檢測過程控制程序
- 施工過程控制程序
- 關(guān)鍵過程控制程序
- 施工過程控制程序
- 采購過程控制程序
- 電鍍自動生產(chǎn)線plc控制程序設(shè)計畢業(yè)論文
- 自動門控制程序設(shè)計畢業(yè)設(shè)計
評論
0/150
提交評論