




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
緒論1.1研究背景安卓系統是由美國Google公司和開放手機聯盟領導組織和開發出來的,安卓系統基于Linux內核(不包含GNU組件),且平臺是開源的,這就使得開發者可以進入學習。大量移動設備都采用安卓系統,安卓系統應用范圍十分廣泛,例如大家日常生活經常使用的智能手機、相機、平板、游戲機,這些硬件設備都是使用Android系統。Android的系統架構是以分層架構實現,與其他平臺上的操作系統相比,Android系統并沒有特殊的地方。Android也是四層結構組成,自上而下對應的是應用程序層、應用程序框架層、系統運行庫層和Linux內核層。遠程控制是指管理人員通過計算機網絡或雙方接入網絡,通過遠程撥號的方式將被控制的電腦連接起來,將被控制電腦的桌面環境提示到自己的計算機上,并進行配置,軟件安裝,通過本地電腦對遠程電腦進行修改和其他工作。遠程控制需要網絡的支持。本地設備是主控制端或客戶端,主要工作是將控制命令的發送出去,接收方是被控制端或服務器端,是處于另一端網絡的設備。遠"程"并不簡單指代遠"距離",客戶端和服務器端可以處在同一局域網內,也可以是兩臺設備連接各自的網絡后處在不同網段的兩臺及以上的設備。最初的遠程協助的意思是僅僅對處于局域網中設備實現的遠程控制。近幾年互聯網和計算機技術更新換代,遠程協助功能日益強大,對于被控端設備,主控端連接成功后就可以啟動被控端設備的工具,甚至可以查看被控端設備中的文件資料。1.2研究現狀在Android平臺上,這里聚集了大量優秀的程序員和科研工作者,同時平臺上的源代碼和學習資料都是向大眾開放,用戶可以注冊一個賬戶然后提取自己需要的資料,這一有利條件推動了國內外眾多程序員對安卓系統應用軟件上的深入開發研究,尤其是以安卓平臺為基礎的內核特制、應用軟件開發、系統框架設計這些方面。遠程協助技術在現在已經發展的較為完善了,目前的遠程協助的實現主要有四種方法:一是基于C/S(client/server——客戶端/服務器架構)架構的web遠程協助。傳統的兩層架構上,C/S架構是鮮明代表,客戶端計算機上運行的程序包括用戶電腦上運行的一個或多個軟件,而服務器端有兩種,一種是數據庫服務器端,在客戶端訪問服務器端的數據之前,需要與數據庫先連接;另一種是Socket服務器端,服務器端的程序與客戶端兩者之間進行程序上的會話溝通,需要編譯Socket實現兩臺設備在網絡下相互連接。C/S架構是目前遠程協助主要架構,客戶端在這種架構中起重要作用,這就使得處在客戶端的那臺設備因為處理的事務過多cpu負荷量過大,客戶端要實現業務邏輯、展示用戶界面、顯示邏輯、事務信息處理,并且要使得在做SQL這一模塊和實現存儲過程時能夠實現數據交互,還需要訪問數據庫,只有通過這種連接才能使數據保持穩定,滿足在現實生活中開發一個項目的需要。還有的方法是基于Java語言的B/S架構的Web遠程控制方法。B/S架構的全稱:Browser/Server,即瀏覽器/服務器結構。Browser指的是Web瀏覽器,web前端瀏覽器上不像C/S架構的客戶端,它處理的事務很少,承受的壓力很小,相比之下,服務器端卻堆積了絕大多數的事務邏輯等待系統處理。Browser客戶端、WebApp服務器端、DB端組成三層架構。B/S架構的系統只要設備上裝有Web瀏覽器就可以實現需要的功能。B/S架構中,各種架構負責不同的系統運行實現,邏輯信息經過系統處理通過web前端瀏覽器顯示,為了避免客戶端的邏輯事務堆積在同一處處理造成負荷壓力大的問題,這一部分由webapp處理。第三種實現方式是基于目前已有的C/S架構和B/S架構的基于GPRS和Internet網絡。這種方法充分利用兩者的顯著特點,建成的是可以實現遠程分布式控制系統。最后一種是以單片機為微控制核心實現了IPv4和TD-SCDMA協議的通信,構建了基于TD-SCDMA協議的遠程控制方法。截至目前,我國市場上已經有相關成果出現,如向日葵遠程控制,teamview軟件以及華為公司推出的“親情關懷”,還有利用藍牙技術連接的近距離無線通信。親情關懷需要使用華為賬號登錄,可通過網絡撥打電話或者以發送短信的方式進行實現,遠程協助的功能具體體現在“請求幫助”(請求對方遠程控制你的手機),“提供幫助”(請求遠程控制對方手機)兩個核心選項上。另外重要的一點:親情關懷雖然可以安裝在市場上所有Android手機上,但是這一工具只有華為品牌的手機才可以使用此功能。2相關理論及技術背景2.1Java語言Java語言發行時間較晚,它包含C++語言的所有優點,C++語言發行時間早,很多結構負責,令很多程序員在早期學習的時候常常對繼承、指針等地方費解,針對這一情況,Java語言進行適當取舍,對c++語言中結構復雜冗余的概念進行優化,因此Java語言對于初學者來說簡單易上手,強大的功能使得其在編程開發語言領域占據重要地位。Java語言是靜態面向對象的編程語言的典型,他能有效體現面向對象理論,使程序員在進行一些規模較大的開發編程中能夠有清晰的邏輯思維。Java語言沒有結構不需要指針,數組和串是對象,能自動處理對象間的各種引用關系,從而實現對無用單位的采集工作,這樣,程序員無需對存儲管理的工作阻礙,能將更多的時間和精力放在產品研發,大大提高工作效率。Java語言特點:簡單性、面向對象、分布性、健壯性、安全性、平臺獨立與可移植性、多線程性、動態性、編譯和解釋性、高性能等。Java語言被特意設計成適應于不斷變化的環境,其應用范圍十分廣泛,可用于編寫桌面應用程序、Web應用程序、分布式系統和嵌入式系統應用程序、Android應用等。Java語言運行工作原理:1.Java編程語言2.Java類文件格式3.Java虛擬機4.Java應用程序接口
圖2-1Java工作原理當編輯并運行Java程序時,需同時涉及這四方面。使用文字編輯軟件、Eclipse、Idea在Java源文件中定義不同類,通過調用類中的方法訪問資源系統,把源文件編譯生成二進制中間碼,存儲在class文件中,然后再通過運行與操作系統平臺環境相對應的Java虛擬機來運行class文件,執行編譯產生的字節碼,調用class文件中實現的方法來滿足程序的JavaAPI調用。如圖2-2所示。圖2-2Java工作流程2.2Java編程環境Java開發包及Java開發工具是基于JDK(JAVADevelopmentKit),這個開發環境主要是用Java語言編寫的,可以用來做Applet小程序和其他軟件程序。JDK包含JRE(JavaRuntimeEnvironment)、Java工具以及一些核心類庫(JavaAPI)是Java語言的重點。每個Java應用服務器實質上都對應某個JDK版本。另外,JRE是支持Java程序運行的基本環境,而JavaAPI類庫中包含的JavaSEAPI子集和Java虛擬機統稱為JRE。JRE是Java運行環境,JDK是Java的開發環境。所以在編寫運行Java程序時必須搭載JDK,因此在電腦中安裝JDK即可正常編寫Java程序,也能正常運行。而JDK包含了許多與Java運行不相關的文件,內存空間占用大,所以在運行一般的Java程序只安裝JRE而不安裝JDK。2.3安卓系統
2.3.1安卓系統結構Android操作系統框架自上而下分為:Android應用層、Android應用架構層、Android系統運行層、Linux內核層,如圖2-2所示。圖2-3Android操作系統框架安卓系統大多由Linux內核實現一些基本系統功能,如系統占據內存、系統運行進程、系統文件和用戶的管理以及進程間的通信等。智能手機現在大多有攝像頭、控制屏幕和其他硬件設備。Linux內核層還為這些硬件提供了各種驅動程序。該層提供的接口是硬件抽象層(HAL)?;谶@樣的規范下,手機廠商可以實現系統遷移,即根據本機器硬件特點做一個與之不同的硬件驅動程序,憑借此接口支持上層。安卓系統庫里在系統運行時層存儲了大量的系統功能和組件,上層在系統運行過程中可以調用這些功能和組件,安卓的系統運行在一個名為“Dalvik虛擬機”的虛擬機上。應用程序框架層主要表現在安卓系統對移動設備應用程序。它將進程和內存管理的概念隱藏在系統中,并根據不同的應用需求抽象出活動(Activity)、服務(Service)、內容提供商(Contentprovider)和廣播意圖接收者(Broadcastreceiver)、廣播接收器(IntentReceiver)這些組件是應用程序的基本元素,一些基本的通用功能如移動通話、資源分配與管理、窗口切換、軟件安裝與卸載、手機定位等。該層以Java的形式提供了安卓應用程序開發的框架和接口。應用層是安卓操作系統框架的頂層。軟件開發者通過Java語言和底層框架接口,在安卓平臺上開發各種特色應用。圖2-4安卓系統架構應用2.1.2安卓應用開發1.安卓應用程序結構安卓程序包括五方面:(1)活動(Activity)(2)廣播意圖接收者(BroadcastIntentReceiver)(3)服務(Server)(4)內容供應商(ContentProvider)(5)廣播接收器(IntentReceiver)活動(Activity):應用程序表示層,類似瀏覽器的一個頁面或者是我們手機的一個屏幕展示。當用戶要對我們的系統做出一些指令,實現用戶與計算機交流,如輸入互動信息,需要在Activity中添加view。應用程序和Activity之間是一對多的關系,每個Activity活動時間都有時間限制,通過這些Activity之間的跳轉可以實現設備上各個頁面信息傳輸,呈現不同的網頁或者手機界面。廣播接收器(IntentReceiver):這一結構能夠一次性對所有等待處理的對象執行抽象描述。Intentreceiver與上層activity聯系,基于這一結構activity和activity才能進行跳轉,用戶界面切換。(動作)action和(動作)action產生的數據信息(data)是IntentReceiver的基礎結構。他包含的IntentFilters是用來描述Intent能夠用來處理哪些操作。廣播意圖接收者(BroadcastIntentReceiver):對外部事件做處理。BroadcastReceiver并不能產生一個有效的用戶界面,執行這一操作時,用戶并不能看到具體流程。自動啟動應用程序來響應某個收到的Intent,這個特點讓BroadcastReceiver成為了事件驅動的應用程序的最佳選擇。服務(Service):運行在后臺的應用程序。Service組件在運行時沒有UI,它們可以更新數據源和Activity、觸發通知和廣播Intent。內容供應商(ContentProvider):每個ContentProvider都自動生成一組標準的接口通過這些接口實現應用程序之間共享數據,應用程序保存或讀取ContentProvider的各種數據類型,將自己內部信息分享到外界。對于網絡外其他的應用程序來說,數據的存儲方式、存儲位置并不重要也無需訪問,訪問數據只需在ContentProvide生成的r接口中訪問。但這一操作涉及到權限問題,在實際數據訪問中需要提前獲取適當的讀取權限。Android應用程序開發基于Java語言,對于現在不斷更新變換的手機開發系統,開發工具、環境、平臺對軟件研發者技術要求越來越高,Google公司提供海量技術支持:AndroidSDK應用程序開發工具包、AndroidNDKC/C++應用程序開發工具。Android應用層和應用框架層編譯語言都是基于Java語言,系統運行庫和內核這兩層是用C/C++語言進行編譯,這四層框架交互連接是通過JNI接口建立,具體的實現方法是:處于上層的Android應用層和應用框架層通過Java語言程序通過調用底層系統運行庫和Linux內核層的函數庫實現Android應用程序開發。用戶可通過AndroidNDK和JNI接口使用C/C++語言進行Android應用程序的開發。開發者在編譯完成一段Android應用程序源碼后打包形成獨立的“.apk”文件。這個文件非常重要,包含應用程序二進制代碼、配置文件、資源文件等,當用戶要通過Android平臺安裝應用程序,“.apk”文件是基礎配置。編寫的程序沒有這一文件,無法生成。2.Android應用程序開發環境Eclipse+ADT+AndroidSDK的開發配置在開發圈上是當前主流的開發工具以及配套組件。Eclipse是開源的,最初主要用Java語言,它核心小,所有功能都以插件的形式附加于Eclipse核心之上,但目前已經有經驗豐富的開發者利用插件在這一平臺使用其他計算機語言如python和C++。ADT也是其中用來做Android軟件開發的工具包,這個工具插件運用于Eclipse中開發Android應用程序,Google推出AndroidSDK工具為Android開發提供開發工具的升級或者變更,向開發者提供了必要的庫文件以及其它開發中需具備的工具。如圖2-3所示。圖2-5Android應用程序結構2.2遠程協助原理和技術2.2.1基于C/S結構的遠程協助技術C/S結構指客戶機和服務器結構,屬于軟件系統構架,這一結構在客戶端和服務器端都需要進行邏輯處理,因此設備對硬件要求高,后臺將系統進程按具體需求合理分配到客戶端和服務器端,大大降低系統花費在通訊上的成本。目前市場上應用軟件系統基本上是C/S結構,客戶機,服務器應用程序能進行相同的業務處理,即使應用模塊有差異,也可以共享邏輯組件,這就使得系統內部和外部用戶都能訪問進入刷新的應用系統,將現有應用系統中的邏輯進行擴展。C/S工作模式常用于兩臺距離較遠的設備上,客戶端程序的主要工作是產生數據,存放在客戶端軟件內存中,再通過接口調用產生的數據發送到客戶端操作系統,客戶端操作系統收到數據再利用指定的協議發送數據。通過網絡傳輸至服務器端;Server程序的工作是在接收客戶程序提出的服務請求后,進行相應的處理,再將結果返回給客戶程序。這種模式如圖2-4所示。圖2-6C/S模式工作流程請求客戶端服務器請求客戶端服務器響應響應早期C/S體系結構由于其結構的不完整性,在某些特殊條件下在Client端和Server端都依靠特定的條件支撐才能實現。C/S結構的基本原則是“功能分布”原則。將計算機進程中的任務劃分成若干個不同的子任務,分配至其他的計算機上分工完成??蛻舳酥饕蝿帐菍祿M行處理,數據表示和用戶接口功能;服務器端主要任務是運行DBMS,對數據庫進行查詢管理,顯示用戶操作界面。C/S結構的最大優點是交互性強,客戶端設備處理功能強大,大量任務都先在客戶端設備處理結束后再次提交到服務器。這一流程極大的好處就是客戶端處理問題效率高。具體表現在以下兩點:1.方便處理大量數據,響應速度快。C/S體系結構的數據庫分為兩部分:客戶應用程序、數據庫服務器程序。在數據庫服務器程序運行的設備,也稱為應用服務器。當服務器端程序啟動后,就保持等待狀態直到另一端程序發送連接請求。與之對應的稱為客戶電腦,客戶應用程序在用戶自己的電腦上運行時,客戶應用程序開始自動尋找服務器程序前需要對數據庫中的數據檢索,找到相應的服務器端數據信息,向服務器發出連接請求,另一端服務器程序根據系統設定以及工作人員操作作相應指示,返回結果。2.對數據儲存管理公開透明。數據庫應用中,服務器程序和客戶應用程序各自對數據儲存管理進行自己的操作,不同的前臺應用不能違反的網絡協議規定,在服務器程序中集中實現。所有對于工作在前臺程序上的最終用戶都可以看到工作流程以及內部信息,對于后臺運行的程序兩者并不影響,只需要運行他們分配到的系統任務。在客戶服務器架構的應用中,絕大多數工作量由服務器和網絡完成,前臺程序也需要一定的規模。在C/S體系下,數據庫不能對外開放、也不具備專業性,它是獨立的,受指定部門管理。2.2.2基于B/S架構的遠程控制技術B/S架構指瀏覽器/服務器架構模式。隨著Internet技術的大力發展,web興起,基于C/S架構進行變化和改進形成的新的架構稱為B/S架構。用戶在這種架構下的工作界面是基本上通過萬維網瀏覽器實現,是客戶端最主要的應用軟件,主要事務邏輯在服務器端(Server)實現,只有相當少量的事務邏輯在前端(Browser)實現,形成三層3-tier結構。C/S架構將系統開發、維護和利用流程簡明化,它將系統功能實現的中樞部分發送到服務器上完成,而客戶機上只要安裝一個瀏覽器(Browser)通過WebServer同數據庫進行數據交流。這種操作模式分布性強,直接放在局域網上,為客戶端設備減壓,客戶端零維護,業務擴展便利,開發簡單,共享性強。如圖2-5所示。圖2-7B/S技術工作流程B/S模型是近幾年正在興起的軟件系統構造技術,在瀏覽器技術的不斷發展和完善下實現不依賴繁瑣、特定的軟件也能實現的開發功能,提高運行效率,降低開發成本。在B/S架構支持下,遠程協助變得更加易于操作,不再是只能使用專用客戶端就能實現,只要帶有瀏覽器就可以隨時隨地的進行遠程協助,遠程控制工具的機動性有效加強。凡事都有利亦有弊,B/S的靈活性,使得其安全保障上有一些欠缺,比C/S架構較薄弱。C/S架構系統具有一定封閉性,適用性窄,用戶群固定,只有兩層傳輸,而不是中間有多層架構,界面和操作豐富,客戶端操作可以隨意排列,滿足客戶需要,此外客戶端程序需要安裝才可以使用,安全性得到保障,因此,在實際的遠程協助開發中,為了加強信息安全性,遠程控制工具一般采用C/S架構實現。3系統分析與設計3.1系統總體結構設計本設計是用C/S架構實現,實現主要方式為:在服務器端和客戶端設備上安裝另一端設備上的程序。這一操作流程是先開啟主控端設備,然后對被控端設備上執行一些命令,使被控端程序收到訪問請求,在命令從主控端發出和被控端接收這一流程中,主控端會發送對應的控制命令到被監控端配置的UDP端口,被監控端接收到控制命令后,主動開啟自己的TCP端口去對主控端開啟的TCP端口發送連接請求,且對被控端發送的對應訪問請求做出相應的操作?;谶@樣的操作流程下實現一個簡單的遠程協助功能。在這個遠程協助服務中,主控端使用各種遠程控制功能向被控端發送遠程協助命令,能夠對被監控端設備中的各種應用程序執行相應的基本操作。如圖3-1所示。圖3-1終端設備結構采用c/s模式,客戶端和服務器端兩者各自分配到相應軟件功能。在應用程序開發中,這種結構因為結構簡單(只有兩層)應用與服務兩者分離,系統具有極強的靈活性和穩定性。被控端對主控端發送的命令進行處理,并反饋命令處理結果;主控端負責顯示處理結果,包括用戶登錄界面和顯示被控端命令處理發送來的結果;在這一操作流程下,兩者之間的數據進行交換,兩者數據通信模塊共同建立起交換通道。通過點到點的直接控制監控,可在線實現遠程協助。主控端包含模塊:輸入信息模塊,顯示命令處理結果模塊,通信模塊。輸入信息模塊主要任務是將用戶界面的事件傳送到通信模塊,通信模塊將命令信息發送到被監控端;被監控端執行操作后返回的成功或失敗信息交由主控端命令處理結果顯示模塊根據信息的格式進行顯示。被控端包含模塊:通信模塊,命令處理模塊。被控端在監聽狀態下接收到合法的連接請求,就會進行命令接受,自動打開UDP端口,連接建立成功后,通信模塊對接收到的主控端發來的命令信息,命令處理模塊對命令信息分析處理做出響應,并將結果反饋到主控端。3.2系統邏輯流程在被控端上安裝客戶端程序時,安裝的客戶端程序會自行啟動,并開啟UDP端口,如果防火墻、電腦管家以及其他殺毒工具阻止這一進程,就嘗試開啟配置其它UDP端口重復進行之前的操作,如果反復采用這些方法后依舊顯示啟動失敗??梢試L試將開啟的UDP套接字傳入,然后開啟命令接收線程,將自己添加到自啟動項,并改名為Explorer.jar。這一方法可以進行命令獲取,并處理獲取命令。安裝服務器程序在主控端時,主控端先啟動控制窗口類,這時主控端安裝在服務器端的程序會出現一個啟動的頁面,用戶在這個登陸頁面窗口處輸入被監控端的IP地址。主控端開啟一個TCP端口發送一條初始化命令(命令格式:ordername:port;ordername:命令名;port:主控端打開的TCP端口號)到被監控端的IP地址配置的UDP端口。開啟TCP端口后主控端進入監聽狀態,如果連接超時則連接失敗,需要重新連接。當連接成功時,主控端程序開始讀取被監控端的信息并自動捕捉被監控端的畫面信息,主控端可以對被控端上的應用程序進行屏幕監視和執行一些簡單的控制操作。當被監控端UDP端口成功啟動,主控端設備啟動對該端口的偵聽工作,一旦收到UDP端口發送來的命令文件,主控端就立刻對命令文件及時抓取分析判斷發送來的命令文件是否對主控端有實際的控制作用(命令格式:ordername:port)如果這段命令對主控端沒有任何作用,就返回空指令且繼續回到監聽狀態在偵聽到命令是抓取分析重復之前的流程。若截取來的命令執行后對主控端有影響,系統就會從主控端中調取對應的命令處理模塊,在這段命令操作執行后將處理結果反饋至主控端。主控端收到命令處理結果后打開一個TCP端口,向被監控端的UDP端口發送一條“被控端處理連接信息”的UDP命令(命令格式:screen:TCPPort)。如果該命令長時間沒有得到被控端回應,則連接失敗,自動斷開,彈出連接失敗的消息,返回初始登陸界面。得到回應后,被監視端發送連接申請,生成Soket對象,且socket對象中有被監視端提交的圖像信息,讀取圖像信息后被控端的畫面信息會出現在主控端的屏幕上,在一定的時間周期內(以秒為單位),再次訪問被控端屏幕讀取,更新圖像信息,以達到被監控端屏幕被持續接收。 主控端向被控端發送UDP命令(格式:control:TCPPort),這一命令主要的功能是獲取主控端開啟的TCP端口號。被控端輸入獲取到的主控端開啟的TCP端口后,兩臺終端設備連接成功,被控端可讀取主控端事件對象信息,并進行類型判斷、重演。連接成功兩臺設備會執行一系列操作,被控端還需要判斷主控端開啟的TCP端口是否正常開放,如果端口關閉,主控端和被控端兩臺設備斷開連接,遠程協助結束。所以在兩臺設備遠程協助時,需要保證TCP端口在通信中始終是正常開啟狀態,兩臺設備連接時,主控端仍能對被控端執行控制命令,被控端依舊可以讀取主控端事件信息。4系統實現方法與技術4.1通信模塊實現1.Socket編程數據通信模塊內的數據通道是由socket編程編譯的。Socket編程相對輕松便捷,將網絡中底層的通信細節屏蔽;socket(套接字)是應用層和TCP/IP協議族通信的中間軟件抽象層,它是一組接口,計算機之間進行通信的一種約定或一種方式實現,通過socket這種約定,一臺計算機可以接受其他計算機發送來的數據,也可以發送數據給其他計算機。在發送和接收數據機制時,socket可以為兩端設備提供打開、計算和關閉會話的功能。Socket主要支持TCP/IP協議網絡通信的基本操作,在本項目中,主要采用C/S架構,client端和server端運行Windows操作平臺下,client和server兩端之間所有需要執行操作的命令和需要傳輸的數據信息都可以使用JavaSocket編程實現。2.通信建立socket()函數用來創建一個Socket套接字。兩臺計算機之間的通信相當于兩個套接字通信,因此無論是服務器端還是客戶端這兩端都需要調用一個獨立的套接字,且調用的套接字是不同的。前期的論述中提到在主控端開啟一個TCP端口,被監控端檢測到開啟一個被控端IP地址對應的UDP端口與主控端TCP端口主動連接,為什么不能在被控端執行這一操作呢,因為在被控端直接開啟一個TCP端口具有一定的安全隱患,一旦系統檢測到被控端TCP端口被打開,防火墻和系統安裝的殺毒軟件就會強行終止后續行為,這一控制將無法實現。讓主控端去和被控端連接這樣的監控功能安全隱患小,不受太多權限阻止,確保兩臺設備的交流可以成功實現,提高運行效率。主控端設備需要創建一個ServerSocket對象,ServerSocket的方法在調用時accept開啟監聽功能。當訪問的是被監控端,返回socket對象,服務器端和客戶端進行數據交換。此外,連接必須要在被控端的同意下進行,連接后,客戶端與服務器兩端設備可以相互發送數據信息到對方的設備上。返回socket對象后,主控端成功建立Readobj對象,在被監控端上實現消息的接收和發送,即Readobj對象建立成功。兩者完成遠程協助后,調用ServerSocket和socket對象中的close關閉套接字,通信斷開。圖3-1socket通信原理主控端主要通信代碼:publicclassClientextendsThread{ privatestaticSocketsocket=null; privatestaticRobotrobot=null; publicstaticvoidmain(String[]args){ booleanisConn=false; Clientclient=newClient(); do{ isConn=client.doStart(); }while(isConn==false); client.start(); if(socket!=null){ ReadObjreadObj=newReadObj(socket,robot); readObj.start(); } }被監控端主要通信代碼:serverSocket=newServerSocket(serverPort); }catch(IOExceptione){ e.printStackTrace();4.2系統屏幕畫面傳輸的實現在遠程協助過程中主控端設備需要獲取被控端設備GUI(圖形界面)界面,在遠程協助中,我們在獲得屏幕畫面時需要不停截取有效畫面,將這些截取獲得的有效畫面集中收錄到一個大的圖像文件夾中。目前,各大平臺下,截取屏幕的軟件方式和工具并不少見,比如各大手機商都有自帶的截屏錄屏工具、HyperCam、Windows操作系統下截屏通過PrintScreen鍵,將屏幕截取至剪貼板可直接保存為jpg格式的圖片。但這些工具軟件在運行過程中,工作人員需要集中精力,等候直到預期圖片出現進行抓取,這耗費人力且過程繁瑣。所以,在我們在對Java應用程序進行操作時,主控端設備想要獲取正在運行的被控端的頁面信息,需要確認被控端設備上應用程序和各種工具是否在正常運行。在我們研究的這個Java應用程序中,需要設計一個功能可以自行截取有效界面,將被控端設備GUI界面保存到一個集中圖像文件夾中,然后通過網絡將所有的圖像信息發送到主控端設備上。在本段開頭提到的市面上已經流行的各大操作系統自帶的截圖工具和市面上常規的軟件與我們研究的Java應用不能有效結合。所以我們在對這項應用程序設計中需要添加一個可以自行抓取屏幕并保存抓取屏幕圖像的功能。“截圖”這一功能不難實現,是直接運行在“裸機上”最基本的系統軟件。其實,截圖這一功能在Java應用程序中并不難實現。在JavaJDK1.5.0中提供了一個Robot類。該類用于產生與本地操作系統有關的底層輸入、測試應用程序運行或自動控制應用程序運行。構造PicturePanelJavabean類設計出用來抓取屏幕界面的相機publicPicturePanel(UserGUIgui){ this.gui=gui;//抓取全屏 Object[]items={"Backcamera","Frontcamera"}; /*定義主控端被控端抓取屏幕*/ splitPane=newJSplitPane();//更新圖像信息 splitPane.setResizeWeight(1.0); GroupLayoutgroupLayout=newGroupLayout(this); groupLayout.setHorizontalGroup( groupLayout.createParallelGroup(Alignment.TRAILING) .addGroup(groupLayout.createSequentialGroup() .addContainerGap() .addComponent(splitPane,GroupLayout.DEFAULT_SIZE,501,Short.MAX_VALUE) .addContainerGap()) ); groupLayout.setVerticalGroup( groupLayout.createParallelGroup(Alignment.TRAILING) .addGroup(Alignment.LEADING,groupLayout.createSequentialGroup() .addContainerGap() .addComponent(splitPane,GroupLayout.DEFAULT_SIZE,400,Short.MAX_VALUE) .addContainerGap()) ); panel=newJPanel(); splitPane.setLeftComponent(panel); panel.setBorder(newEtchedBorder(EtchedBorder.LOWERED,null,null)); imgLabel=newJLabel(); panel.add(imgLabel); panel_1=newJPanel(); splitPane.setRightComponent(panel_1); list=newJList(); list.addMouseListener(newMouseAdapter(){被監控端向主控端發送命令傳輸數據,該功能的實現中構造了類:commandFileSendercommandFileSenderJavaBean代碼和說明如下:publicvoidcommandFileSender(Stringimei,shortcommand,byte[]args,Stringdir,Stringname){ intchannel=channelHandlerMap.get(imei).getFreeChannel(); if(!channelHandlerMap.get(imei).registerListener(channel,newFilePacket())) gui.logErrTxt("ERROR:channel"+channel+"isalreadyinuse!"); channelHandlerMap.get(imei).registerHandler(channel,newFileHandler(channel,imei,gui,dir,name)); //gui.saveFileChannel(imei,channel); byte[]nullArgs=newbyte[0]; if(args==null)args=nullArgs; clientMap.get(imei).toMux(command,channel,args); }主控端與被控端連接成功后:while(connected){ try{ //System.out.println(""); //buffer=receiver.read(); buffer=receiver.read(buffer); try{ if(demux.receive(buffer)){ //System.out.println("Restant:"+buffer.remaining()+"Position:"+buffer.position()+"Limit:"+buffer.limit()); pact(); } }catch(Exceptione){ connected=false; /* connected=false; try{ clientSocket.close(); mainGUI.deleteUser(imei); }catch(IOExceptione1){ }*/ server.getGui().logErrTxt("ERROR:
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 花卉種植的自動化與智能化技術考核試卷
- 信息系統監理師考試內容展望試題及答案
- 調味品生產設備選型與維護保養考核試卷
- 軟件測試中的時間管理策略試題及答案
- 氣體凈化技術在飼料工業的應用考核試卷
- 網絡技術與軟件開發結合試題及答案
- 行政組織文化建設的重要性試題及答案
- 行政組織理論的教學方法對比與2025年試題及答案
- 客服大廳電腦管理制度
- 公司外幣結匯管理制度
- GB/T 9755-2024合成樹脂乳液墻面涂料
- 市政雨污水管排水工程監理實施細則
- 臺球店員工合同范例
- 我的家鄉廣西百色
- 程序文件-XXX(安全閥校驗機構)(2023版)
- 散糧裝卸工藝
- 中華人民共和國產品質量法培訓
- 餐廳干股分紅協議書
- 醫院手術室凈化裝修方案
- 2024年海南省高考地理試卷(含答案)
- 《排球正面雙手墊球 移動墊球》教案
評論
0/150
提交評論