⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 clienttest.java

📁 java远程屏幕监控系统(精华)
💻 JAVA
字号:
/****************************************
* 程序文件名称:  ClientTest.java
*  功能:    客户端应用程序    
*****************************************/
import java.awt.*;
import java.awt.event.*;
import javax.swing.*; 
import java.awt.AWTEvent; 
import java.awt.BorderLayout; 
import java.awt.Dimension; 
import java.awt.Graphics; 
import java.awt.Rectangle; 
import java.awt.Toolkit; 
import java.awt.event.AWTEventListener; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.awt.event.KeyEvent; 
import java.awt.event.MouseEvent; 
import java.awt.event.MouseListener; 
import java.awt.event.MouseMotionListener; 
import java.awt.event.MouseWheelEvent; 
import java.awt.event.MouseWheelListener; 
import java.awt.event.WindowAdapter; 
import java.awt.event.WindowEvent; 
import java.awt.image.BufferedImage; 
import java.io.ByteArrayInputStream; 
import java.io.InputStream; 
import java.net.DatagramPacket; 
import java.net.DatagramSocket; 
import java.net.InetAddress; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JMenuItem; 
import javax.swing.JOptionPane; 
import javax.swing.JPopupMenu; 
import javax.swing.JScrollPane; 
import javax.swing.Scrollable; 
import javax.swing.SwingConstants; 
import javax.swing.UIManager; 
import com.sun.image.codec.jpeg.JPEGCodec; 
import com.sun.image.codec.jpeg.JPEGImageDecoder; 



public class ClientTest extends JLabel implements Runnable//,Scrollable
{ 
private DatagramSocket socket; 
    private boolean ended; 
	private long delay=1000; 
    private InetAddress server; 
    private BufferedImage image; 
    public static  String s="";
	final private JPopupMenu menu; 
           
/*  1. 显示图像	*/   
public void paint(Graphics g) 
{ 
    super.paint(g); 
    if(image!=null) {g.drawImage(image,0,0,this);} 
   } 
 
  /*  2.构造方法	*/
  public ClientTest(String ip) throws Exception 
  {
   super(); 
   image=null; 
   ended=false; 
   //设置UDP数据报端口
   socket=new DatagramSocket(5000); 
   //设置存放接收数据缓冲区的大小
   socket.setReceiveBufferSize(409600); 
   //存放被控端IP地址
   server=InetAddress.getLocalHost(); 
   //定义向被控端发出截取屏幕图像指令的线程
   new Thread(new Runnable() 
	{
     public void run() 
	  {
       DatagramPacket packetsign=new 
                   DatagramPacket("REFRESH".getBytes(),20); 
       while(!ended) { 
         try {
           packetsign.setAddress(server); 
           packetsign.setPort(5000); 
           socket.send(packetsign); 
           Thread.sleep(delay); 
           }
	     catch (Exception e)  { 
           try { Thread.sleep(100); } 
           catch (Exception ex) { }
           } 
         }         //end while
      }            //end run
    }).start(); 
  //定义弹出式菜单
  menu=new JPopupMenu(); 
  JMenuItem target=new JMenuItem("监控目的地址");
  final JLabel one=this; 
  this.setPreferredSize(new Dimension(640,480)); 
  InetAddress address=InetAddress.getByName(ip); 
  server=address; 
  menu.add(target);
  /*  设置鼠标按键监听   */
  this.addMouseListener(new MouseListener(){
  public void mouseClicked(MouseEvent e) { process(e);} 
  public void mouseEntered(MouseEvent e) { process(e);} 
  public void mouseExited(MouseEvent e) { process(e); } 
  //点击鼠标按键
  public void mousePressed(MouseEvent e) 
  {  
    process(e); 
    sendMouse(MouseEvent.MOUSE_PRESSED,e.getX(),e.getY(),e.getButton()); 
  } 
  //释放鼠标按键
  public void mouseReleased(MouseEvent e)
  {
    process(e); 
    sendMouse(MouseEvent.MOUSE_RELEASED,e.getX(),e.getY(),e.getButton()); 
  } 
  //侦测鼠标的坐标位置
  private void process(MouseEvent e) 
  {  if(e.isPopupTrigger()) { 
         menu.show(one,e.getX(),e.getY());
       } 
     } 
  });   /*  end addMouseListener( ) */

  /*  设置鼠标移动监听  */
  this.addMouseMotionListener(new MouseMotionListener(){
   public void mouseDragged(MouseEvent e) {  
      sendMouse(MouseEvent.MOUSE_MOVED,e.getX(),e.getY(),e.getButton()); 
     }   
    
   public void mouseMoved(MouseEvent e) {
      sendMouse(MouseEvent.MOUSE_MOVED,e.getX(),e.getY(),e.getButton()); 
     } 
  });  /*  end addMouseMotionListener( ) */
      
    /*  设置鼠标滚轮监听  */
  this.addMouseWheelListener(new MouseWheelListener(){ 
   public void mouseWheelMoved(MouseWheelEvent e) { 
    sendMouse(MouseEvent.MOUSE_WHEEL,e.getX(),e.getY(),e.getUnitsToScroll()); 
   } 
  });  /*  end addMouseWheelListener( ) */

 }  /*  构造方法 ClientInit( ) 结束 */

 /*  发送键盘信息方法    */
 private void sendKey(int type,int code,char c,int location) { 
  byte[] bytes=new byte[50]; 
  for(int i=0;i<bytes.length;i++) { 
     bytes[i]=' '; 
   } 
  String command; 
  if(type==KeyEvent.KEY_PRESSED) { 
     command="KeyPressed"; 
   } 
  else if(type==KeyEvent.KEY_RELEASED) { 
     command="KeyReleased"; 
   }
 else { 
     command=""; 
   } 
  byte[] the=command.getBytes(); 
  for(int i=0;i<the.length;i++) { 
   bytes[i]=the[i]; 
  } 
  the=String.valueOf(code).getBytes(); 
  for(int i=0;i<the.length;i++) { 
   bytes[20+i]=the[i]; 
  } 
  the=String.valueOf(Character.getNumericValue(c)).getBytes(); 
  for(int i=0;i<the.length;i++) { 
   bytes[30+i]=the[i]; 
  } 
  the=String.valueOf(location).getBytes(); 
  for(int i=0;i<the.length;i++) { 
   bytes[40+i]=the[i]; 
  } 
  try { 
  DatagramPacket packet=new DatagramPacket(bytes,bytes.length,server,5000); 
   socket.send(packet); 
  } 
catch (Exception e) { 
   e.printStackTrace(); 
  } 
 }    /*  end sendKey   */
 
 /*  发送鼠标事件信息方法   */
private void sendMouse(int type,int x,int y,int button)
{ 
byte[] bytes=new byte[50]; 
  for(int i=0;i<bytes.length;i++) { 
bytes[i]=' ';
} 
  String command; 
  if(type==MouseEvent.MOUSE_PRESSED) 
       { command="MousePressed"; }
  else if(type==MouseEvent.MOUSE_RELEASED) 
       { command="MouseReleased"; } 
  else if(type==MouseEvent.MOUSE_MOVED)
       { command="MouseMoved"; }
  else if(type==MouseEvent.MOUSE_WHEEL)
  { 
   command="MouseWheel"; 
  } 
  else {command=""; } 
  
  if(button==MouseEvent.BUTTON1) 
     { 
       button=MouseEvent.BUTTON1_MASK; 
     } 
  else if(button==MouseEvent.BUTTON2) 
     { 
       button=MouseEvent.BUTTON2_MASK; 
     } 
  else if(button==MouseEvent.BUTTON3) 
     { 
       button=MouseEvent.BUTTON3_MASK; 
     } 

  byte[] the=command.getBytes(); 
  for(int i=0;i<the.length;i++) 
     {bytes[i]=the[i]; } 
  
  the=String.valueOf(x).getBytes(); 
  
  for(int i=0;i<the.length;i++) { 
   bytes[20+i]=the[i]; 
  } 
  the=String.valueOf(y).getBytes(); 
  for(int i=0;i<the.length;i++) { 
   bytes[30+i]=the[i]; 
  } 
  the=String.valueOf(button).getBytes(); 
  for(int i=0;i<the.length;i++) { 
   bytes[40+i]=the[i]; 
  } 
  try { 
        DatagramPacket packetmouse=new
 DatagramPacket(bytes,bytes.length,server,5000); 
        socket.send(packetmouse); 
      } 
  catch (Exception e)
   { 
      e.printStackTrace(); 
   } 
 }     /*  end sendMouse( )  */

 
 
 /*  3.将接收到的屏幕图象数据进行解压,还原成图像  */
       private void getScreen(InputStream input) 
	 { 
      try{ 
          JPEGImageDecoder decoder=JPEGCodec.createJPEGDecoder(input); 
          BufferedImage image=decoder.decodeAsBufferedImage(); 
          this.image=image; 
          this.setPreferredSize(new Dimension(image.getWidth(),image.getHeight())); 
          this.updateUI(); 
         }
	  catch (Exception e) {e.printStackTrace();} 
     }

/* 4.线程RUN(),接收传来的屏幕图像数据  */
public void run() 
{ 
  byte[] bytes=new byte[409600]; 
  while(!ended) 
  { 
   try { 
	DatagramPacket packet=new DatagramPacket(bytes,bytes.length); 
    socket.receive(packet); 
    ByteArrayInputStream input= new ByteArrayInputStream(
      packet.getData(),packet.getOffset(),packet.getLength()); 
    getScreen(input); 
	}    //try end 
  catch (Exception e)  {         } 
}//end while 
}//end run 
 
 /*  5.CLOSE方法  */
 public void close() 
{ 
ended=true; 
System.exit(0); 
} 

 /* 6.MAIN方法  */
 public static void main(String[] args) 
{ ClientTest one=null; 
         
	  /*  建立输入IP地址信息窗体ipwin  */
	  JFrame ipwin=new JFrame("请输入IP:"); 
      ipwin.getContentPane().setLayout(new BorderLayout()); 
      ipwin.setSize(240,80); 
      JButton exit=new JButton("确定"); 
	  JTextField text=new JTextField();
	  ipwin.getContentPane().add(text,BorderLayout.SOUTH); 
      ipwin.getContentPane().add(exit,BorderLayout.CENTER); 
      Dimension screen1=Toolkit.getDefaultToolkit().getScreenSize(); 
      Dimension a1=ipwin.getSize(); 
      ipwin.setLocation((screen1.width-a1.width)/2,(screen1.height-a1.height)/2); 

	 final JFrame xxx=ipwin; 
	 final JTextField yyy=text;
			   
	/* 输入IP地址窗体--退出键的监听  */
    exit.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e) {
          String aaa=yyy.getText();
          s=aaa;
	      xxx.setVisible(false); 
          } 
       }); 
			  
	 /*   输入IP地址窗体--窗口关闭的监听  */ 
	ipwin.addWindowListener(new WindowAdapter() { 
      public void windowClosing(WindowEvent e) {
        System.exit(0);
       } 
    }); 
    ipwin.setVisible(true);
	/*  判断   */	  
	while(s==""){  }
	System.out.println(s);

	/*  显示图象窗口  */
  try { 
     UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
     JFrame frame=new JFrame("监视中。。。"); 
     frame.getContentPane().setLayout(new BorderLayout()); 
     Dimension screen=Toolkit.getDefaultToolkit().getScreenSize(); 
     frame.setSize(640,480); 
     Dimension thesize=frame.getSize(); 
     frame.setLocation((screen.width-thesize.width)/2,
                     (screen.height-thesize.height)/2); 
	/*   实例化启动线程  */
    one=new ClientTest(s); 
    new Thread(one).start(); 
    final ClientTest the=one; 
    JScrollPane scroll=new JScrollPane(one); 
    frame.getContentPane().add(scroll,BorderLayout.CENTER); 
               
	/*  显示图象窗口--窗口关闭的监听  */
	frame.addWindowListener(new WindowAdapter(){
	   public void windowClosing(WindowEvent e) {
          the.close(); System.exit(0);
       } 
     }); 
                
     /*   对被控端显示窗口的键盘进行监听    */
   Toolkit.getDefaultToolkit().addAWTEventListener(new AWTEventListener(){
     public void eventDispatched(AWTEvent event) {
       KeyEvent e=(KeyEvent)event; 
       if(e.getID()==KeyEvent.KEY_PRESSED) {
         the.sendKey(KeyEvent.KEY_PRESSED,e.getKeyCode(),
                     e.getKeyChar(),e.getKeyLocation()); 
        }
      else if(e.getID()==KeyEvent.KEY_RELEASED) {
         the.sendKey(KeyEvent.KEY_RELEASED,e.getKeyCode(),
                     e.getKeyChar(),e.getKeyLocation()); 
        } 
      } 
   },AWTEvent.KEY_EVENT_MASK); 
   frame.setVisible(true); 
  }//end try
 catch (Exception e) {
 	 e.printStackTrace(); 
     if(one!=null) {one.close();} 
	 System.exit(0); 
  }     /* end catch  */
 }  /*   end   main    */
 	  
}  /*    end class    */


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -