Java实现远程控制技术完整源代码分享

Java实现远程控制技术

java自带的java.net.和java.awt.robot.的混合可以用于实现通过网络对另一台计算机的远程控制,其中包括控制远程计算机鼠标的动作和键盘的输入,以及实时获得远程计算机屏幕的图像。本文将用简洁的语言和由浅入深的逻辑,教大家如何掌握这个技术。

首先先看一下效果图:

远程端计算机界面:

控制端计算机界面:

控制端输入:

远程端输入:

一下开始详细介绍远程控制的技术思路。

首先两台计算机通过java.net的Socket来进行连接。

一端先打开一个ServerSocket,然后另外一端用socket进行连接。

服务器端

应该设置一个ServerSocket,并且初始化需要用到的输入输出流:

publicstaticvoidOpenServer() throwsIOException, ClassNotFoundException{
System.out.println("ServerStart.....");
ServerSocket server = newServerSocket(7777);
socket = server.accept();
System.out.println("连接上...\n"+socket);
OIS = newObjectInputStream(socket.getInputStream())
OOS=newObjectOutputStream(socket.getOutputStream());
}

客户机端

应该用socket去连接服务器,并且初始化输入输出流:

publicstaticvoidStartConnection(String IP,intport) throwsUnknownHostException, IOException, AWTException{
socket = newSocket("192.168.0.106",7777);
if(socket.isConnected()){
System.out.println("socket connected..."+socket);
 }
 OOS = newObjectOutputStream(socket.getOutputStream());
OIS = newObjectInputStream(socket.getInputStream());
}

这样两台计算机就链接在一起并且可以通过流(InputStream和OutputStream)来交换数据了

接下来大家可以想一想,要实现远程控制的两台计算机需要交换什么信息呢?首先被控制端需要不断向控制端提供截取的屏幕图像(这个我们将会用java.awt.robot来实现),然后鼠标和键盘根据控制端传来的事件(inputEvent)来做出相同的操作(用robot来实现)。然后控制端当然首先要接收被控制端传来的图像并且反映到一个面板上(pane),然后监听本机上键盘鼠标的动作再传给被控制端的主机(我们通过在面板pane上设置一个监听器listener来实现)

这里遇到的一个问题就是用于传送的图片无论是用image还是用bufferedImage都是不可串行化的。所以不能用I/OStream进行传送,所以为了解决这个问题,我们需要把图像数据封装在一个类里面并implements Serializable接口

图像类如下:

importjava.io.File;
importjava.io.FileInputStream;
importjava.io.FileNotFoundException;
importjava.io.IOException;
importjava.io.Serializable;

publicclassMessage implementsSerializable {
 privatestaticfinallongserialVersionUID = 1L;
privateString fileName;  // 文件名称
privatelongfileLength;  // 文件长度
privatebyte[] fileContent;  // 文件内容
publicMessage(){
 }
 publicMessage(String filePath) throwsIOException{
File file = newFile(filePath);
this.fileLength=file.length();
this.fileName=file.getName();
FileInputStream FIS = newFileInputStream(filePath);
byte[] bytes = newbyte[(int)fileLength];
FIS.read(bytes,0,(int)fileLength);
this.fileContent=bytes;
 }
 publicString getFileName()
 { returnfileName;}
publicvoidsetFileName(String fileName)
 { this.fileName = fileName;}
publiclonggetFileLength(
 { returnfileLength; }
 publicvoidsetFileLength(longfileLength)
 {this.fileLength = fileLength;}
publicbyte[] getFileContent(
 {returnfileContent;}
publicvoidsetFileContent(byte[] fileContent)
{this.fileContent = fileContent;}}

这样就可以实现图像通过ObjectInputStream和ObjectOutputStream的串行化传播了

了解了以上基础之后首先我们要完成控制端的UI界面设置,图片接收,和键盘鼠标动作监听:

首先是设置接收图片:


这样接收了来自ObjectInputStream的Message类之后就可以把图片重新设置到面板pane的大小然后展示出来

下一步就是设置面板属性和监听器:


监听器:



 以上就完成了控制端。

接下来我们将构建被控制端:

被控制端需要使用robot来截图并发送,而且需要写一个方法来对接收到的InputEvent进行反应

首先是截图和发送:

注意到这段代码中使用了D:\OUT\目录作为临时文件的存放地方,读者使用这个代码的时候需要自己设置临时文档的存放

然后实现robot对于接收到的InputEvent指令进行操作:



我做开发十多年的时间,如果大家对于学习java的学习方法,学习路线以及你不知道自己应该是自学还是培训的疑问,都可以随时来问我,大家可以加我的java交流学习qun:615741636。qun内有学习教程以及开发工具。


©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,928评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,192评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,468评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,186评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,295评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,374评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,403评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,186评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,610评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,906评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,075评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,755评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,393评论 3 320
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,079评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,313评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,934评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,963评论 2 351

推荐阅读更多精彩内容

  • 网络编程 一.楔子 你现在已经学会了写python代码,假如你写了两个python文件a.py和b.py,分别去运...
    go以恒阅读 2,003评论 0 6
  • 在分布式服务框架中,一个最基础的问题就是远程服务是怎么通讯的,在Java领域中有很多可实现远程通讯的技术,例如:R...
    wyatt_plus阅读 825评论 0 4
  • 在分布式服务框架中,一个最基础的问题就是远程服务是怎么通讯的,在Java领域中有很多可实现远程通讯的技术,例如:R...
    java菜阅读 984评论 0 2
  • 去年的这个时候,终于被安利的太多了,终于首次来到简书,然后光是看看别人的文章,觉得写得好好。也不知道那会为什么没有...
    一直在路上yue阅读 232评论 0 1
  • 加入五点多早起的行列已经70多天的时间了,基本也算一个“晨型人”了。在这里首先要感恩网友雨丝,是与她在码字群相识读...
    点亮人生阅读 1,340评论 3 15