2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩10頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、<p>  目 錄</p><p>  第一章 引言 …………………………………………………………………………………1 </p><p>  第二章 相關技術 …………………………………………………………………………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 基礎 …………………………………………………………………2</p><p>  2.

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

4、………………………………3</p><p>  第三章 CS模式遠程控制程序設計 ……………………………………………… 3</p><p>  3.1 主要實現(xiàn)功能 ………………………………………………………………………3</p><p>  3.2 客戶端(監(jiān)控端)設計 ………………………………………………………………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關閉、重啟計算機 ……………………………………………………………………7 </p><p>  3.3 服務器端(被監(jiān)控端)程序設計 …………………………………………………7</p><p>  3.3.1 進行偵聽,時刻準備接受連接 ………………………………………………………7</p>&l

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

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

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

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

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

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

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

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

15、。進而使得設計者能設計出更多功能或更具有用戶友好性的網(wǎng)絡軟件。</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)絡。 </p><p>  到底選擇哪一種協(xié)議通常是由需要創(chuàng)建的應用程序決定的。下面的幾個問題將有助于選擇適宜的協(xié)議:</p><p>

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

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

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

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

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

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

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

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

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

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

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

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

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

30、gt;  “設置”菜單中主要用到的菜單項是“查看”?!安榭础庇衅湎乱患壊藛?,主要是大圖標、小圖標、列表和詳細資料四項。</p><p>  “幫助”菜單主要是對所做的這個軟件的一個簡單介紹。</p><p>  3.2.1 添加主機</p><p>  圖2 添加主機的界面</p><p>  我們用WinSock控件實現(xiàn)的是點對點的通

31、訊。那其中一點是客戶端計算機,另一點是服務端的計算機。通過“添加主機”這一操作,我們就把服務端計算機的信息保存起來,為tcpclient.RemoteHost、 tcpclient.RemotePort 提供了數(shù)據(jù)(tcpClient為WinSock 控件的名字)。</p><p>  添加了主機后我們在主窗體上會看到多了一個“計算機”圖標。在這里使用了ListView控件。</p><p&g

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

33、ImageList 控件,分別用來設置 Icons 和 SmallIcons 屬性。當然,要在 ListView 控件中使用圖像,必須先向兩個 ImageList 控件中充填適當?shù)膱D像。隨后,將 ListView 控件和ImageList 控件關聯(lián)??梢栽贚istView 控件的“屬性頁”上設定;也可以在運行時分配 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 控件關聯(lián)。不在設計時,而在運行時設置 ImageList 控件的一個原因,是因為不同用戶需要動態(tài)的更換圖像。例如,使用單色顯示器的用戶會希望圖標各部分的對比度大一些。</p><p>  ListView 控件中對于每一個ListItem 對象到底顯示哪個圖像,由它們索

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

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

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

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

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

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

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

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

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

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

46、;/p><p>  上圖就顯示了本地計算機中“我的電腦”的信息和遠程計算機中“我的文檔”的信息。對于如何把遠程計算機上的信息傳輸過來,對于接受到的信息又是如何處理,如何區(qū)分哪些是盤符信息,哪些是文件夾、哪些是文件信息,我們在服務器端程序設計中將作重點描述。</p><p>  3.2.5 關閉、重啟計算機</p><p>  在監(jiān)控端單擊“重啟機器”,在已經與遠程計算

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

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

49、接受連接</p><p>  在“開始服務”按鈕下的程序為:</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 屬性:返回或者設置所用到的本地端口。在設計時是可讀/寫的,而且是可用的。在這里,我把服務器程序的端口

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

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

53、數(shù)據(jù)發(fā)送過來(用tcpclient .SendData方法)。當服務器程序接收到數(shù)據(jù)時,產生DataArrival事件,參數(shù)BytesTotal包含接收到的數(shù)據(jù)字節(jié)數(shù)。用GetData方法接收數(shù)據(jù)。把接收到的數(shù)據(jù)存放于strData變量中(strDate 為變長字符串(String)類型)中。</p><p>  程序對于接收到的數(shù)據(jù)進行分析,得到一些命令動詞。判斷各個命令動詞,然后解釋并執(zhí)行。在這里調用了 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中調用沒作用 </p><p>  Call ExitWindowsEx(EWX_REBOOT, 0)</p><p>  Case "SHUTDOWN"</p><p&

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

59、trArg</p><p>  tcpserver.SendData "對方已經收到!"</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)了客戶端的五個功能:“重啟機器”、“關閉機器”、“發(fā)送消息”、文件操作中的“運行程序”和“監(jiān)視屏幕”。在關閉、重啟計算機中調用了API函

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

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

64、文件傳輸”程序實現(xiàn)</p><p>  前面提到:客戶端的“文件傳輸”窗體的右邊框架(RemoteFrame)顯示的是遠程計算機的信息。對于如何把服務器端的“我的電腦”、“我的桌面”、“我的文檔”的信息傳送過去,并顯示出來呢?對于如何處理接受到的信息,如何區(qū)分哪些是盤符信息,哪些是文件夾、哪些是文件信息?我們在此作詳細說明。</p><p>  這里我們運用了一個重要技術:在服務器端窗體中

65、添加了三個控件:驅動器列表框(DriveListBox)、目錄列表框(DirListBox)和文件列表框(FileListBox)。</p><p>  當客戶端要求的是“我的電腦”信息,我們就把驅動器列表框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 '保存當前路徑,作為所傳輸文件的上級目

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

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

70、的呢?</p><p>  我們把接收到的信息用ShowRemoteDirectiresAndFiles函數(shù)把它顯示到右邊的lvRemote(ListView 控件名)框中。用"PTH"之前的字符串來顯示路徑,用"DRV"來表示得到的是遠程計算機的盤符信息,用"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 對象都可有一個可選的圖標與其標簽相關聯(lián)。這里我用“drive”(圖像名)表示驅動器,用“folder”(圖像名)表示文件夾,用“file”(圖像名)表示文件。當然也有大圖標,小圖標

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

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

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

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

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

83、制約,設計上的不足之處,還望各位批評指正。</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)絡編程之VB篇》清華大學出版社,2001.2</p><p>  [3] 汪曉平等編著.《Visual Basic 網(wǎng)絡高級編程》人民郵電出版社,2001.4</p><p>  [4] 劉瑞新等編著?!秜isual basic 程序設計教程》機械工業(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)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論