畢業(yè)設計(論文)基于C#的遠程控制管理設計_第1頁
畢業(yè)設計(論文)基于C#的遠程控制管理設計_第2頁
畢業(yè)設計(論文)基于C#的遠程控制管理設計_第3頁
畢業(yè)設計(論文)基于C#的遠程控制管理設計_第4頁
畢業(yè)設計(論文)基于C#的遠程控制管理設計_第5頁
已閱讀5頁,還剩39頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、學位論文摘要與正文內(nèi)容提綱:1) 簡述背景,提出問題,說明題目的意義與價值。2) 分析研究相關有理論、原理與技術。3) 提出理論方案與技術路線。4) 研究的工作與內(nèi)容及創(chuàng)新5) 驗證結論、性能指標。6) 結果與結論的理論與實際價值。*基于c#的遠程控制管理設計摘 要1.xxx本程序是用microsoft平臺下的c#語言實現(xiàn)遠程控制。c#是一種簡單、現(xiàn)代、面向?qū)ο笄翌愋桶踩木幊陶Z言。本系統(tǒng)中,客戶端使用的是c#的窗體應用程序,服務器端用的是服務應用程序。23在程序中,用套接字實現(xiàn)了遠程信息交換,它的具體功能主要是文件上傳和文件下載。在這之中,用tcpclient和tcplistener來完成遠

2、程連接,服務器端打開一個端口監(jiān)聽來自網(wǎng)絡中的信息流,客戶端使用服務器端的ip和監(jiān)聽的端口號取得與服務器的連接。客戶端使用tcpclient的對象來初始化networkstream對象,從而實現(xiàn)對字節(jié)流的傳送的接收操作;服務器端使用tcplistener的對象來初始化networkstream對象,從而獲得與客戶端的網(wǎng)絡流交換。本程序中客戶端通過發(fā)送關機命令實現(xiàn)遠程關閉服務器電腦;使用服務器的mac地址實現(xiàn)遠程喚醒服務器??蛻舳讼蚍掌靼l(fā)送16次服務器的mac地址,便能實現(xiàn)遠程服務器的喚醒操作。在程序中使用鍵盤鉤子(hook)模擬鍵盤、鼠標事件模擬鼠標。要實現(xiàn)桌面的遠程控制,首先就是獲取服務器的

3、屏幕,用類似于傳送文件的方式把服務器屏幕圖片流傳送到客戶端顯示。在客戶端用鍵盤鉤子獲取所有按鍵事件,能夠屏蔽系統(tǒng)對鍵盤的響應(如按下windows鍵,開始菜單不會彈出),只把按下的鍵的健值記錄下來傳送到服務器端;客戶端獲取鼠標是用鼠標事件獲取,包括左右鍵的單雙擊及中鍵的滾動。服務器端獲得客戶端傳送過來的鍵盤、鼠標事件后,用api實現(xiàn)模擬按鍵操作和模擬鼠標點擊、滾動操作。從而達到客戶端遠程控制服務器端的目的。45關鍵字:套接字、鍵盤鉤子、c/s結構、遠程控制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 研究內(nèi)容11.4 論文結構2第二章 相關技術介紹42.1 .net 框架42.2 c# 編程語言52.3 套接字(socket接口)6第三章 系統(tǒng)分析與系統(tǒng)設計73.1 系統(tǒng)分析73.1.1 系統(tǒng)功能介紹73.1.2 系統(tǒng)流程圖73.1.2 子模塊流程圖 遠程開關機 文件的傳送 文件下載 遠程控制113.2 系統(tǒng)設計123.2.1 客戶端設計 登錄窗體設計 主界面設計下載文件界面133.2.2 服務器端設計13第四章 客戶端具

11、體實現(xiàn)154.1 用戶登錄154.1.1 實現(xiàn)登錄154.1.2 為其它類提供登錄接口164.2 主界面實現(xiàn)164.2.1 開關機實現(xiàn) 遠程喚醒 遠程關機174.2.2 遠程控制174.2.3 發(fā)送文件 傳送單個文件 對服務器傳送文件夾214.2.4 下載文件 下載單個文件 下載文件夾23第五章 服務器端具體實現(xiàn)255.1 遠程控制255.2 傳送文件265.2.1 傳送單個文件265.2.2 傳送文件夾265.3 下載文件275.3.1 下載單個文件275.3.2 下載文件夾28第六章

12、 系統(tǒng)測試296.1 登錄測試296.2 開關機測試296.2.1 遠程關機測試296.2.2 遠程喚醒測試306.3 遠程控制測試306.4傳送文件測試316.4.1 傳送單個文件316.4.2 傳單文件夾326.5 下載文件測試326.5.1下載單個文件326.5.2 下載文件夾33結論35致謝36參考文獻37第1章 前 言1.1 課題背景c#出現(xiàn)十年來,許多c、c+以及vb程序員轉(zhuǎn)投它的門下,這不僅是因為c#是一個致力于敏捷開發(fā)和快速應用程序開發(fā)的工具。在如今計算機硬件快速發(fā)展,速度已經(jīng)不再是瓶頸的情況下,開發(fā)效率是人們追求的唯一目標。而c#就是順應時代而產(chǎn)生的,它是一種簡單、方便和快捷

13、的編程語言。與此同時,網(wǎng)絡的飛速發(fā)展給人們帶來了極大的方便。如今人們的日常生活越來越離不開網(wǎng)絡,也越來越依賴網(wǎng)絡。在目前,對于網(wǎng)絡信息的傳輸,人們主要使用套接字編程來實現(xiàn),c#中也可使用套接字編程。它通過編碼的流在網(wǎng)絡上傳輸信息,人們獲得流之后又把它解碼出來獲得需要的信息。本課題就是在這樣的環(huán)境之下應運而生的,它實現(xiàn)了信息在網(wǎng)絡上的傳輸,客戶端實時的控制服務器。1.2 課題意義本課題旨在方便人們的學習和工作,它能在客戶端能過網(wǎng)絡控制服務器,實現(xiàn)信息的實時交換,而服務器又不需要由人控制。在日常生活中,人們可以使用它在不同的辦公地點來實現(xiàn)文件的傳輸,這可以節(jié)約時間在往返工作地點的路上。同時,如果需

14、要多臺電腦進行同一項任務時,可以通過本地控制方便控制。擴展開來,本系統(tǒng)增加可以增加連接服務器數(shù)量,這樣就可以對多臺電腦實時的監(jiān)控,這在管理上有一定的作用。1.3 研究內(nèi)容為了實現(xiàn)本系統(tǒng),論文做了以下幾方面的研究。 1tcp/ip網(wǎng)絡協(xié)議。本程序中通過tcplistener和tcpclient實現(xiàn)客戶端和服務器的連接。2魔術包工具(magic packet)。魔術包是amd公司開發(fā)的,它的多播(broadcast)功能通過發(fā)送16mac地址給“睡著”的電腦,網(wǎng)卡通過報警功能實現(xiàn)計算機的喚醒。3屏幕抓取技術。在實現(xiàn)遠程控制的過程中,要實現(xiàn)實時的控制服務器,就需要抓取系統(tǒng)當前屏幕的圖片。4鍵盤鉤子。

15、也是在遠程控制當中,客戶端使用鍵盤鉤子獲得本地鍵盤的按鍵鍵值,同時可以對不同的按鍵進行相應的操作,并且阻止按鍵傳向下一個應用程序。5windows api。同樣在遠程控制的過程中,服務器端用api中的“user32.dll”實現(xiàn)鼠標和鍵盤的模擬操作。6套接字(socket)。套接字是本系統(tǒng)實現(xiàn)的基礎,在程序中,使用socket編程實現(xiàn)數(shù)據(jù)在網(wǎng)絡中傳輸。1.4 論文結構本畢業(yè)設計報告內(nèi)容可以分為六個部分,分別是系統(tǒng)及相關技術介紹(第1、2、3章)、系統(tǒng)的實現(xiàn)(第4、5章)和系統(tǒng)的測試(第六章)。各章的主要內(nèi)容安排如下。第1章:前言。介紹了本課題的來源、目的、意義,論文研究的內(nèi)容和各章的安排。第2

16、章:相關技術介紹。本章介紹了.net framework、vs平臺下的c#語言以及相關網(wǎng)絡技術(tcp/ip協(xié)議的使用)。第3章:系統(tǒng)分析與系統(tǒng)設計。本章分析了系統(tǒng)各個模塊的功能,也給出了系統(tǒng)各個模塊的詳細設計方案。對服務器和客戶端的設計做了分別介紹。第4章:客戶端具體實現(xiàn)windows form。本系統(tǒng)的客戶端是用windows實體應用程序?qū)崿F(xiàn)的。在本章中對客戶端的各個模塊做了詳細的介紹,并列出了核心代碼。第5章:服務器端具體實現(xiàn)windows service。本系統(tǒng)的服務器端是用windows服務應用程序?qū)崿F(xiàn)的。服務器端只有一個事件處理模塊,本章對它進行了具體講解,也把它對客戶端的每個請求

17、作出的相應響應進行了具體的分析。第6章:系統(tǒng)測試。本章對系統(tǒng)的主要功能進行了相應的測試工作,同時也對比較容易出錯的地方進行了測試及說明。第2章 相關技術介紹本軟件的開發(fā)采用c/s結構。在客戶端是windows form的應用程序,服務器端是windows service的應用程序??蛻舳撕头掌鞫硕际怯胿s平臺下的c#語言實現(xiàn)的。相對于其它開發(fā)語言而言,c#簡單易學、界面操作方便(類似visual basic),同時又能實現(xiàn)c+一樣強大的功能。因此選擇它作為開發(fā)本軟件的語言。開發(fā)本軟件是選用的較新的vs2008,它的功能相當強大,也很好用。相對于vs2005而言,vs2008在做網(wǎng)頁方面增加了

18、許多新的功能,如asp.net3.5、ctr add-in framework 、 additional enhancement等。這些新增功能相對于本程序來說影響并不大,因此不做具體介紹。2.1 .net 框架.net framework 是microsoft為開發(fā)應用程序而創(chuàng)建的一個富有革命性的新平臺。上面這句話時.net的定義,定義給我們兩點啟示。第一:它沒有清楚的說明“在windows操作系統(tǒng)上開發(fā)應用程序”。盡管.net framework 的 microsoft 版本運行在 windows操作系統(tǒng)上,但是.net framework也可以運行在其他操作系統(tǒng)上,例如開源的mono就是

19、一個例子。mono項目不僅可以運行在windows系統(tǒng)上,也可以運行在 linux, freebsd, unix, mac os x和solaris上。第二:.net framework 定義并沒有限制應用程序的類型。這是因為本來就沒有限制。.net framework 可以創(chuàng)建windows 應用程序、web 應用程序、web 服務和其他各種類型的應用程序。.net framework 的設計方式保證它可以用于各種語言,例如:c#、c+、visual basic、jscript,甚至一些舊的語言,如cobol。為此,還推出了這些語言的.net版本。所有這些語言都可以訪問.net framew

20、ork,他們還可以彼此交互。c#開發(fā)人員可以使用visual basic程序員編寫的代碼,反之亦然。.net framework主要是為了實現(xiàn)下面的目標:1提供一致的面向?qū)ο蟮木幊汰h(huán)境,而無論對象代碼是在本地存儲和執(zhí)行還是在本地執(zhí)行單在internet上分布、或者是在遠程執(zhí)行。2提供將軟件部署和版本控制沖突最小化的代碼執(zhí)行環(huán)境。3提供代碼(包括由未知的或不完全受信的第三方創(chuàng)建的代碼)安全的執(zhí)行環(huán)境。第四:提供可消除腳本環(huán)境或解釋環(huán)境性能的代碼執(zhí)行環(huán)境。第五:使開發(fā)人員的經(jīng)驗在面對類型大不相同的應用程序(如基于windows的應用程序和基于web的應用程序)時保持一致。第六:按照工業(yè)標準生成所有

21、通信,以確保基于.net framework的代碼可與任何其他代碼集成。2.2 c# 編程語言c#是用于創(chuàng)建運行在.net公共語言運行庫上應用程序的語言之一,它從c語言和c+語言演化而來,是microsoft專門為使用.net平臺而創(chuàng)建的,并且考慮了其他語言的許多優(yōu)點,例如visual basic的易用性。c#本身是面向?qū)ο蟮恼Z言,c#還進一步提供了對面向組件(component oriented)編程的支持?,F(xiàn)代軟件設計日益依賴于自包含和自描述功能包形式的軟件組件。這種組件的關鍵在于,它們通過屬性(property)、方法(method)和事件(event)來提供編程模型并且還提供了關于組件

22、的聲明信息的屬性(attribute),并且還編入了自己的文檔。c#提供的語言構造直接支持這些概念,這使得c#語言自然而然成為創(chuàng)建和使用軟件組件的首選。c#具有幾個非常優(yōu)秀的用于構造健壯和持久應用程序的特性,如下所示:1垃圾回收將自動回收不再使用的對象所占用的內(nèi)存。2異常處理提供了結構化和可擴展的錯誤檢測和恢復方法。3類型安全的語言設計則避免了讀取未初始化的變量、數(shù)組索引超出邊界或執(zhí)行未經(jīng)檢查的類型強制轉(zhuǎn)換等情形。此外,c#還提供具統(tǒng)一的類型系統(tǒng),所有c#類型(包括int和string之類的基礎數(shù)據(jù)類型)都繼承自一個唯一的基類型:object。因此,所有類型都共享一組通用的操作,并且任何類型的

23、值都能以一致的方式進行存儲、傳遞和操作。另外,c#同時支持用戶定義的引用類型和值類型,既允許對象的動態(tài)分析,也允許輕量的內(nèi)聯(lián)存儲。為了確保c#程序和庫能夠以兼容的方式逐步演進,c#的設計充分強調(diào)了版本控制。許多語言都不太重視這一點,導致采用那些語言編寫的程序常常因為其所信賴的庫的更新而無法正常工作。c#的設計在某些方面直接考慮到了版本控制的需要,其中包括單獨使用的virtual和override修改、方法重載決定規(guī)則以及對顯式接口成員聲明的支持。2.3 套接字(socket接口)套接字(socket)用于描述ip地址和端口,是一個通信鏈的句柄。應用程序通常通過套接字向網(wǎng)絡發(fā)出請求或者應答網(wǎng)絡請

24、求。 socket 接口是訪問 internet 使用得最廣泛的方法。 如果你有一臺剛配好tcp/ip協(xié)議的主機,其ip地址是01, 此時在另一臺主機或同一臺主機上執(zhí)行ftp 01,顯然無法建立連接。因01 這臺主機沒有運行ftp服務軟件。同樣, 在另一臺或同一臺主機上運行瀏覽軟件 如netscape,輸入01,也無法建立連接?,F(xiàn)在,如果在這臺主機上運行一個ftp服務軟件(該軟件將打開一個socket, 并將其綁定到21端口),再在這臺主機上運行一個web 服務軟件(該軟件將打開

25、另一個socket,并將其綁定到80端口)。這樣,在另一臺主機或同一臺主機上執(zhí)行ftp 01,ftp客戶軟件將通過21端口來呼叫主機上由ftp 服務軟件提供的socket,與其建立連接并對話。而在netscape中輸入01時,將通過80端口來呼叫主機上由web服務軟件提供的socket,與其建 立連接并對話。第3章 系統(tǒng)分析與系統(tǒng)設計3.1 系統(tǒng)分析3.1.1 系統(tǒng)功能介紹本系統(tǒng)旨在完成兩臺主機之間的通信??蛻舳四軌驈姆掌魃舷螺d文件、上傳文件、控制服務器的開關機和對服務器的遠程實時控制。打開客戶端應用程序之后,用戶通過服務器的i

26、p和開放監(jiān)聽的端口號進行登錄驗證,登錄成功,表示能與服務器取得連接,也就能夠?qū)崿F(xiàn)兩臺主機之間的通信??蛻舳四軌蛳螺d的文件主要是存放在服務器默認位置的文件,當需要下載時,客戶端會列出服務器中所設置的默認位置的文件列表供用戶選擇。用戶也可以下載其它位置的文件,但是需要自己輸入文件所在路徑和文件名。用戶也可以上傳文件,服務器中接收到文件后,會把上傳的文件保存在所設置的默認位置??蛻舳诉h程控制服務器時,本地電腦的屏幕完成是服務器的屏幕,對鍵盤鼠標的操作也完成是對遠程服務器起作用。由于存在退出遠程控制的服務器,因此設定了esc鍵作為退出遠程控制服務的按鍵。用戶也可以控制服務器的開關機。開機時,用戶通過發(fā)

27、送服務器的mac地址,便可實現(xiàn)服務器的喚醒。若要關機,則只需發(fā)送關機命令,服務器端根據(jù)命令自動完成關機操作。3.1.2 系統(tǒng)流程圖圖31 系統(tǒng)流程圖3.1.2 子模塊流程圖本系統(tǒng)旨在實現(xiàn)兩臺電腦之間的通信,這包括遠程開關機的實現(xiàn)、文件傳送與接收以及遠程屏幕實時操作。 遠程開關機對于遠程喚醒,是通過電腦的ip地址和mac地址實現(xiàn)的,每臺電腦都有唯一的mac地址,它是在生產(chǎn)電腦時確定的。它的流程圖如圖32所示。圖32 遠程開機流程圖遠程關機,也是用到ip地址,加上被關閉電腦的用戶名和密碼來實現(xiàn)。 文件的傳送對于單個文件,我們從本地選擇要傳送的文件,使用tcp協(xié)議與遠程計

28、算機實現(xiàn)網(wǎng)絡互連。首先向服務器傳送一個要發(fā)送文件的指令,并且一起把文件名字發(fā)送過去。服務器接收到信息后,在默認的位置下根據(jù)傳送過去的名字創(chuàng)建一個文件。然后從本地讀出要傳送文件的流,考慮到文件可能會比較大,不能一次性傳送給服務器,因此分批傳送。文件傳送的流程圖如圖33所示。對于文件夾,是把它中的文件一個一個傳送過去,因此傳送文件時和上面的一樣。傳送的時候會有子文件夾,因此在傳送時要考慮相對路徑的問題。傳到服務器時也要根據(jù)相對位置創(chuàng)建相應的文件夾。傳送文件夾的流程圖如圖34所示。圖33 傳送子文件流程圖圖34 傳送文件夾流程圖 文件下載在一個新的form窗體中實現(xiàn),先顯示默認位置的文

29、件名稱列表,如果需要下載該列表中的文件,直接選擇點擊下載即可。如果需要下載其它位置的文件,則需要輸入該文件的位置,才能完成下載。下載文件夾和文件是完全一樣的,而且也是用的同一個form窗體,只是在初始化的時候稍微改變一下。也要在下載按鈕的代碼中做一下檢測,到底是要下載文件還是文件夾,這只需要一個bool變量。下載文件夾和上傳文件夾的算法是一樣的,因此它們的流程圖也一樣。這是不再重復給出。 遠程控制主要是能完成類似qq遠程協(xié)助的功能。在客戶端能夠通過鍵盤鼠標模擬遠程電腦敲鍵盤鼠標的功能,當然也需要把遠程電腦的實時界面?zhèn)鬟f到客戶端上。這主要就存在流量過大的問題,在本程序中是用限時的方

30、法傳送,一秒鐘傳送一張圖片過來。圖35 遠程控制流程圖3.2 系統(tǒng)設計3.2.1 客戶端設計本系統(tǒng)的客戶端是windows form應用程序,其中由三個窗體組成,分別是登錄窗體、主界面和下載文件界面。 登錄窗體設計登錄窗體,它上面有兩個label、兩個textbox以及兩個button。label作為textbox的說明,兩個textbox分別是服務器的ip號和端口號。button則是一個登錄、一個重置。其中登錄鍵是測試能否連接到服務器的,能夠連接就登錄,不能連接就會提示用戶輸入正確的ip和端口號。重置則是讓textbox1,也就是輸入ip地址的文本框獲得焦點。如果能夠連接到服務

31、器就登錄系統(tǒng),然后斷開連接,這也是為了節(jié)約資源,也因為在其它操作時都有自己的連接,每個模塊使用完了之后也會釋放連接。 主界面設計主界面上面就只有一個menuitem菜單欄,上面的子項目有開關機、遠程控制、傳送文件和下載文件。開關機包括喚醒和關機;遠程控制就一個項目;傳送文件包括傳送單個文件和傳送文件夾;下載文件也包括下載文件和下載文件夾。點擊相應的選項會彈出相應的操作界面。遠程屏幕控制也是在主界面中完成的。當進入遠程控制時,屏幕會切換的全屏狀態(tài),以方便觀看與使用。在客戶端進行相應的操作就如同在服務器端電腦上進行相應的操作。例如打開一個文件夾,運行一個程序等,也就是說能夠在本地模擬

32、遠程電腦的鍵盤鼠標操作。但是由于網(wǎng)絡傳輸速度的限制,因此不可能做到太流暢,操作起來也相對費勁。我也曾嘗試過用圖片相減的方法來減小傳送的圖片,不過這會有問題,就是相減算法會很大。我做過測試,在我的電腦上要完成1024768大小圖片的相關操作,大概需要5秒鐘。這樣算下來就相當于要5秒鐘才能傳送一張圖片,比起不作相減更加費時間。不過這也是一個問題,雖然在這次畢業(yè)設計中沒能解決,以后我也會找機會學習例如qq遠程協(xié)助的解決方法或者遠程桌面的實現(xiàn)方法。我想它們應該是只傳送屏幕重繪的那一部分,最主要的是在獲得屏幕時就只獲得重繪的一部分,這樣就會減少很多處理,也會減少很多的網(wǎng)絡需要求。遠程控制中還涉及到另外一

33、個問題就是模擬鍵盤和鼠標。模擬鍵盤要用到鉤子。因為在遠程控制的時候,要把本地輸入的按鍵還有鼠標點擊都發(fā)送到服務器去。這對于普通的字母鍵很容易實現(xiàn),但是對于例如shift、ctrl以及系統(tǒng)鍵都不能識別。它們會把這些按鍵在系統(tǒng)上響應,例如按下系統(tǒng)鍵,開始菜單會彈出來。這顯然不是我們愿意看到的。還好win api給我們提供了方法來實現(xiàn)。我們要獲得這些特殊鍵,必需要屏蔽系統(tǒng)響應,把它完全當作是對窗體的響應。但是在使用完之后要釋放它才行,不然會影響系統(tǒng)正常工作。由于遠程控制是全屏操作,我們在文件上傳到服務器是由一個類來實現(xiàn)的,從主界面中選擇要上傳的文件之后會自動連接服務器,這時會彈出一個文件選擇對話框,

34、選擇你需要傳送的文件,傳送完之后會自動關閉連接。操作回到主界面。下載文件界面是由一個listbox一個button和一個textbox組成。listbox上顯示服務器端默認下載位置的文件列表。其中下載文件和下載文件夾都是這一個窗體,只是初始化列表時顯示的是文件或文件夾而已。textbox是由用戶輸入要下載文件的路徑,這是對于列表框的補充。因為設計時,列表框中只能顯示服務器固定文件夾下的文件或子文件夾,因此難免用戶會忘記把兩地都需要的文件放在里面,所以設計一個列表框來讓用戶輸入文件路徑。同時也是保護服務器安全的一個措施。因為如果要顯示服務器上所有文件,也只需要在textbox旁邊加

35、上一個refresh button,輸入文件路徑后,傳送回服務器,然后把當前文件來下的文件顯示出來。只是后退功能不好做,很難像本地計算機打開文件那樣方便。3.2.2 服務器端設計在設計階段,服務器端用的是控制臺應用程序,在實際應用時是用的windows service應用程序。這是因為在設計階段會調(diào)試程序,有時候程序會遇到問題,我們可以在命令行上顯示我們需要的一些信息,從而知道哪里有問題,以進行修改。而如果一開始就用windows service應用程序,調(diào)試就不那么方便,也不太容易知道問題的所在。在程序調(diào)試好了之后,我們就可以把代碼移植到windows service項目中去,同時還要刪除一

36、些在用命令行調(diào)試代碼時的輸出語句。服務器開啟之后,會開放一個端口號,一直監(jiān)聽來自網(wǎng)絡上的連接。當沒有連接時,服務器一直處于等待狀態(tài)。當客戶端連接服務器時,服務器就會進入一個while(true)的循環(huán),在循環(huán)中設定很多的條件處理語句,根據(jù)客戶端傳來的不同信息,給予相應的處理。其中一次循環(huán)是以一個操作結束的。例如,傳送一個文件就是一次循環(huán)。這其中也包括小的循環(huán),在服務器端接收文件的時候,由于文件內(nèi)容可能會比較大,也會用循環(huán)接收完文件,這是在條件語句中完成的。在每一次循環(huán)完成之后都會關閉networkstream,這是因為一次循環(huán)在客戶端就是完成一次操作,相應的客戶端也會關閉流。等到客戶端下一次連

37、接服務器的時候重新再建立連接,也就會重新初始化networkstream,也就再執(zhí)行下一個while(true)循環(huán)。第4章 客戶端具體實現(xiàn)4.1 用戶登錄4.1.1 實現(xiàn)登錄本軟件實現(xiàn)的用戶登錄不同于其它系統(tǒng)的登錄方式。其它系統(tǒng)登錄用的用戶名和密碼,驗證你是否可以登錄系統(tǒng)。而本軟件是用的ip地址和端口號,它的作用自然不一樣,主要是為了檢測能否連接到服務器電腦。如果能夠連接就會成功登錄,如不能連接到服務器,那么就不能登錄,也就不能與服務器進行數(shù)據(jù)交換和控制。登錄界面是一個windows form窗體,ip地址和端口號的文本框中默認有一臺服務器的ip和端口號。用戶可以根據(jù)需要修改,當點擊登錄后,

38、如果能夠與遠程服務器連接,那么就進入系統(tǒng)操作界面。此時,登錄后會馬上斷開和服務器的連接,因為登錄界面只是測試能否與服務器取得連接。由于連接到服務器會占用很多的資源,我們才這樣做,還有就是傳送一個文件會重新連接服務器,傳送完一個文件也會斷開連接。如果登錄不成功,系統(tǒng)會給出相應提示,可以重新輸入ip和端口號再次嘗試連接。如果要退出系統(tǒng)直接點擊關閉按鈕。連接的代碼如下:public tcpclient connecttoserver() ip = textbox1.text.tostring(); port = convert.toint32(textbox2.text); try client.c

39、onnect(ip, port); catch(exception e) messagebox.show( 請輸入正確的ip和端口號!); textbox1.focus(); 4.1.2 為其它類提供登錄接口在本窗體中,連接服務器的方法是用的公共方法。因此在需要時,其它類中的方法也可以調(diào)用它。只是要取得loginform的對象。其中主界面是操作的中心,也是控制的中心,在loginform的構造方法中有自己對象的參數(shù)。它是在主界面的代碼里初始化的。因此,主界面保存了它的對象。其它類如果要用到其中連接服務器的方法,就需要在其構造方法中添加loginform的形參,在主界面的代碼中初始化的時候?qū)o

40、ginform的對象傳遞過去。這樣,其它類中也能使用登錄時的ip和端口號。4.2 主界面實現(xiàn)主界面上用menustrip實現(xiàn)的菜單欄,上面添加了四個子菜單,子菜單中又有相應的操作。下面是初始化的背景。其中開關機(喚醒和關機)、遠程控制和傳文件(傳送文件和傳送文件夾)都直接在主界面實現(xiàn),只要點擊相應的選項就會彈出你需要的選項。下載文件(下載文件和下載文件夾)是另外的操作界面。下面我們分別介紹。4.2.1 開關機實現(xiàn) 遠程喚醒遠程喚醒的實現(xiàn)是發(fā)一個broadcast包,包的內(nèi)容包括以下數(shù)據(jù)就可以了。0xff 0xff 0xff 0xff 0xff 0xff,6個ff是數(shù)據(jù)的開始,緊跟

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重復16次)。這個數(shù)據(jù)在包的任何位置都可以,或者數(shù)據(jù)包僅為這個數(shù)據(jù)。然后網(wǎng)播出去就可以了。實現(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(); 對服務器傳送文件夾傳送文件夾的過程,其實就是把文件夾中的單個文件一個一個發(fā)送出去的過程,只是在傳送過程中,涉及到文件的相對位置,以及文件夾中的子文件夾的問題。這就需要自己編寫算法來實現(xiàn),在這個過程中我是用遞歸編寫的傳送文件夾的過程。算法由如下幾個過程組成。1. 傳送主文件夾的名稱。2. 獲取子文件夾的名稱數(shù)組。然后遞歸調(diào)用傳送文件夾的函數(shù)。3. 獲取單個文件的名稱數(shù)組,調(diào)用傳送文件的方法。這樣在傳送過程中,最先傳送的就是層次最深的文件,然后一步一步到外層文件。如果把一個文件夾比作一棵樹,那么就是最先傳送最深層的頁結點,然后一層一層的向上傳,最

44、后才到主文件夾下的文件。為了方便理解,其實也可以先傳送主文件夾下的文件,然后是它子文件夾下的文件,再是下一層子文件夾下的文件。這更符合人們的正常思考邏輯。要實現(xiàn)這種算法,只需將傳送文件夾中過程的第2、3步交換一下位置即可。對服務器傳送文件夾的過程和傳送文件的過程幾乎一樣。只是多了一個調(diào)用文件了方法,即上面提到的傳送文件夾的算法。下面給出該算法的具體實現(xiàn)。public void translatefolder(string folderrout, string foldername)networkstream clientstream = client.getstream();string request = folder + : + foldername + + :; /獲取當前文件夾下的子文件夾 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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論