Robot+Socket+Frame抓取桌面发送数据流模仿远程连接
废话不多讲第一步建服务端代码
1 package com.jachs.desktop; 2 3 import java.awt.Dimension; 4 import java.awt.Rectangle; 5 import java.awt.Robot; 6 import java.awt.Toolkit; 7 import java.awt.image.BufferedImage; 8 import java.io.ByteArrayOutputStream; 9 import java.io.ObjectOutputStream; 10 import java.net.ServerSocket; 11 import java.net.Socket; 12 13 import javax.imageio.ImageIO; 14 15 import com.jachs.desktop.entity.Pictrue; 16 /**** 17 * 服務端 18 * @author Jachs 19 * 20 */ 21 public class Desktop{ 22 23 public static void main(String[] args) { 24 Dimension screenSize; 25 Rectangle screenRectangle; 26 ServerSocket serverSocket; 27 Socket socket; 28 Robot robot; 29 try { 30 screenSize= Toolkit.getDefaultToolkit().getScreenSize(); 31 screenRectangle= new Rectangle(screenSize); 32 robot=new Robot(); 33 34 serverSocket=new ServerSocket(22222); 35 socket= serverSocket.accept(); 36 System.out.println("in"); 37 BufferedImage image; 38 ByteArrayOutputStream arrayOutputStream; 39 Pictrue pictrue; 40 ObjectOutputStream objectOutputStream; 41 while(true){ 42 image= robot.createScreenCapture(screenRectangle); 43 arrayOutputStream=new ByteArrayOutputStream(); 44 ImageIO.write(image, "jpg", arrayOutputStream); 45 46 pictrue=new Pictrue(arrayOutputStream.size(),arrayOutputStream.toByteArray()); 47 objectOutputStream=new ObjectOutputStream(socket.getOutputStream()); 48 objectOutputStream.writeObject(pictrue); 49 Thread.sleep(100); 50 } 51 } catch (Exception e) { 52 e.printStackTrace(); 53 }finally { 54 } 55 } 56 }
第二步建立序列化对象
1 package com.jachs.desktop.entity; 2 3 import java.io.Serializable; 4 /**** 5 * 圖片對象 6 * @author Jachs 7 * 8 */ 9 public class Pictrue implements Serializable{ 10 private int size; 11 private byte[] data; 12 public Pictrue() { 13 super(); 14 } 15 public Pictrue(int size, byte[] data) { 16 super(); 17 this.size = size; 18 this.data = data; 19 } 20 public int getSize() { 21 return size; 22 } 23 public void setSize(int size) { 24 this.size = size; 25 } 26 public byte[] getData() { 27 return data; 28 } 29 public void setData(byte[] data) { 30 this.data = data; 31 } 32 }
第三步建立客户端代码
package com.jachs.desktop; import java.awt.Frame; import java.awt.Toolkit; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.net.UnknownHostException; import javax.swing.ImageIcon; import javax.swing.JLabel; import org.apache.commons.io.IOUtils; /**** * 客戶展示端 * @author Jachs * */ public class ShowPictrue { static Frame f = new Frame(); static JLabel imgLabel; static ImageIcon img; public static void main(String[] args) throws UnknownHostException, IOException { // 关闭窗体 f.addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { System.exit(0); } }); f.setTitle("抓取桌面");// 添加标题 f.setSize(800, 800);// 设置窗体的尺寸 f.setLocation(10, 20);// 设置窗体出现坐标 f.setLayout(null);// 清除窗体默认布局 f.setIconImage(Toolkit.getDefaultToolkit().getImage(new File("").getAbsolutePath()+File.separator+"src"+File.separator+"main"+File.separator+"java"+File.separator+"image"+File.separator+"ico.png"));// 设置图标 // f.setResizable(false);// 禁止窗体改变尺寸 InputStream is=ShowPictrue.class.getResourceAsStream("/image/backgroundDefault.png"); ByteArrayOutputStream arrayOutputStream=new ByteArrayOutputStream(); IOUtils.copy(is, arrayOutputStream); img = new ImageIcon(arrayOutputStream.toByteArray()); imgLabel = new JLabel(img); imgLabel.setBounds(0, 0, img.getIconWidth(), img.getIconHeight()); f.add(imgLabel); f.setVisible(true);//设置窗体的可见性 new Thread(new WriterPictrue()).start(); } }
第四部建立客户端线程
package com.jachs.desktop; import java.io.ByteArrayOutputStream; import java.io.ObjectInputStream; import java.net.Socket; import javax.swing.ImageIcon; import com.jachs.desktop.entity.Pictrue; /**** * 客戶端寫入線程 * @author Jachs * */ public class WriterPictrue implements Runnable{ public void run() { ObjectInputStream inputStream; Pictrue pictrue; ByteArrayOutputStream arrayOutputStream; try{ Socket socket=new Socket("127.0.0.1", 22222); while(true){ inputStream=new ObjectInputStream(socket.getInputStream()); pictrue= (Pictrue) inputStream.readObject(); arrayOutputStream=new ByteArrayOutputStream(); arrayOutputStream.write(pictrue.getData(), 0, pictrue.getSize()); ShowPictrue.img = new ImageIcon(arrayOutputStream.toByteArray()); ShowPictrue.imgLabel.setIcon(ShowPictrue.img); ShowPictrue.imgLabel.setBounds(0, 0, ShowPictrue.img.getIconWidth(), ShowPictrue.img.getIconHeight()); ShowPictrue.imgLabel.repaint(); // ShowPictrue.f.repaint(); } }catch (Exception e) { e.printStackTrace(); } } }
好大功告成,启动服务端,服务端为被监控端。然后启动客户端客户端为监控端。可以自己再改改一对多或者多对多

浙公网安备 33010602011771号