教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 精品文档 > 资格考试 >

利用Java实现远程控制(2)

来源:网络收集 时间:2026-05-18
导读: public void eventDispatched(AWTEvent event) { KeyEvent e = (KeyEvent)event; if(e.getID()= =KeyEvent.KEY_PRESSED) { // 向 被 控 端 发 送 KEY_PRESSED,e.getKeyCode(),e.getKeyChar(),e.getKeyLocation() }

public void eventDispatched(AWTEvent event) { KeyEvent e = (KeyEvent)event;

if(e.getID()= =KeyEvent.KEY_PRESSED) { //

KEY_PRESSED,e.getKeyCode(),e.getKeyChar(),e.getKeyLocation() }

else if(e.getID()= =KeyEvent.KEY_RELEASED) {

//

KEY_RELEASED,e.getKeyCode(),e.getKeyChar(),e.getKeyLocation()

} }

},AWTEvent.KEY_EVENT_MASK);

被控端程序接收来自控制端的鼠标和键盘操作指令后,可以根据具体指令执行Robot类的相应方法即可实现操作模拟(参见2.2)。需要说明的是,控制端程序需要根据被控端程序发送的屏幕图象的大小来设置显示被控端屏幕图象的窗口组件的大小,这样,被控端程序收到控制端程序发送的鼠标坐标就可以准确定位本地鼠标位置。

2.3.2屏幕图象的压缩/解压缩

屏幕图象是以位图格式获得的,直接传输会造成比较大的延

6

时,为了提高远程控制的实时性,需要对获取的屏幕图象数据进行压缩后再传输,另外,不应该使用文件的形式进行屏幕图象传输,而是应该直接传输内存数据,这样也会明显地减小延时。屏幕图象的压缩方法如下: //获取屏幕图象 BufferedImage

image=robot.createScreenCapture(new

Rectangle(toolkit.getScreenSize()));

ByteArrayOutputStream out=new ByteArrayOutputStream();//建立输出流

//创建JPEGEncodeParam对象(封装了压缩所需必要参数) JPEGEncodeParam

param=JPEGCodec.getDefaultJPEGEncodeParam(image); param.setQuality(0.5f,false); //设置压缩后清晰度(数值范围0—1之间)

//创建JPEGImageEncoder对象 JPEGImageEncoder

encoder=JPEGCodec.createJPEGEncoder(out,param); encoder.encode(image); //图象压缩

byte[] bytes=out.toByteArray(); //生成位数组

output.write(bytes,0,bytes.length); // 把位数组写入输出流 output.flush(); //刷新输出流

压缩后的屏幕图象数据的解压缩方法如下:

7

//创建JPEGImageDecoder对象,input为输入流 JPEGImageDecoder

decoder=JPEGCodec.createJPEGDecoder(input); //把JPEG数据流解压缩

BufferedImage image=decoder.decodeAsBufferedImage(); //显示图象

2.3.3屏幕图象及指令的传输

在TCP/IP协议组中,TCP是一种面向连接的协议,为用户提供可靠的、全双工的流式服务,具有确认、流控制、多路复用和同步等功能,适用于多种不同数据类型的传榆。UDP协议则是无连接的,每个分组携带完整的目的地址,各分组在系统中独立传送。它不能保证分组的先后顺序,不进行分组出错的恢复与重传,因此不保证传输的可靠性,但是它提供高传输效率的数据报服务,适于实时的语音、图像、广播消息等网络传输。

在选择传输协议时,屏幕图象的压缩率是一个重要因素。因为UDP协议的数据包最大长度是64KB[2],如果屏幕图象的压缩率设置得比较小,屏幕图象压缩后的数据量超过了64KB,那么,就不宜使用UDP协议。一般地,屏幕图象的压缩率设置得不宜太大(设置压缩后的清晰度要≥0.5),否则,传到客户端的屏幕图象会不够清晰,所以,一般可以选择使用TCP协议。网络通讯是普遍的编程技术[3],在这里简要介绍实现步骤:

8

服务器端: //在PORT端口侦听

ServerSocket server=new ServerSocket(PORT); //接受客户机连接请求 Socket client=server.accept(); //与客户机建立输入输出流

BufferedOutputStream output = new BufferedOutputStream (client.getOutputStream(), BUFFER_SIZE); BufferedReader

input

=

new

BufferedReader

(new

InputStreamReader (client.getInputStream())); //进行数据传输 ... ... 客户端: //与服务器连接

Socket client= new Socket(server,PORT); //与服务器建立输入输出流

PrintWriter output = new PrintWriter(client.getOutputStream(),true); BufferedInputStream

input

=

new

BufferedInputStream(client.getInputStream(), BUFFER_SIZE); //进行数据传输 ... ...

另外,由于服务器端屏幕图象的获取、压缩和传输以及客户

9

端屏幕图象的接收、解压缩和显示需要不断地、频繁地进行,所以,程序的设计需要采用多线程技术[4],服务器端屏幕图象的获取、压缩和传输以及客户端屏图象的接收、解压缩和显示应该分别由一个专门的线程来处理。多线程的使用,限于篇幅不在赘述。 3 结束语

本文介绍了远程控制的原理,详细地叙述了利用Java实现远程控制软件的程序设计方法和要点,并给出了要点的具体实现方法。为了使所实现的软件具有更好的实用性,可以把软件设计成支持TCP和UDP两种协议,让用户在使用时自己设置所要使用的协议和屏幕图象压缩率大小。 参 考 文 献

[1] 常永昌.一种远程控制软件的设计与实现[J].计算机应用,

2003,23(3):127-128,131.

[2] Andrew S. 计算机网络(第3版)[M]. 北京:清华大学出

版社,2002.

[3] Spell B. Java专业编程指南[M]. 北京:电子工业出版社,2001.

[4] Eckel B. Java编程思想(英文版?第三版)[M]. 北京:机械

工业出版社,2004.

10

…… 此处隐藏:1128字,全部文档内容请下载后查看。喜欢就下载吧 ……
利用Java实现远程控制(2).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wendang/412789.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)