JAVA的远程控制系统(远程监控)实现


在公司,无聊之际,看到网上关于Robot()类的使用,随想自己实现一个简单的监控系统。这个监控系统没有实现远程的控制操作,只是简单的客户端可以看到远程看到服务器的桌面。另外我在机房局域网测试的时候,发现客户端发现服务器的改变需要5-10秒的时间。不知原因为何?

java 代码
  1. /* 
  2.   客户端的实现:主要实现的功能是从服务器得到服务器桌面的图片,并进行显示。 
  3. */  
  4. import java.awt.*;  
  5. import javax.swing.*;  
  6. import java.awt.event.*;  
  7. import java.util.*;  
  8. import java.util.Timer;  
  9. import java.io.IOException;  
  10. import java.net.*;  
  11. public class Client extends JFrame  
  12. {  
  13.  private java.net.Socket cs;  
  14.         private MyPanel mypanel;  
  15.  public Client()  
  16.  {  
  17.   mypanel=new MyPanel();  
  18.   this.getContentPane().add(mypanel);  
  19.     
  20.   this.clock.start();  
  21.   this.setDefaultCloseOperation(this.EXIT_ON_CLOSE);  
  22.  }  
  23.  public static void main(String[] args)  
  24.  {  
  25.   Client client = new Client();  
  26.   client.setSize(800800);  
  27.   client.setVisible(true);  
  28.    
  29.  }  
  30.     private javax.swing.Timer clock=new javax.swing.Timer(1000,new ActionListener() {  
  31.   public void actionPerformed(ActionEvent e)  
  32.   {  
  33.    try  
  34.    {  
  35.          cs=new java.net.Socket("192.168.0.3"12000);  
  36.     Image image=javax.imageio.ImageIO.read(cs.getInputStream());  
  37.     mypanel.setImage(image);  
  38.     mypanel.repaint();  
  39.     cs.close();  
  40.    } catch (UnknownHostException e2)  
  41.    {  
  42.       
  43.     e2.printStackTrace();  
  44.    } catch (IOException e2)  
  45.    {  
  46.       
  47.     e2.printStackTrace();  
  48.    }  
  49.      
  50.      
  51.   }  
  52.        
  53.     });  
  54.  public void drawImage()  
  55.  {  
  56.     
  57.  }  
  58. }  
  59. class MyPanel extends JPanel  
  60. {  
  61.  private Image image;  
  62.  public MyPanel(Image image)  
  63.  {  
  64.     this.image=image;   
  65.  }  
  66.    public void setImage(Image image)  
  67.    {  
  68.     this.image=image;  
  69.    }  
  70.  public MyPanel()  
  71.  {  
  72.   // TODO 自动生成构造函数存根  
  73.  }  
  74.  public void paintComponent(Graphics g)  
  75.  {  
  76.   g.drawImage(image, 00null);  
  77.  }  
  78. }  
  79. /*********************************************************************** 
  80. *************************************************************************/  
  81. /* 
  82.  服务器端的实现: 
  83.   主要实现采集服务器的桌面,并多线程实现给客户端的发送 
  84. */  
  85. import java.io.IOException;  
  86. import java.net.ServerSocket;  
  87. import java.net.Socket;  
  88. public class Server  
  89. {  
  90.     private final static int PORT = 12000;  
  91.     public static void main(String[] args)  
  92.     {  
  93.  try  
  94.  {  
  95.      ServerSocket server = new ServerSocket(PORT);  
  96.      Socket connection = null;  
  97.      while (true)  
  98.      {  
  99.   try  
  100.   {  
  101.      new ShotThread(server).start();  
  102.   } finally  
  103.   {  
  104.       try  
  105.       {  
  106.    if (connection != null)  
  107.        connection.close();  
  108.       } catch (IOException e)  
  109.       {  
  110.       }  
  111.   }  
  112.      }  
  113.  } catch (IOException ee)  
  114.  {  
  115.      System.err.println(ee);  
  116.  }  
  117.     } // end main  
  118. }  
  119. /** 
  120.  * 多线程的连接: 
  121.  * 
  122.  */  
  123. class ShotThread extends Thread  
  124. {  
  125.     ServerSocket server;  
  126.     public ShotThread(ServerSocket server)  
  127.     {  
  128.  try  
  129.  {  
  130.      this.connection = server.accept();  
  131.  } catch (IOException e)  
  132.  {  
  133.      e.printStackTrace();  
  134.  }  
  135.     }  
  136.     public void run()  
  137.     {  
  138.  System.out.println("得到连接:");  
  139. // try  
  140. // {  
  141. //    // this.sleep(500);  
  142. // } catch (InterruptedException e2)  
  143. // {  
  144. //     //  
  145. //     e2.printStackTrace();  
  146. // }  
  147.  java.awt.image.BufferedImage image = (new ShotImage()).snapShot();  
  148.  if (image == null)  
  149.      try  
  150.      {  
  151.   throw new IOException();  
  152.      } catch (IOException e1)  
  153.      {  
  154.   // TODO 自动生成 catch 块  
  155.   e1.printStackTrace();  
  156.      }  
  157.  try  
  158.  {  
  159.     
  160.      javax.imageio.ImageIO.write(image, "jpg", connection  
  161.       .getOutputStream());  
  162.      connection.close();  
  163.  } catch (IOException e)  
  164.  {  
  165.      e.printStackTrace();  
  166.      
  167.  }  
  168.     }  
  169.     Socket connection = null;  
  170. }  
  171. /************************************************************************ 
  172. *************************************************************************/  
  173. /* 
  174.  图片采集的代码 
  175. */  
  176.    
  177.   
  178. import java.awt.Dimension;  
  179. import java.awt.Rectangle;  
  180. import java.awt.Robot;  
  181. import java.awt.Toolkit;  
  182. import java.awt.image.BufferedImage;  
  183. public class ShotImage  
  184. {  
  185.  private Dimension dimension = Toolkit.getDefaultToolkit().getScreenSize();  
  186.  private String imageFormat = "jpg";  
  187.  private int Num = 0;  
  188.  BufferedImage screenshot;  
  189.  public synchronized  BufferedImage snapShot()  
  190.  {  
  191.   try  
  192.   {  
  193.    screenshot = (new Robot()).createScreenCapture(new Rectangle(00,  
  194.    (int) dimension.getWidth(), (int) dimension.getHeight()));  
  195.   } catch (Exception ex)  
  196.   {  
  197.    System.out.println(ex);  
  198.   }  
  199.   return screenshot;  
  200.  }  
  201. }  

你可能感兴趣的:(JAVA技术)