版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、學(xué)位論文摘要與正文內(nèi)容提綱:1) 簡(jiǎn)述背景,提出問(wèn)題,說(shuō)明題目的意義與價(jià)值。2) 分析研究相關(guān)有理論、原理與技術(shù)。3) 提出理論方案與技術(shù)路線(xiàn)。4) 研究的工作與內(nèi)容及創(chuàng)新5) 驗(yàn)證結(jié)論、性能指標(biāo)。6) 結(jié)果與結(jié)論的理論與實(shí)際價(jià)值。*基于c#的遠(yuǎn)程控制管理設(shè)計(jì)摘 要1.xxx本程序是用microsoft平臺(tái)下的c#語(yǔ)言實(shí)現(xiàn)遠(yuǎn)程控制。c#是一種簡(jiǎn)單、現(xiàn)代、面向?qū)ο笄翌?lèi)型安全的編程語(yǔ)言。本系統(tǒng)中,客戶(hù)端使用的是c#的窗體應(yīng)用程序,服務(wù)器端用的是服務(wù)應(yīng)用程序。23在程序中,用套接字實(shí)現(xiàn)了遠(yuǎn)程信息交換,它的具體功能主要是文件上傳和文件下載。在這之中,用tcpclient和tcplistener來(lái)完成遠(yuǎn)
2、程連接,服務(wù)器端打開(kāi)一個(gè)端口監(jiān)聽(tīng)來(lái)自網(wǎng)絡(luò)中的信息流,客戶(hù)端使用服務(wù)器端的ip和監(jiān)聽(tīng)的端口號(hào)取得與服務(wù)器的連接??蛻?hù)端使用tcpclient的對(duì)象來(lái)初始化networkstream對(duì)象,從而實(shí)現(xiàn)對(duì)字節(jié)流的傳送的接收操作;服務(wù)器端使用tcplistener的對(duì)象來(lái)初始化networkstream對(duì)象,從而獲得與客戶(hù)端的網(wǎng)絡(luò)流交換。本程序中客戶(hù)端通過(guò)發(fā)送關(guān)機(jī)命令實(shí)現(xiàn)遠(yuǎn)程關(guān)閉服務(wù)器電腦;使用服務(wù)器的mac地址實(shí)現(xiàn)遠(yuǎn)程喚醒服務(wù)器??蛻?hù)端向服務(wù)器發(fā)送16次服務(wù)器的mac地址,便能實(shí)現(xiàn)遠(yuǎn)程服務(wù)器的喚醒操作。在程序中使用鍵盤(pán)鉤子(hook)模擬鍵盤(pán)、鼠標(biāo)事件模擬鼠標(biāo)。要實(shí)現(xiàn)桌面的遠(yuǎn)程控制,首先就是獲取服務(wù)器的
3、屏幕,用類(lèi)似于傳送文件的方式把服務(wù)器屏幕圖片流傳送到客戶(hù)端顯示。在客戶(hù)端用鍵盤(pán)鉤子獲取所有按鍵事件,能夠屏蔽系統(tǒng)對(duì)鍵盤(pán)的響應(yīng)(如按下windows鍵,開(kāi)始菜單不會(huì)彈出),只把按下的鍵的健值記錄下來(lái)傳送到服務(wù)器端;客戶(hù)端獲取鼠標(biāo)是用鼠標(biāo)事件獲取,包括左右鍵的單雙擊及中鍵的滾動(dòng)。服務(wù)器端獲得客戶(hù)端傳送過(guò)來(lái)的鍵盤(pán)、鼠標(biāo)事件后,用api實(shí)現(xiàn)模擬按鍵操作和模擬鼠標(biāo)點(diǎn)擊、滾動(dòng)操作。從而達(dá)到客戶(hù)端遠(yuǎn)程控制服務(wù)器端的目的。45關(guān)鍵字:套接字、鍵盤(pán)鉤子、c/s結(jié)構(gòu)、遠(yuǎn)程控制c#-based design of the remote control and managementabstract:this soft
4、ware use c# under ms platform to achiveve computer remote control.c# is a programming language that is simple,modern,object-oriented and type of security.in this system,client-side use windows form application and service-side use windows service application to achieve.in the program,socket is used
5、to complete remote infomation exchange.its specific function is upload a file or folder and download a file or folder.in socket,two class tcpclient and tcplistener realize remote connect throw internet, service-side open a port to listen the information form internet,and client-side connect with the
6、 service-side by ip and port of server computer.client-side use class tcpclient to initialize networkstreams object,so that networkstreams object can get send and get byte stream with service computer.server-side use tcplistener to initialize networkstreams object to complete the same work of client
7、-side. in the program,client-side send shut down command to service-side and server computer close itself.client-side use the mac address of server computer to wake up server computer.client-side send the mac address 16 times to service-side and then server computer is waked up.in the remote control
8、 part,we use keyboard hook to simulate keyboard and use mouse event to simulate mouse operation.in order to achieve remote control,first we should get service-sides screen,and then we can translate it to client-side in the way like download file.when we use hook to simuate keyboard and mouse event t
9、o simulate to mouse,local system will not response,such as when we press the system key,the start menu will not open.we get local keyboard and mouse event and send it to service-side,then analyze the command and simulate them in server computer.key words:socket、keyboard hook、c/s、remote control目錄第一章
10、前言11.1 課題背景11.2 課題意義11.3 研究?jī)?nèi)容11.4 論文結(jié)構(gòu)2第二章 相關(guān)技術(shù)介紹42.1 .net 框架42.2 c# 編程語(yǔ)言52.3 套接字(socket接口)6第三章 系統(tǒng)分析與系統(tǒng)設(shè)計(jì)73.1 系統(tǒng)分析73.1.1 系統(tǒng)功能介紹73.1.2 系統(tǒng)流程圖73.1.2 子模塊流程圖 遠(yuǎn)程開(kāi)關(guān)機(jī) 文件的傳送 文件下載 遠(yuǎn)程控制113.2 系統(tǒng)設(shè)計(jì)123.2.1 客戶(hù)端設(shè)計(jì) 登錄窗體設(shè)計(jì) 主界面設(shè)計(jì)下載文件界面133.2.2 服務(wù)器端設(shè)計(jì)13第四章 客戶(hù)端具
11、體實(shí)現(xiàn)154.1 用戶(hù)登錄154.1.1 實(shí)現(xiàn)登錄154.1.2 為其它類(lèi)提供登錄接口164.2 主界面實(shí)現(xiàn)164.2.1 開(kāi)關(guān)機(jī)實(shí)現(xiàn) 遠(yuǎn)程喚醒 遠(yuǎn)程關(guān)機(jī)174.2.2 遠(yuǎn)程控制174.2.3 發(fā)送文件 傳送單個(gè)文件 對(duì)服務(wù)器傳送文件夾214.2.4 下載文件 下載單個(gè)文件 下載文件夾23第五章 服務(wù)器端具體實(shí)現(xiàn)255.1 遠(yuǎn)程控制255.2 傳送文件265.2.1 傳送單個(gè)文件265.2.2 傳送文件夾265.3 下載文件275.3.1 下載單個(gè)文件275.3.2 下載文件夾28第六章
12、 系統(tǒng)測(cè)試296.1 登錄測(cè)試296.2 開(kāi)關(guān)機(jī)測(cè)試296.2.1 遠(yuǎn)程關(guān)機(jī)測(cè)試296.2.2 遠(yuǎn)程喚醒測(cè)試306.3 遠(yuǎn)程控制測(cè)試306.4傳送文件測(cè)試316.4.1 傳送單個(gè)文件316.4.2 傳單文件夾326.5 下載文件測(cè)試326.5.1下載單個(gè)文件326.5.2 下載文件夾33結(jié)論35致謝36參考文獻(xiàn)37第1章 前 言1.1 課題背景c#出現(xiàn)十年來(lái),許多c、c+以及vb程序員轉(zhuǎn)投它的門(mén)下,這不僅是因?yàn)閏#是一個(gè)致力于敏捷開(kāi)發(fā)和快速應(yīng)用程序開(kāi)發(fā)的工具。在如今計(jì)算機(jī)硬件快速發(fā)展,速度已經(jīng)不再是瓶頸的情況下,開(kāi)發(fā)效率是人們追求的唯一目標(biāo)。而c#就是順應(yīng)時(shí)代而產(chǎn)生的,它是一種簡(jiǎn)單、方便和快捷
13、的編程語(yǔ)言。與此同時(shí),網(wǎng)絡(luò)的飛速發(fā)展給人們帶來(lái)了極大的方便。如今人們的日常生活越來(lái)越離不開(kāi)網(wǎng)絡(luò),也越來(lái)越依賴(lài)網(wǎng)絡(luò)。在目前,對(duì)于網(wǎng)絡(luò)信息的傳輸,人們主要使用套接字編程來(lái)實(shí)現(xiàn),c#中也可使用套接字編程。它通過(guò)編碼的流在網(wǎng)絡(luò)上傳輸信息,人們獲得流之后又把它解碼出來(lái)獲得需要的信息。本課題就是在這樣的環(huán)境之下應(yīng)運(yùn)而生的,它實(shí)現(xiàn)了信息在網(wǎng)絡(luò)上的傳輸,客戶(hù)端實(shí)時(shí)的控制服務(wù)器。1.2 課題意義本課題旨在方便人們的學(xué)習(xí)和工作,它能在客戶(hù)端能過(guò)網(wǎng)絡(luò)控制服務(wù)器,實(shí)現(xiàn)信息的實(shí)時(shí)交換,而服務(wù)器又不需要由人控制。在日常生活中,人們可以使用它在不同的辦公地點(diǎn)來(lái)實(shí)現(xiàn)文件的傳輸,這可以節(jié)約時(shí)間在往返工作地點(diǎn)的路上。同時(shí),如果需
14、要多臺(tái)電腦進(jìn)行同一項(xiàng)任務(wù)時(shí),可以通過(guò)本地控制方便控制。擴(kuò)展開(kāi)來(lái),本系統(tǒng)增加可以增加連接服務(wù)器數(shù)量,這樣就可以對(duì)多臺(tái)電腦實(shí)時(shí)的監(jiān)控,這在管理上有一定的作用。1.3 研究?jī)?nèi)容為了實(shí)現(xiàn)本系統(tǒng),論文做了以下幾方面的研究。 1tcp/ip網(wǎng)絡(luò)協(xié)議。本程序中通過(guò)tcplistener和tcpclient實(shí)現(xiàn)客戶(hù)端和服務(wù)器的連接。2魔術(shù)包工具(magic packet)。魔術(shù)包是amd公司開(kāi)發(fā)的,它的多播(broadcast)功能通過(guò)發(fā)送16mac地址給“睡著”的電腦,網(wǎng)卡通過(guò)報(bào)警功能實(shí)現(xiàn)計(jì)算機(jī)的喚醒。3屏幕抓取技術(shù)。在實(shí)現(xiàn)遠(yuǎn)程控制的過(guò)程中,要實(shí)現(xiàn)實(shí)時(shí)的控制服務(wù)器,就需要抓取系統(tǒng)當(dāng)前屏幕的圖片。4鍵盤(pán)鉤子。
15、也是在遠(yuǎn)程控制當(dāng)中,客戶(hù)端使用鍵盤(pán)鉤子獲得本地鍵盤(pán)的按鍵鍵值,同時(shí)可以對(duì)不同的按鍵進(jìn)行相應(yīng)的操作,并且阻止按鍵傳向下一個(gè)應(yīng)用程序。5windows api。同樣在遠(yuǎn)程控制的過(guò)程中,服務(wù)器端用api中的“user32.dll”實(shí)現(xiàn)鼠標(biāo)和鍵盤(pán)的模擬操作。6套接字(socket)。套接字是本系統(tǒng)實(shí)現(xiàn)的基礎(chǔ),在程序中,使用socket編程實(shí)現(xiàn)數(shù)據(jù)在網(wǎng)絡(luò)中傳輸。1.4 論文結(jié)構(gòu)本畢業(yè)設(shè)計(jì)報(bào)告內(nèi)容可以分為六個(gè)部分,分別是系統(tǒng)及相關(guān)技術(shù)介紹(第1、2、3章)、系統(tǒng)的實(shí)現(xiàn)(第4、5章)和系統(tǒng)的測(cè)試(第六章)。各章的主要內(nèi)容安排如下。第1章:前言。介紹了本課題的來(lái)源、目的、意義,論文研究的內(nèi)容和各章的安排。第2
16、章:相關(guān)技術(shù)介紹。本章介紹了.net framework、vs平臺(tái)下的c#語(yǔ)言以及相關(guān)網(wǎng)絡(luò)技術(shù)(tcp/ip協(xié)議的使用)。第3章:系統(tǒng)分析與系統(tǒng)設(shè)計(jì)。本章分析了系統(tǒng)各個(gè)模塊的功能,也給出了系統(tǒng)各個(gè)模塊的詳細(xì)設(shè)計(jì)方案。對(duì)服務(wù)器和客戶(hù)端的設(shè)計(jì)做了分別介紹。第4章:客戶(hù)端具體實(shí)現(xiàn)windows form。本系統(tǒng)的客戶(hù)端是用windows實(shí)體應(yīng)用程序?qū)崿F(xiàn)的。在本章中對(duì)客戶(hù)端的各個(gè)模塊做了詳細(xì)的介紹,并列出了核心代碼。第5章:服務(wù)器端具體實(shí)現(xiàn)windows service。本系統(tǒng)的服務(wù)器端是用windows服務(wù)應(yīng)用程序?qū)崿F(xiàn)的。服務(wù)器端只有一個(gè)事件處理模塊,本章對(duì)它進(jìn)行了具體講解,也把它對(duì)客戶(hù)端的每個(gè)請(qǐng)求
17、作出的相應(yīng)響應(yīng)進(jìn)行了具體的分析。第6章:系統(tǒng)測(cè)試。本章對(duì)系統(tǒng)的主要功能進(jìn)行了相應(yīng)的測(cè)試工作,同時(shí)也對(duì)比較容易出錯(cuò)的地方進(jìn)行了測(cè)試及說(shuō)明。第2章 相關(guān)技術(shù)介紹本軟件的開(kāi)發(fā)采用c/s結(jié)構(gòu)。在客戶(hù)端是windows form的應(yīng)用程序,服務(wù)器端是windows service的應(yīng)用程序。客戶(hù)端和服務(wù)器端都是用vs平臺(tái)下的c#語(yǔ)言實(shí)現(xiàn)的。相對(duì)于其它開(kāi)發(fā)語(yǔ)言而言,c#簡(jiǎn)單易學(xué)、界面操作方便(類(lèi)似visual basic),同時(shí)又能實(shí)現(xiàn)c+一樣強(qiáng)大的功能。因此選擇它作為開(kāi)發(fā)本軟件的語(yǔ)言。開(kāi)發(fā)本軟件是選用的較新的vs2008,它的功能相當(dāng)強(qiáng)大,也很好用。相對(duì)于vs2005而言,vs2008在做網(wǎng)頁(yè)方面增加了
18、許多新的功能,如asp.net3.5、ctr add-in framework 、 additional enhancement等。這些新增功能相對(duì)于本程序來(lái)說(shuō)影響并不大,因此不做具體介紹。2.1 .net 框架.net framework 是microsoft為開(kāi)發(fā)應(yīng)用程序而創(chuàng)建的一個(gè)富有革命性的新平臺(tái)。上面這句話(huà)時(shí).net的定義,定義給我們兩點(diǎn)啟示。第一:它沒(méi)有清楚的說(shuō)明“在windows操作系統(tǒng)上開(kāi)發(fā)應(yīng)用程序”。盡管.net framework 的 microsoft 版本運(yùn)行在 windows操作系統(tǒng)上,但是.net framework也可以運(yùn)行在其他操作系統(tǒng)上,例如開(kāi)源的mono就是
19、一個(gè)例子。mono項(xiàng)目不僅可以運(yùn)行在windows系統(tǒng)上,也可以運(yùn)行在 linux, freebsd, unix, mac os x和solaris上。第二:.net framework 定義并沒(méi)有限制應(yīng)用程序的類(lèi)型。這是因?yàn)楸緛?lái)就沒(méi)有限制。.net framework 可以創(chuàng)建windows 應(yīng)用程序、web 應(yīng)用程序、web 服務(wù)和其他各種類(lèi)型的應(yīng)用程序。.net framework 的設(shè)計(jì)方式保證它可以用于各種語(yǔ)言,例如:c#、c+、visual basic、jscript,甚至一些舊的語(yǔ)言,如cobol。為此,還推出了這些語(yǔ)言的.net版本。所有這些語(yǔ)言都可以訪(fǎng)問(wèn).net framew
20、ork,他們還可以彼此交互。c#開(kāi)發(fā)人員可以使用visual basic程序員編寫(xiě)的代碼,反之亦然。.net framework主要是為了實(shí)現(xiàn)下面的目標(biāo):1提供一致的面向?qū)ο蟮木幊汰h(huán)境,而無(wú)論對(duì)象代碼是在本地存儲(chǔ)和執(zhí)行還是在本地執(zhí)行單在internet上分布、或者是在遠(yuǎn)程執(zhí)行。2提供將軟件部署和版本控制沖突最小化的代碼執(zhí)行環(huán)境。3提供代碼(包括由未知的或不完全受信的第三方創(chuàng)建的代碼)安全的執(zhí)行環(huán)境。第四:提供可消除腳本環(huán)境或解釋環(huán)境性能的代碼執(zhí)行環(huán)境。第五:使開(kāi)發(fā)人員的經(jīng)驗(yàn)在面對(duì)類(lèi)型大不相同的應(yīng)用程序(如基于windows的應(yīng)用程序和基于web的應(yīng)用程序)時(shí)保持一致。第六:按照工業(yè)標(biāo)準(zhǔn)生成所有
21、通信,以確?;?net framework的代碼可與任何其他代碼集成。2.2 c# 編程語(yǔ)言c#是用于創(chuàng)建運(yùn)行在.net公共語(yǔ)言運(yùn)行庫(kù)上應(yīng)用程序的語(yǔ)言之一,它從c語(yǔ)言和c+語(yǔ)言演化而來(lái),是microsoft專(zhuān)門(mén)為使用.net平臺(tái)而創(chuàng)建的,并且考慮了其他語(yǔ)言的許多優(yōu)點(diǎn),例如visual basic的易用性。c#本身是面向?qū)ο蟮恼Z(yǔ)言,c#還進(jìn)一步提供了對(duì)面向組件(component oriented)編程的支持?,F(xiàn)代軟件設(shè)計(jì)日益依賴(lài)于自包含和自描述功能包形式的軟件組件。這種組件的關(guān)鍵在于,它們通過(guò)屬性(property)、方法(method)和事件(event)來(lái)提供編程模型并且還提供了關(guān)于組件
22、的聲明信息的屬性(attribute),并且還編入了自己的文檔。c#提供的語(yǔ)言構(gòu)造直接支持這些概念,這使得c#語(yǔ)言自然而然成為創(chuàng)建和使用軟件組件的首選。c#具有幾個(gè)非常優(yōu)秀的用于構(gòu)造健壯和持久應(yīng)用程序的特性,如下所示:1垃圾回收將自動(dòng)回收不再使用的對(duì)象所占用的內(nèi)存。2異常處理提供了結(jié)構(gòu)化和可擴(kuò)展的錯(cuò)誤檢測(cè)和恢復(fù)方法。3類(lèi)型安全的語(yǔ)言設(shè)計(jì)則避免了讀取未初始化的變量、數(shù)組索引超出邊界或執(zhí)行未經(jīng)檢查的類(lèi)型強(qiáng)制轉(zhuǎn)換等情形。此外,c#還提供具統(tǒng)一的類(lèi)型系統(tǒng),所有c#類(lèi)型(包括int和string之類(lèi)的基礎(chǔ)數(shù)據(jù)類(lèi)型)都繼承自一個(gè)唯一的基類(lèi)型:object。因此,所有類(lèi)型都共享一組通用的操作,并且任何類(lèi)型的
23、值都能以一致的方式進(jìn)行存儲(chǔ)、傳遞和操作。另外,c#同時(shí)支持用戶(hù)定義的引用類(lèi)型和值類(lèi)型,既允許對(duì)象的動(dòng)態(tài)分析,也允許輕量的內(nèi)聯(lián)存儲(chǔ)。為了確保c#程序和庫(kù)能夠以兼容的方式逐步演進(jìn),c#的設(shè)計(jì)充分強(qiáng)調(diào)了版本控制。許多語(yǔ)言都不太重視這一點(diǎn),導(dǎo)致采用那些語(yǔ)言編寫(xiě)的程序常常因?yàn)槠渌刨?lài)的庫(kù)的更新而無(wú)法正常工作。c#的設(shè)計(jì)在某些方面直接考慮到了版本控制的需要,其中包括單獨(dú)使用的virtual和override修改、方法重載決定規(guī)則以及對(duì)顯式接口成員聲明的支持。2.3 套接字(socket接口)套接字(socket)用于描述ip地址和端口,是一個(gè)通信鏈的句柄。應(yīng)用程序通常通過(guò)套接字向網(wǎng)絡(luò)發(fā)出請(qǐng)求或者應(yīng)答網(wǎng)絡(luò)請(qǐng)
24、求。 socket 接口是訪(fǎng)問(wèn) internet 使用得最廣泛的方法。 如果你有一臺(tái)剛配好tcp/ip協(xié)議的主機(jī),其ip地址是01, 此時(shí)在另一臺(tái)主機(jī)或同一臺(tái)主機(jī)上執(zhí)行ftp 01,顯然無(wú)法建立連接。因01 這臺(tái)主機(jī)沒(méi)有運(yùn)行ftp服務(wù)軟件。同樣, 在另一臺(tái)或同一臺(tái)主機(jī)上運(yùn)行瀏覽軟件 如netscape,輸入01,也無(wú)法建立連接?,F(xiàn)在,如果在這臺(tái)主機(jī)上運(yùn)行一個(gè)ftp服務(wù)軟件(該軟件將打開(kāi)一個(gè)socket, 并將其綁定到21端口),再在這臺(tái)主機(jī)上運(yùn)行一個(gè)web 服務(wù)軟件(該軟件將打開(kāi)
25、另一個(gè)socket,并將其綁定到80端口)。這樣,在另一臺(tái)主機(jī)或同一臺(tái)主機(jī)上執(zhí)行ftp 01,ftp客戶(hù)軟件將通過(guò)21端口來(lái)呼叫主機(jī)上由ftp 服務(wù)軟件提供的socket,與其建立連接并對(duì)話(huà)。而在netscape中輸入01時(shí),將通過(guò)80端口來(lái)呼叫主機(jī)上由web服務(wù)軟件提供的socket,與其建 立連接并對(duì)話(huà)。第3章 系統(tǒng)分析與系統(tǒng)設(shè)計(jì)3.1 系統(tǒng)分析3.1.1 系統(tǒng)功能介紹本系統(tǒng)旨在完成兩臺(tái)主機(jī)之間的通信??蛻?hù)端能夠從服務(wù)器上下載文件、上傳文件、控制服務(wù)器的開(kāi)關(guān)機(jī)和對(duì)服務(wù)器的遠(yuǎn)程實(shí)時(shí)控制。打開(kāi)客戶(hù)端應(yīng)用程序之后,用戶(hù)通過(guò)服務(wù)器的i
26、p和開(kāi)放監(jiān)聽(tīng)的端口號(hào)進(jìn)行登錄驗(yàn)證,登錄成功,表示能與服務(wù)器取得連接,也就能夠?qū)崿F(xiàn)兩臺(tái)主機(jī)之間的通信。客戶(hù)端能夠下載的文件主要是存放在服務(wù)器默認(rèn)位置的文件,當(dāng)需要下載時(shí),客戶(hù)端會(huì)列出服務(wù)器中所設(shè)置的默認(rèn)位置的文件列表供用戶(hù)選擇。用戶(hù)也可以下載其它位置的文件,但是需要自己輸入文件所在路徑和文件名。用戶(hù)也可以上傳文件,服務(wù)器中接收到文件后,會(huì)把上傳的文件保存在所設(shè)置的默認(rèn)位置??蛻?hù)端遠(yuǎn)程控制服務(wù)器時(shí),本地電腦的屏幕完成是服務(wù)器的屏幕,對(duì)鍵盤(pán)鼠標(biāo)的操作也完成是對(duì)遠(yuǎn)程服務(wù)器起作用。由于存在退出遠(yuǎn)程控制的服務(wù)器,因此設(shè)定了esc鍵作為退出遠(yuǎn)程控制服務(wù)的按鍵。用戶(hù)也可以控制服務(wù)器的開(kāi)關(guān)機(jī)。開(kāi)機(jī)時(shí),用戶(hù)通過(guò)發(fā)
27、送服務(wù)器的mac地址,便可實(shí)現(xiàn)服務(wù)器的喚醒。若要關(guān)機(jī),則只需發(fā)送關(guān)機(jī)命令,服務(wù)器端根據(jù)命令自動(dòng)完成關(guān)機(jī)操作。3.1.2 系統(tǒng)流程圖圖31 系統(tǒng)流程圖3.1.2 子模塊流程圖本系統(tǒng)旨在實(shí)現(xiàn)兩臺(tái)電腦之間的通信,這包括遠(yuǎn)程開(kāi)關(guān)機(jī)的實(shí)現(xiàn)、文件傳送與接收以及遠(yuǎn)程屏幕實(shí)時(shí)操作。 遠(yuǎn)程開(kāi)關(guān)機(jī)對(duì)于遠(yuǎn)程喚醒,是通過(guò)電腦的ip地址和mac地址實(shí)現(xiàn)的,每臺(tái)電腦都有唯一的mac地址,它是在生產(chǎn)電腦時(shí)確定的。它的流程圖如圖32所示。圖32 遠(yuǎn)程開(kāi)機(jī)流程圖遠(yuǎn)程關(guān)機(jī),也是用到ip地址,加上被關(guān)閉電腦的用戶(hù)名和密碼來(lái)實(shí)現(xiàn)。 文件的傳送對(duì)于單個(gè)文件,我們從本地選擇要傳送的文件,使用tcp協(xié)議與遠(yuǎn)程計(jì)
28、算機(jī)實(shí)現(xiàn)網(wǎng)絡(luò)互連。首先向服務(wù)器傳送一個(gè)要發(fā)送文件的指令,并且一起把文件名字發(fā)送過(guò)去。服務(wù)器接收到信息后,在默認(rèn)的位置下根據(jù)傳送過(guò)去的名字創(chuàng)建一個(gè)文件。然后從本地讀出要傳送文件的流,考慮到文件可能會(huì)比較大,不能一次性傳送給服務(wù)器,因此分批傳送。文件傳送的流程圖如圖33所示。對(duì)于文件夾,是把它中的文件一個(gè)一個(gè)傳送過(guò)去,因此傳送文件時(shí)和上面的一樣。傳送的時(shí)候會(huì)有子文件夾,因此在傳送時(shí)要考慮相對(duì)路徑的問(wèn)題。傳到服務(wù)器時(shí)也要根據(jù)相對(duì)位置創(chuàng)建相應(yīng)的文件夾。傳送文件夾的流程圖如圖34所示。圖33 傳送子文件流程圖圖34 傳送文件夾流程圖 文件下載在一個(gè)新的form窗體中實(shí)現(xiàn),先顯示默認(rèn)位置的文
29、件名稱(chēng)列表,如果需要下載該列表中的文件,直接選擇點(diǎn)擊下載即可。如果需要下載其它位置的文件,則需要輸入該文件的位置,才能完成下載。下載文件夾和文件是完全一樣的,而且也是用的同一個(gè)form窗體,只是在初始化的時(shí)候稍微改變一下。也要在下載按鈕的代碼中做一下檢測(cè),到底是要下載文件還是文件夾,這只需要一個(gè)bool變量。下載文件夾和上傳文件夾的算法是一樣的,因此它們的流程圖也一樣。這是不再重復(fù)給出。 遠(yuǎn)程控制主要是能完成類(lèi)似qq遠(yuǎn)程協(xié)助的功能。在客戶(hù)端能夠通過(guò)鍵盤(pán)鼠標(biāo)模擬遠(yuǎn)程電腦敲鍵盤(pán)鼠標(biāo)的功能,當(dāng)然也需要把遠(yuǎn)程電腦的實(shí)時(shí)界面?zhèn)鬟f到客戶(hù)端上。這主要就存在流量過(guò)大的問(wèn)題,在本程序中是用限時(shí)的方
30、法傳送,一秒鐘傳送一張圖片過(guò)來(lái)。圖35 遠(yuǎn)程控制流程圖3.2 系統(tǒng)設(shè)計(jì)3.2.1 客戶(hù)端設(shè)計(jì)本系統(tǒng)的客戶(hù)端是windows form應(yīng)用程序,其中由三個(gè)窗體組成,分別是登錄窗體、主界面和下載文件界面。 登錄窗體設(shè)計(jì)登錄窗體,它上面有兩個(gè)label、兩個(gè)textbox以及兩個(gè)button。label作為textbox的說(shuō)明,兩個(gè)textbox分別是服務(wù)器的ip號(hào)和端口號(hào)。button則是一個(gè)登錄、一個(gè)重置。其中登錄鍵是測(cè)試能否連接到服務(wù)器的,能夠連接就登錄,不能連接就會(huì)提示用戶(hù)輸入正確的ip和端口號(hào)。重置則是讓textbox1,也就是輸入ip地址的文本框獲得焦點(diǎn)。如果能夠連接到服務(wù)
31、器就登錄系統(tǒng),然后斷開(kāi)連接,這也是為了節(jié)約資源,也因?yàn)樵谄渌僮鲿r(shí)都有自己的連接,每個(gè)模塊使用完了之后也會(huì)釋放連接。 主界面設(shè)計(jì)主界面上面就只有一個(gè)menuitem菜單欄,上面的子項(xiàng)目有開(kāi)關(guān)機(jī)、遠(yuǎn)程控制、傳送文件和下載文件。開(kāi)關(guān)機(jī)包括喚醒和關(guān)機(jī);遠(yuǎn)程控制就一個(gè)項(xiàng)目;傳送文件包括傳送單個(gè)文件和傳送文件夾;下載文件也包括下載文件和下載文件夾。點(diǎn)擊相應(yīng)的選項(xiàng)會(huì)彈出相應(yīng)的操作界面。遠(yuǎn)程屏幕控制也是在主界面中完成的。當(dāng)進(jìn)入遠(yuǎn)程控制時(shí),屏幕會(huì)切換的全屏狀態(tài),以方便觀(guān)看與使用。在客戶(hù)端進(jìn)行相應(yīng)的操作就如同在服務(wù)器端電腦上進(jìn)行相應(yīng)的操作。例如打開(kāi)一個(gè)文件夾,運(yùn)行一個(gè)程序等,也就是說(shuō)能夠在本地模擬
32、遠(yuǎn)程電腦的鍵盤(pán)鼠標(biāo)操作。但是由于網(wǎng)絡(luò)傳輸速度的限制,因此不可能做到太流暢,操作起來(lái)也相對(duì)費(fèi)勁。我也曾嘗試過(guò)用圖片相減的方法來(lái)減小傳送的圖片,不過(guò)這會(huì)有問(wèn)題,就是相減算法會(huì)很大。我做過(guò)測(cè)試,在我的電腦上要完成1024768大小圖片的相關(guān)操作,大概需要5秒鐘。這樣算下來(lái)就相當(dāng)于要5秒鐘才能傳送一張圖片,比起不作相減更加費(fèi)時(shí)間。不過(guò)這也是一個(gè)問(wèn)題,雖然在這次畢業(yè)設(shè)計(jì)中沒(méi)能解決,以后我也會(huì)找機(jī)會(huì)學(xué)習(xí)例如qq遠(yuǎn)程協(xié)助的解決方法或者遠(yuǎn)程桌面的實(shí)現(xiàn)方法。我想它們應(yīng)該是只傳送屏幕重繪的那一部分,最主要的是在獲得屏幕時(shí)就只獲得重繪的一部分,這樣就會(huì)減少很多處理,也會(huì)減少很多的網(wǎng)絡(luò)需要求。遠(yuǎn)程控制中還涉及到另外一
33、個(gè)問(wèn)題就是模擬鍵盤(pán)和鼠標(biāo)。模擬鍵盤(pán)要用到鉤子。因?yàn)樵谶h(yuǎn)程控制的時(shí)候,要把本地輸入的按鍵還有鼠標(biāo)點(diǎn)擊都發(fā)送到服務(wù)器去。這對(duì)于普通的字母鍵很容易實(shí)現(xiàn),但是對(duì)于例如shift、ctrl以及系統(tǒng)鍵都不能識(shí)別。它們會(huì)把這些按鍵在系統(tǒng)上響應(yīng),例如按下系統(tǒng)鍵,開(kāi)始菜單會(huì)彈出來(lái)。這顯然不是我們?cè)敢饪吹降?。還好win api給我們提供了方法來(lái)實(shí)現(xiàn)。我們要獲得這些特殊鍵,必需要屏蔽系統(tǒng)響應(yīng),把它完全當(dāng)作是對(duì)窗體的響應(yīng)。但是在使用完之后要釋放它才行,不然會(huì)影響系統(tǒng)正常工作。由于遠(yuǎn)程控制是全屏操作,我們?cè)谖募蟼鞯椒?wù)器是由一個(gè)類(lèi)來(lái)實(shí)現(xiàn)的,從主界面中選擇要上傳的文件之后會(huì)自動(dòng)連接服務(wù)器,這時(shí)會(huì)彈出一個(gè)文件選擇對(duì)話(huà)框,
34、選擇你需要傳送的文件,傳送完之后會(huì)自動(dòng)關(guān)閉連接。操作回到主界面。下載文件界面是由一個(gè)listbox一個(gè)button和一個(gè)textbox組成。listbox上顯示服務(wù)器端默認(rèn)下載位置的文件列表。其中下載文件和下載文件夾都是這一個(gè)窗體,只是初始化列表時(shí)顯示的是文件或文件夾而已。textbox是由用戶(hù)輸入要下載文件的路徑,這是對(duì)于列表框的補(bǔ)充。因?yàn)樵O(shè)計(jì)時(shí),列表框中只能顯示服務(wù)器固定文件夾下的文件或子文件夾,因此難免用戶(hù)會(huì)忘記把兩地都需要的文件放在里面,所以設(shè)計(jì)一個(gè)列表框來(lái)讓用戶(hù)輸入文件路徑。同時(shí)也是保護(hù)服務(wù)器安全的一個(gè)措施。因?yàn)槿绻@示服務(wù)器上所有文件,也只需要在textbox旁邊加
35、上一個(gè)refresh button,輸入文件路徑后,傳送回服務(wù)器,然后把當(dāng)前文件來(lái)下的文件顯示出來(lái)。只是后退功能不好做,很難像本地計(jì)算機(jī)打開(kāi)文件那樣方便。3.2.2 服務(wù)器端設(shè)計(jì)在設(shè)計(jì)階段,服務(wù)器端用的是控制臺(tái)應(yīng)用程序,在實(shí)際應(yīng)用時(shí)是用的windows service應(yīng)用程序。這是因?yàn)樵谠O(shè)計(jì)階段會(huì)調(diào)試程序,有時(shí)候程序會(huì)遇到問(wèn)題,我們可以在命令行上顯示我們需要的一些信息,從而知道哪里有問(wèn)題,以進(jìn)行修改。而如果一開(kāi)始就用windows service應(yīng)用程序,調(diào)試就不那么方便,也不太容易知道問(wèn)題的所在。在程序調(diào)試好了之后,我們就可以把代碼移植到windows service項(xiàng)目中去,同時(shí)還要?jiǎng)h除一
36、些在用命令行調(diào)試代碼時(shí)的輸出語(yǔ)句。服務(wù)器開(kāi)啟之后,會(huì)開(kāi)放一個(gè)端口號(hào),一直監(jiān)聽(tīng)來(lái)自網(wǎng)絡(luò)上的連接。當(dāng)沒(méi)有連接時(shí),服務(wù)器一直處于等待狀態(tài)。當(dāng)客戶(hù)端連接服務(wù)器時(shí),服務(wù)器就會(huì)進(jìn)入一個(gè)while(true)的循環(huán),在循環(huán)中設(shè)定很多的條件處理語(yǔ)句,根據(jù)客戶(hù)端傳來(lái)的不同信息,給予相應(yīng)的處理。其中一次循環(huán)是以一個(gè)操作結(jié)束的。例如,傳送一個(gè)文件就是一次循環(huán)。這其中也包括小的循環(huán),在服務(wù)器端接收文件的時(shí)候,由于文件內(nèi)容可能會(huì)比較大,也會(huì)用循環(huán)接收完文件,這是在條件語(yǔ)句中完成的。在每一次循環(huán)完成之后都會(huì)關(guān)閉networkstream,這是因?yàn)橐淮窝h(huán)在客戶(hù)端就是完成一次操作,相應(yīng)的客戶(hù)端也會(huì)關(guān)閉流。等到客戶(hù)端下一次連
37、接服務(wù)器的時(shí)候重新再建立連接,也就會(huì)重新初始化networkstream,也就再執(zhí)行下一個(gè)while(true)循環(huán)。第4章 客戶(hù)端具體實(shí)現(xiàn)4.1 用戶(hù)登錄4.1.1 實(shí)現(xiàn)登錄本軟件實(shí)現(xiàn)的用戶(hù)登錄不同于其它系統(tǒng)的登錄方式。其它系統(tǒng)登錄用的用戶(hù)名和密碼,驗(yàn)證你是否可以登錄系統(tǒng)。而本軟件是用的ip地址和端口號(hào),它的作用自然不一樣,主要是為了檢測(cè)能否連接到服務(wù)器電腦。如果能夠連接就會(huì)成功登錄,如不能連接到服務(wù)器,那么就不能登錄,也就不能與服務(wù)器進(jìn)行數(shù)據(jù)交換和控制。登錄界面是一個(gè)windows form窗體,ip地址和端口號(hào)的文本框中默認(rèn)有一臺(tái)服務(wù)器的ip和端口號(hào)。用戶(hù)可以根據(jù)需要修改,當(dāng)點(diǎn)擊登錄后,
38、如果能夠與遠(yuǎn)程服務(wù)器連接,那么就進(jìn)入系統(tǒng)操作界面。此時(shí),登錄后會(huì)馬上斷開(kāi)和服務(wù)器的連接,因?yàn)榈卿浗缑嬷皇菧y(cè)試能否與服務(wù)器取得連接。由于連接到服務(wù)器會(huì)占用很多的資源,我們才這樣做,還有就是傳送一個(gè)文件會(huì)重新連接服務(wù)器,傳送完一個(gè)文件也會(huì)斷開(kāi)連接。如果登錄不成功,系統(tǒng)會(huì)給出相應(yīng)提示,可以重新輸入ip和端口號(hào)再次嘗試連接。如果要退出系統(tǒng)直接點(diǎn)擊關(guān)閉按鈕。連接的代碼如下:public tcpclient connecttoserver() ip = textbox1.text.tostring(); port = convert.toint32(textbox2.text); try client.c
39、onnect(ip, port); catch(exception e) messagebox.show( 請(qǐng)輸入正確的ip和端口號(hào)!); textbox1.focus(); 4.1.2 為其它類(lèi)提供登錄接口在本窗體中,連接服務(wù)器的方法是用的公共方法。因此在需要時(shí),其它類(lèi)中的方法也可以調(diào)用它。只是要取得loginform的對(duì)象。其中主界面是操作的中心,也是控制的中心,在loginform的構(gòu)造方法中有自己對(duì)象的參數(shù)。它是在主界面的代碼里初始化的。因此,主界面保存了它的對(duì)象。其它類(lèi)如果要用到其中連接服務(wù)器的方法,就需要在其構(gòu)造方法中添加loginform的形參,在主界面的代碼中初始化的時(shí)候?qū)o
40、ginform的對(duì)象傳遞過(guò)去。這樣,其它類(lèi)中也能使用登錄時(shí)的ip和端口號(hào)。4.2 主界面實(shí)現(xiàn)主界面上用menustrip實(shí)現(xiàn)的菜單欄,上面添加了四個(gè)子菜單,子菜單中又有相應(yīng)的操作。下面是初始化的背景。其中開(kāi)關(guān)機(jī)(喚醒和關(guān)機(jī))、遠(yuǎn)程控制和傳文件(傳送文件和傳送文件夾)都直接在主界面實(shí)現(xiàn),只要點(diǎn)擊相應(yīng)的選項(xiàng)就會(huì)彈出你需要的選項(xiàng)。下載文件(下載文件和下載文件夾)是另外的操作界面。下面我們分別介紹。4.2.1 開(kāi)關(guān)機(jī)實(shí)現(xiàn) 遠(yuǎn)程喚醒遠(yuǎn)程喚醒的實(shí)現(xiàn)是發(fā)一個(gè)broadcast包,包的內(nèi)容包括以下數(shù)據(jù)就可以了。0xff 0xff 0xff 0xff 0xff 0xff,6個(gè)ff是數(shù)據(jù)的開(kāi)始,緊跟
41、著16次mac地址就可以了。比如mac地址是11 22 33 44 55 66,那么數(shù)據(jù)就是0xff 0xff 0xff 0xff 0xff 0xff 0x11 0x22 0x330x44 0x55 0x66 0x11 0x22 0x330x44 0x55 0x66 0x11 0x22 0x330x44 0x55 0x66.( 0x11 0x22 0x330x44 0x55 0x66重復(fù)16次)。這個(gè)數(shù)據(jù)在包的任何位置都可以,或者數(shù)據(jù)包僅為這個(gè)數(shù)據(jù)。然后網(wǎng)播出去就可以了。實(shí)現(xiàn)代碼如下:udpclient client = new udpclient();string ipstring = lo
42、ginform.getip();byte ipbytes = encoding.ascii.getbytes(ipstring);ipaddress ip = new ipaddress(ipbytes);client.connect(ip, 30000);byte packet = new byte17 * 6;for (int i = 0; i 6; i+) packeti = 0xff;for (int i = 1; i = 16; i+) for (int j = 0; j 0); binaryreader.close(); fs.close(); clientstream.close
43、();client.close(); 對(duì)服務(wù)器傳送文件夾傳送文件夾的過(guò)程,其實(shí)就是把文件夾中的單個(gè)文件一個(gè)一個(gè)發(fā)送出去的過(guò)程,只是在傳送過(guò)程中,涉及到文件的相對(duì)位置,以及文件夾中的子文件夾的問(wèn)題。這就需要自己編寫(xiě)算法來(lái)實(shí)現(xiàn),在這個(gè)過(guò)程中我是用遞歸編寫(xiě)的傳送文件夾的過(guò)程。算法由如下幾個(gè)過(guò)程組成。1. 傳送主文件夾的名稱(chēng)。2. 獲取子文件夾的名稱(chēng)數(shù)組。然后遞歸調(diào)用傳送文件夾的函數(shù)。3. 獲取單個(gè)文件的名稱(chēng)數(shù)組,調(diào)用傳送文件的方法。這樣在傳送過(guò)程中,最先傳送的就是層次最深的文件,然后一步一步到外層文件。如果把一個(gè)文件夾比作一棵樹(shù),那么就是最先傳送最深層的頁(yè)結(jié)點(diǎn),然后一層一層的向上傳,最
44、后才到主文件夾下的文件。為了方便理解,其實(shí)也可以先傳送主文件夾下的文件,然后是它子文件夾下的文件,再是下一層子文件夾下的文件。這更符合人們的正常思考邏輯。要實(shí)現(xiàn)這種算法,只需將傳送文件夾中過(guò)程的第2、3步交換一下位置即可。對(duì)服務(wù)器傳送文件夾的過(guò)程和傳送文件的過(guò)程幾乎一樣。只是多了一個(gè)調(diào)用文件了方法,即上面提到的傳送文件夾的算法。下面給出該算法的具體實(shí)現(xiàn)。public void translatefolder(string folderrout, string foldername)networkstream clientstream = client.getstream();string request = folder + : + foldername + + :; /獲取當(dāng)前文件夾下的子文件夾 string folder = directory.getdirectories(folderrout + foldername + ); int buffersize = 8192; byte buffer = new bytebuffersize; /用utf8編碼可以傳輸中文文件夾名字 buffer = utf8encoding.utf8.getbytes(request); clientstream.write(buffer, 0, buffer.len
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年新型門(mén)窗安裝勞務(wù)承包合同綠色節(jié)能新潮流3篇
- 2024年度碎石加工產(chǎn)品質(zhì)量檢驗(yàn)與認(rèn)證合同2篇
- 足球培訓(xùn)機(jī)構(gòu)培訓(xùn)合同范例
- 香港 教育培訓(xùn)合同范例
- 天津旅行社合同范例
- 重慶基裝合同范例
- 產(chǎn)床買(mǎi)賣(mài)合同范例
- 酒店活動(dòng) 合同范例
- 項(xiàng)目技術(shù)銷(xiāo)售合同范例
- 貨車(chē)委托租車(chē)合同范例
- DB11 827-2011 廢舊爆炸物品銷(xiāo)毀處置安全規(guī)程
- 拒絕校園欺凌·守護(hù)身心健康(初高中版)
- 語(yǔ) 文病句專(zhuān)題講練-2024-2025學(xué)年統(tǒng)編版語(yǔ)文七年級(jí)上冊(cè)
- 第三單元(復(fù)習(xí)課件)一年級(jí)語(yǔ)文上冊(cè)(統(tǒng)編版2024秋)
- 2024年大學(xué)試題(計(jì)算機(jī)科學(xué))-數(shù)字圖像處理考試近5年真題集錦(頻考類(lèi)試題)帶答案
- 文旅深度融合長(zhǎng)期發(fā)展規(guī)劃
- ASTM-D3359-(附著力測(cè)試標(biāo)準(zhǔn))-中文版
- 5 協(xié)商決定班級(jí)事務(wù) (教學(xué)設(shè)計(jì))-2024-2025學(xué)年道德與法治五年級(jí)上冊(cè)統(tǒng)編版
- 2024年清潔機(jī)器人項(xiàng)目合作計(jì)劃書(shū)
- 高校實(shí)驗(yàn)室安全通識(shí)課學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 銀行客戶(hù)經(jīng)理招聘面試題與參考回答(某大型集團(tuán)公司)
評(píng)論
0/150
提交評(píng)論