java实现远程控制
来源:互联网 发布:阿里云服务器升级内存 编辑:程序博客网 时间:2024/05/16 05:57
java实现远程控制
今天我第一次用markdow写博客,虽然感觉有点别扭,但是好歹也要尝试一下新的事物。
今天我做java的远程操纵程序,类似QQ的远程控制。
但是只是做了鼠标和键盘的,而且因为是一个人做,所以测试相当的不方便,程序运行后鼠标进入了无限的返回,到星期六再和队友测试一下。
还有就是想做屏幕同步功能,但是遇到了BufferedImage类没序列化的难题,本来是想创建一个新的MyBufferedImage类继承BufferedImage类然后再实现序列化接口Serializable,后来我发现我想得太简单了,继承BufferedImage类需要重写里面的方法。
再加上现在时间也比较晚了,所以就没有做下去,明天再解决问题吧。
下面是我的java远程控制实现(只有鼠标键盘控制,没有界面同步)代码:
客户端有两个类,一个是单例客户端的封装类,还有一个是界面类:
界面类:
package control;import java.awt.Dimension;import java.awt.Graphics;import java.awt.Toolkit;import java.awt.event.InputEvent;import java.awt.event.KeyAdapter;import java.awt.event.KeyEvent;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;import java.awt.image.BufferedImage;import java.io.ObjectInputStream;import javax.swing.JFrame;import javax.swing.JPanel;public class ControlClient extends JFrame{ public JPanel jp; public static void main(String[] args) { ControlClient cc = new ControlClient(); cc.remoteConnect(); cc.initFrame(); } public void initFrame(){ setTitle(""); Dimension dim = Toolkit.getDefaultToolkit().getScreenSize(); setSize(dim); setDefaultCloseOperation(3); setLocationRelativeTo(null); setVisible(true);// ClientRun(ClientSingle.getClientSingle().getObjectInputStream(),this); this.addMouseListener(ma); this.addKeyListener(ka); this.addMouseMotionListener(ma); this.addMouseWheelListener(ma); } MouseAdapter ma = new MouseAdapter(){ public void mousePressed(MouseEvent e) { SendEvent(e); } public void mouseClicked(MouseEvent e) { SendEvent(e); } public void mouseReleased(MouseEvent e) { SendEvent(e); } public void mouseMoved(MouseEvent e) { SendEvent(e); } }; KeyAdapter ka = new KeyAdapter(){ public void keyPressed(KeyEvent e) { SendEvent(e); } public void keyReleased(KeyEvent e) { SendEvent(e); } }; private void SendEvent(InputEvent e){ try { ClientSingle.getClientSingle().getObjectOutputStream().writeObject(e); ClientSingle.getClientSingle().getObjectOutputStream().flush(); } catch (Exception e1) { e1.printStackTrace(); } } private void remoteConnect(){//获取连接 ClientSingle.getClientSingle().getConnect(); System.out.println("连接服务器成功......"); } private void ClientRun(ObjectInputStream ois,JFrame jf){ new Thread(){ public void run() { while(true){ try { Object obj = ois.readObject(); BufferedImage screenshot = (BufferedImage) obj; Graphics g = jf.getGraphics(); g.drawImage(screenshot, 0, 0, null); } catch (Exception e) { e.printStackTrace(); } } }; }.start(); }}
下面的是客户端对象的单例实现:
package control;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.net.Socket;public class ClientSingle {//客户端单例实现 private ClientSingle(){//构造函数私有 } private static ClientSingle cs ;//客户端对象私有 public static synchronized ClientSingle getClientSingle(){ if( cs == null ){ cs = new ClientSingle(); } return cs; } private Socket client; private ObjectOutputStream oos; private ObjectInputStream ois; public ObjectOutputStream getObjectOutputStream(){ return oos; } public ObjectInputStream getObjectInputStream(){ return ois; } public void getConnect(){ if( client == null ){ try { client = new Socket("localhost",9090); oos = new ObjectOutputStream(client.getOutputStream()); ois = new ObjectInputStream(client.getInputStream()); } catch (Exception e) { e.printStackTrace(); } } } public void closeConnect(){ try { ois.close(); oos.close(); client.close(); client = null; } catch (Exception e) { e.printStackTrace(); } }}
客户端类:
package control;import java.awt.AWTException;import java.awt.Dimension;import java.awt.Rectangle;import java.awt.Robot;import java.awt.Toolkit;import java.awt.event.InputEvent;import java.awt.event.KeyEvent;import java.awt.event.MouseEvent;import java.awt.image.BufferedImage;import java.io.File;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.io.Serializable;import java.net.ServerSocket;import java.net.Socket;import javax.imageio.ImageIO;public class ByControlServer { private Robot robot; { try { robot = new Robot(); } catch (AWTException e) { e.printStackTrace(); } } public static void main(String[] args) { ByControlServer bcs = new ByControlServer(); bcs.initServer(); } public void initServer(){ try { ServerSocket ss = new ServerSocket(9090); Socket socket = ss.accept(); System.out.println("有客户端连接上服务器......"); ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream()); ObjectInputStream ois = new ObjectInputStream(socket.getInputStream()); while(true){ Object obj = ois.readObject(); if( obj instanceof MouseEvent ){ MouseEvent me = (MouseEvent)obj; int id = me.getID(); if( id == MouseEvent.MOUSE_PRESSED ){ int ButtonNum = me.getButton(); if( ButtonNum == MouseEvent.BUTTON1 ){ robot.mousePress(InputEvent.BUTTON1_MASK); }else if( ButtonNum == MouseEvent.BUTTON2 ){ robot.mousePress(InputEvent.BUTTON2_MASK); }else if( ButtonNum == MouseEvent.BUTTON3 ){ robot.mousePress(InputEvent.BUTTON3_MASK); } }else if( id == MouseEvent.MOUSE_RELEASED || id == MouseEvent.MOUSE_CLICKED ){ int buttonNum = me.getButton(); if( buttonNum == MouseEvent.BUTTON1 ){ robot.mouseRelease(InputEvent.BUTTON1_MASK); }else if( buttonNum == MouseEvent.BUTTON2 ){ robot.mouseRelease(InputEvent.BUTTON2_MASK); }else if( buttonNum == MouseEvent.BUTTON3 ){ robot.mouseRelease(InputEvent.BUTTON3_MASK); } }else if( id == MouseEvent.MOUSE_MOVED || id == MouseEvent.MOUSE_DRAGGED ){ robot.mouseMove(me.getX(), me.getY()); } }else if( obj instanceof KeyEvent ){ KeyEvent ke = (KeyEvent) obj; int id = ke.getID(); if( id == KeyEvent.KEY_PRESSED ){ robot.keyPress(ke.getKeyCode()); }else if( id == KeyEvent.KEY_RELEASED ){ robot.keyRelease(ke.getKeyCode()); } }// getImage(oos); } } catch (Exception e) { e.printStackTrace(); } } public void getImage(ObjectOutputStream oos){ try{ Dimension d = Toolkit.getDefaultToolkit().getScreenSize(); BufferedImage screenshot = (new Robot()).createScreenCapture(new Rectangle(0,0,(int)d.getWidth(),(int)d.getHeight())); String name = "C:\\Users\\asus\\Desktop\\jietu.png"; File f = new File(name); ImageIO.write(screenshot, "png", f); oos.writeObject(screenshot); oos.flush(); }catch(Exception e){ } }}
远程控制建立后,就进入鼠标的无限返回,按下alt键后出现序列化异常
客户端只能够看到一边的窗口
屏幕截图已经实现,但是在发送至客户端的时候出现序列化异常,BufferedImage没办法序列化
**
2 0
- java实现远程控制
- java实现远程控制应用
- java实现电脑远程控制完整源代码
- 用树莓派通过Java实现远程控制电灯
- C#实现远程控制
- 实现远程控制鼠标
- TeamViewer实现远程控制
- JAVA实现远程控制(JAVA in RemoteControl)
- JAVA实现远程控制(JAVA in RemoteControl)
- 远程控制Java
- Java实现远程控制技术(附完整源代码)
- 利用Windows2000实现远程控制
- C# Winfrom实现远程控制
- 蓝牙远程控制小车实现
- Qt实现Windows远程控制
- 远程控制视频如何实现
- ubuntu系统实现远程控制
- java远程控制详解-转载
- 关于@SessionAttributes和@ModelAttribute最好的文章了
- Android的menu(菜单)按钮的使用(by 星空武哥)
- java——认识数组
- iOS计算代码耗时的代码
- 源代码管理
- java实现远程控制
- 打包java程序成jar包
- linux 操作系统 工作笔记
- 角速度与旋转矩阵的转换关系及思考
- QLabel显示边框
- RHEL 7 破解root 密码
- Swift3.0中Category的使用
- 18-Rotate Array-Leetcode
- 机器人的雅克比矩阵