首頁>技術>

Java課程設計專案例項《遠端螢幕分享監視》第2部分

1、伺服器端ScreenMonitoringServer程式類及相關的功能方法的程式設計實現

(1)創建出伺服器端的ScreenMonitoringServer程式類

在MyEclipse開發工具中創建出一個類名稱為ScreenMonitoringServer,程式包名稱為com.bluedream.monitor.server,並且包含有main()方法的Java程式類,ScreenMonitoringServer程式類的建立過程參看如下示例圖所示。

(2)在ScreenMonitoringServer程式類中新增一個名稱為listenToSomeOneClient方法

該方法主要實現伺服器對客戶端的請求連線的監聽,一旦有客戶請求連線,則獲得該客戶相關的Socket物件例項,並打印出客戶機的IP地址和成功連線的提示資訊;如果此時沒有客戶請求連線,則繼續迴圈等待客戶請求連線。當然,還需要對相關的異常進行處理。查詢程式碼參看如下示例圖所示的程式。

(3)程式設計ScreenMonitoringServer程式類中的main()方法

在main()方法中首先進行狀態識別——伺服器是否已經啟動,並根據識別的狀態分別給出提示資訊。如果伺服器沒有啟動,也就是本程式正在執行,則創建出ScreenMonitoringServer程式類的物件例項,並透過該物件例項呼叫listenToSomeOneClient方法以監聽客戶端的請求連線。ScreenMonitoringServer程式類中的main()方法的最終實現程式碼參看如下示例圖所示的程式。

2、本專案伺服器端SendScreenToClientThread程式類及相關的功能方法的程式設計實現

(1)創建出伺服器端的SendScreenToClientThread程式類

在MyEclipse開發工具中創建出一個類名稱為SendScreenToClientThread,程式包名稱為com.bluedream.monitor.server的Java程式類,並且該類繼承java.lang.Thread執行緒類,不需要包含有main()方法。SendScreenToClientThread程式類的建立過程參看如下示例圖所示。

(2)在SendScreenToClientThread程式類中新增一個run()方法

run方法為執行緒體方法,在該方法中定時對伺服器主機的螢幕進行截圖,然後透過sendImageToClient()方法將截圖資料傳送到客戶機中。對相關的異常也需要進行對應的處理,並根據錯誤的型別分別顯示出相關的錯誤提示資訊。run方法的程式程式碼可以參看如下示例圖所示的程式程式碼。

(3)在SendScreenToClientThread程式類中新增一個sendImageToClient()方法

在sendImageToClient()方法中首先將螢幕截圖所產生的資料轉換成位元組陣列,然後再將轉換後的影象陣列封裝到PO物件中。最後透過物件輸出流將PO物件輸出到客戶端。參看如下示例圖所示的程式程式碼。

3、本專案客戶端ScreenMonitoringClientFrame程式類及相關的功能方法的程式設計實現

(1)創建出客戶端的ScreenMonitoringClientFrame程式類

在MyEclipse開發工具中創建出一個類名稱為ScreenMonitoringClientFrame,程式包名稱為com.bluedream.monitor.client,並且該類繼承javax.swing.JFrame窗框類和包含有main()方法的Java程式類,ScreenMonitoringClientFrame程式類的建立過程參看如下示例圖所示。

(2)程式設計ScreenMonitoringClientFrame程式類的構造方法

由於需要實時地顯示被監視的伺服器端螢幕,因此客戶端程式不能設計為命令列風格的程式,而需要設計為影象視窗風格的程式。因此,在ScreenMonitoringClientFrame程式類的構造方法中構建出客戶端程式的視窗,參看如下示例圖所示的程式程式碼。

(3)在ScreenMonitoringClientFrame程式類中新增一個名稱為getScreenSize方法

由於需要對伺服器主機所在的螢幕進行截圖,因此需要獲得伺服器主機的螢幕尺寸,這可以透過getScreenSize方法返回螢幕的尺寸。參看如下示例圖所示的程式程式碼。

(4)程式設計ScreenMonitoringClientFrame程式類中的main()方法

在main()方法中首先識別伺服器目前是否已經啟動,只在服務啟動後,客戶端程式才可以執行。如果伺服器已經啟動,則創建出客戶端視窗物件,並顯示出主視窗。參看如下示例圖所示的程式程式碼。

4、本專案客戶端ShowServerImagePanel程式類及相關的功能方法的程式設計實現

(1)創建出客戶端的ShowServerImagePanel程式類

在MyEclipse開發工具中創建出一個類名稱為ShowServerImagePanel,程式包名稱為com.bluedream.monitor.client的Java程式類,並且該類繼承javax.swing.JPanel面板類和實現java.lang.Runnable介面,但不需要包含有main()方法。ShowServerImagePanel程式類的建立過程參看如下示例圖所示。

(2)在ShowServerImagePanel程式類中新增一個名稱為receiveImageFromServer方法

receiveImageFromServer方法主要實現接收從伺服器端傳送的影象資料,並轉換為位元組陣列。然後再從位元組陣列中獲得截圖所對應的BufferedImage類的物件例項,最後透過呼叫repaint()方法更新視窗以及時顯示出截圖影象,從而在客戶端程式的視窗內顯示出伺服器主機的螢幕資訊,實現實時監視螢幕的應用效果。參看如下示例圖所示。

(3)程式設計實現ShowServerImagePanel程式類中的run方法

run方法為執行緒體方法,在該方法中定時接收從伺服器端程式傳送的截圖影象的壓縮資料,然後對所獲得的壓縮資料進行解析,最終獲得伺服器端螢幕截圖的影象,將此影象在面板中顯示輸出。參看如下示例圖所示。

(4)在ShowServerImagePanel程式類中重寫paint方法

在paint方法中將所獲得的截圖影象在客戶端主機的螢幕上顯示,參看如下示例圖所示。

5、本專案實體MessageInfoPO程式類及相關的成員屬性的程式設計實現

(1)創建出實體MessageInfoPO程式類

在MyEclipse開發工具中創建出一個類名稱為MessageInfoPO,程式包名稱為com.bluedream.monitor.pobject的Java程式類,並且該類實現java.io.Serializable介面,但不需要包含有main()方法。MessageInfoPO程式類的建立過程參看如下示例圖所示。

(2)在實體MessageInfoPO程式類新增相關的成員屬性

為了提高專案中相關程式的可維護性,將在多個程式類中都需要應用的資料統一在MessageInfoPO程式類中定義,並設定為static靜態資料以方便獲得這些屬性變數。參看如下示例圖所示的程式程式碼。

6、執行ScreenMonitoringServer程式並啟動伺服器

在網路通訊中的伺服器和客戶端在程式啟動的次序上,需要保證伺服器端程式首先執行,併成功地啟動相關的服務後,才可以啟動和執行客戶端程式。否則客戶端程式無法傳送請求連線。因此,首先執行ScreenMonitoringServer程式並啟動伺服器。

在MyEclipse開發工具中右擊源程式,在彈出的快捷選單中選擇“Run as”下拉選單中的“Java Application”子選單專案,將執行本示例ScreenMonitoringServer類程式。操作過程請參看如下示例圖所示。

伺服器端程式正常執行和服務成功啟動後,將在控制檯上顯示輸出“伺服器啟動成功,正在監聽埠:3721”的提示資訊,並等待客戶端程式的連線請求。參看如下示例圖所示的執行結果。

7、執行ScreenMonitoringClientFrame客戶端程式並請求連線伺服器

當伺服器端程式正常執行和對應的服務成功啟動後,才可以執行客戶端程式。在MyEclipse開發工具中右擊源程式,在彈出的快捷選單中選擇“Run as”下拉選單中的“Java Application”子選單專案,將執行本示例ScreenMonitoringClientFrame類程式。操作過程請參看如下示例圖所示。

當客戶端程式成功連線到伺服器後,在控制檯中顯示輸出“客戶機:127.0.0.1:50504 成功連線伺服器”的提示資訊。表明某個客戶機已經成功連線到伺服器。執行的結果請參看如下示例圖所示。

本專案允許多個客戶端同時請求連線伺服器,每當一個客戶機成功請求連線伺服器後,都會在控制檯上列印輸出如下示例圖所示的成功連線的提示資訊。

在客戶端主視窗內將實時地顯示出伺服器端主機桌面,參看如下示例圖所示。但由於作者是在同一臺機器中執行伺服器和客戶機程式,伺服器端程式和客戶端程式共享同一個Windows系統的桌面,因此監視的視窗會產生巢狀顯示的結果。

如下示例圖為本專案執行後的某個時刻的截圖。

15
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • leetcode1702_go_修改後的最大二進位制字串