Java课程设计项目实例《远程屏幕分享监视》第2部分

1、服务器端ScreenMonitoringServer程序类及相关的功能方法的编程实现

(1)创建出服务器端的ScreenMonitoringServer程序类

在MyEclipse开发工具中创建出一个类名称为ScreenMonitoringServer,程序包名称为com.bluedream.monitor.server,并且包含有main()方法的Java程序类,ScreenMonitoringServer程序类的创建过程参看如下示例图所示。

android与java实时视频监控 java做视频监控_服务器端

(2)在ScreenMonitoringServer程序类中新增一个名称为listenToSomeOneClient方法

该方法主要实现服务器对客户端的请求连接的监听,一旦有客户请求连接,则获得该客户相关的Socket对象实例,并打印出客户机的IP地址和成功连接的提示信息;如果此时没有客户请求连接,则继续循环等待客户请求连接。当然,还需要对相关的异常进行处理。查询代码参看如下示例图所示的程序。

android与java实时视频监控 java做视频监控_服务器端_02

(3)编程ScreenMonitoringServer程序类中的main()方法

在main()方法中首先进行状态识别——服务器是否已经启动,并根据识别的状态分别给出提示信息。如果服务器没有启动,也就是本程序正在执行,则创建出ScreenMonitoringServer程序类的对象实例,并通过该对象实例调用listenToSomeOneClient方法以监听客户端的请求连接。ScreenMonitoringServer程序类中的main()方法的最终实现代码参看如下示例图所示的程序。

android与java实时视频监控 java做视频监控_服务器端_03

2、本项目服务器端SendScreenToClientThread程序类及相关的功能方法的编程实现

(1)创建出服务器端的SendScreenToClientThread程序类

在MyEclipse开发工具中创建出一个类名称为SendScreenToClientThread,程序包名称为com.bluedream.monitor.server的Java程序类,并且该类继承java.lang.Thread线程类,不需要包含有main()方法。SendScreenToClientThread程序类的创建过程参看如下示例图所示。

android与java实时视频监控 java做视频监控_服务器端_04

(2)在SendScreenToClientThread程序类中新增一个run()方法

run方法为线程体方法,在该方法中定时对服务器主机的屏幕进行截图,然后通过sendImageToClient()方法将截图数据发送到客户机中。对相关的异常也需要进行对应的处理,并根据错误的类型分别显示出相关的错误提示信息。run方法的程序代码可以参看如下示例图所示的程序代码。

android与java实时视频监控 java做视频监控_java屏幕监控_05

(3)在SendScreenToClientThread程序类中新增一个sendImageToClient()方法

在sendImageToClient()方法中首先将屏幕截图所产生的数据转换成字节数组,然后再将转换后的图像数组封装到PO对象中。最后通过对象输出流将PO对象输出到客户端。参看如下示例图所示的程序代码。

android与java实时视频监控 java做视频监控_android与java实时视频监控_06

3、本项目客户端ScreenMonitoringClientFrame程序类及相关的功能方法的编程实现

(1)创建出客户端的ScreenMonitoringClientFrame程序类

在MyEclipse开发工具中创建出一个类名称为ScreenMonitoringClientFrame,程序包名称为com.bluedream.monitor.client,并且该类继承javax.swing.JFrame窗框类和包含有main()方法的Java程序类,ScreenMonitoringClientFrame程序类的创建过程参看如下示例图所示。

android与java实时视频监控 java做视频监控_Java_07

(2)编程ScreenMonitoringClientFrame程序类的构造方法

由于需要实时地显示被监视的服务器端屏幕,因此客户端程序不能设计为命令行风格的程序,而需要设计为图像窗口风格的程序。因此,在ScreenMonitoringClientFrame程序类的构造方法中构建出客户端程序的窗口,参看如下示例图所示的程序代码。

android与java实时视频监控 java做视频监控_java屏幕监控_08

(3)在ScreenMonitoringClientFrame程序类中新增一个名称为getScreenSize方法

由于需要对服务器主机所在的屏幕进行截图,因此需要获得服务器主机的屏幕尺寸,这可以通过getScreenSize方法返回屏幕的尺寸。参看如下示例图所示的程序代码。

android与java实时视频监控 java做视频监控_android与java实时视频监控_09

(4)编程ScreenMonitoringClientFrame程序类中的main()方法

在main()方法中首先识别服务器目前是否已经启动,只在服务启动后,客户端程序才可以执行。如果服务器已经启动,则创建出客户端窗口对象,并显示出主窗口。参看如下示例图所示的程序代码。

android与java实时视频监控 java做视频监控_Java_10

4、本项目客户端ShowServerImagePanel程序类及相关的功能方法的编程实现

(1)创建出客户端的ShowServerImagePanel程序类

在MyEclipse开发工具中创建出一个类名称为ShowServerImagePanel,程序包名称为com.bluedream.monitor.client的Java程序类,并且该类继承javax.swing.JPanel面板类和实现java.lang.Runnable接口,但不需要包含有main()方法。ShowServerImagePanel程序类的创建过程参看如下示例图所示。

android与java实时视频监控 java做视频监控_服务器_11

(2)在ShowServerImagePanel程序类中新增一个名称为receiveImageFromServer方法

receiveImageFromServer方法主要实现接收从服务器端发送的图像数据,并转换为字节数组。然后再从字节数组中获得截图所对应的BufferedImage类的对象实例,最后通过调用repaint()方法更新窗口以及时显示出截图图像,从而在客户端程序的窗口内显示出服务器主机的屏幕信息,实现实时监视屏幕的应用效果。参看如下示例图所示。

android与java实时视频监控 java做视频监控_Java_12

(3)编程实现ShowServerImagePanel程序类中的run方法

run方法为线程体方法,在该方法中定时接收从服务器端程序发送的截图图像的压缩数据,然后对所获得的压缩数据进行解析,最终获得服务器端屏幕截图的图像,将此图像在面板中显示输出。参看如下示例图所示。

android与java实时视频监控 java做视频监控_Java_13

(4)在ShowServerImagePanel程序类中重写paint方法

在paint方法中将所获得的截图图像在客户端主机的屏幕上显示,参看如下示例图所示。

android与java实时视频监控 java做视频监控_android与java实时视频监控_14

5、本项目实体MessageInfoPO程序类及相关的成员属性的编程实现

(1)创建出实体MessageInfoPO程序类

在MyEclipse开发工具中创建出一个类名称为MessageInfoPO,程序包名称为com.bluedream.monitor.pobject的Java程序类,并且该类实现java.io.Serializable接口,但不需要包含有main()方法。MessageInfoPO程序类的创建过程参看如下示例图所示。

android与java实时视频监控 java做视频监控_android与java实时视频监控_15

(2)在实体MessageInfoPO程序类添加相关的成员属性

为了提高项目中相关程序的可维护性,将在多个程序类中都需要应用的数据统一在MessageInfoPO程序类中定义,并设置为static静态数据以方便获得这些属性变量。参看如下示例图所示的程序代码。

android与java实时视频监控 java做视频监控_服务器端_16

6、执行ScreenMonitoringServer程序并启动服务器

在网络通讯中的服务器和客户端在程序启动的次序上,需要保证服务器端程序首先执行,并成功地启动相关的服务后,才可以启动和执行客户端程序。否则客户端程序无法发送请求连接。因此,首先执行ScreenMonitoringServer程序并启动服务器。

在MyEclipse开发工具中右击源程序,在弹出的快捷菜单中选择“Run as”下拉菜单中的“Java Application”子菜单项目,将执行本示例ScreenMonitoringServer类程序。操作过程请参看如下示例图所示。

android与java实时视频监控 java做视频监控_java屏幕监控_17

服务器端程序正常执行和服务成功启动后,将在控制台上显示输出“服务器启动成功,正在监听端口:3721”的提示信息,并等待客户端程序的连接请求。参看如下示例图所示的执行结果。

android与java实时视频监控 java做视频监控_java屏幕监控_18

7、执行ScreenMonitoringClientFrame客户端程序并请求连接服务器

当服务器端程序正常执行和对应的服务成功启动后,才可以执行客户端程序。在MyEclipse开发工具中右击源程序,在弹出的快捷菜单中选择“Run as”下拉菜单中的“Java Application”子菜单项目,将执行本示例ScreenMonitoringClientFrame类程序。操作过程请参看如下示例图所示。

android与java实时视频监控 java做视频监控_服务器_19

当客户端程序成功连接到服务器后,在控制台中显示输出“客户机:127.0.0.1:50504 成功连接服务器”的提示信息。表明某个客户机已经成功连接到服务器。执行的结果请参看如下示例图所示。

android与java实时视频监控 java做视频监控_服务器_20

本项目允许多个客户端同时请求连接服务器,每当一个客户机成功请求连接服务器后,都会在控制台上打印输出如下示例图所示的成功连接的提示信息。

android与java实时视频监控 java做视频监控_服务器_21

在客户端主窗口内将实时地显示出服务器端主机桌面,参看如下示例图所示。但由于作者是在同一台机器中执行服务器和客户机程序,服务器端程序和客户端程序共享同一个Windows系统的桌面,因此监视的窗口会产生嵌套显示的结果。

android与java实时视频监控 java做视频监控_服务器端_22

如下示例图为本项目执行后的某个时刻的截图。

android与java实时视频监控 java做视频监控_服务器_23