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

📄 servertest.java

📁 java远程屏幕监控系统(精华)
💻 JAVA
字号:
/****************************************
* 程序文件名称:  ServerTest.java
*  功能:    服务器应用程序    
*****************************************/
import java.awt.*;
import java.awt.event.*;
import java.awt.image.BufferedImage; 
import java.io.ByteArrayOutputStream; 
import java.net.DatagramPacket; 
import java.net.DatagramSocket; 
import java.net.SocketAddress; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.UIManager; 
import com.sun.image.codec.jpeg.JPEGCodec; 
import com.sun.image.codec.jpeg.JPEGEncodeParam; 
import com.sun.image.codec.jpeg.JPEGImageEncoder; 

public class ServerTest extends Thread 
	{ 
      private DatagramSocket socket; //UDP
      public static final int PORT=5000;   
      public static final int MAX=409600; //数据大小
      public boolean end; 
      private Robot robot; 
      private Toolkit toolkit; 
	  int i=0;
	  //SocketAddress address=SocketAddress.getByName("192.169.1.77");

/*  1.构造方法ServerTest()   */      
   public ServerTest() throws Exception
	{ 
       robot=new Robot(); 
       toolkit=Toolkit.getDefaultToolkit(); 
       this.socket=new DatagramSocket(PORT); 
       socket.setSendBufferSize(MAX); 
       end=false; 
} 

/*  2.发送屏幕方法sendScreen()  */      
private void sendScreen(SocketAddress address) 
{ 
try { 
BufferedImage image=
robot.createScreenCapture(new Rectangle(toolkit.getScreenSize())); 
    ByteArrayOutputStream output=new ByteArrayOutputStream(); 
    JPEGEncodeParam param=JPEGCodec.getDefaultJPEGEncodeParam(image); 
    param.setQuality(0.3f,false); 
    JPEGImageEncoder encoder=JPEGCodec.createJPEGEncoder(output,param); 
    encoder.encode(image); 
    encoder.getOutputStream().close(); 
DatagramPacket packet=
new DatagramPacket(output.toByteArray(),output.size(),address); 
    this.socket.send(packet); 
	System.out.println(++i+"\n");
    }
  catch (Exception e) { e.printStackTrace();} 
} 
 
/*  3.线程方法RUN()      */ 
  public void run() 
	{ 
       //定义字节数组,放置接收到的数据
       byte[] bytes=new byte[4096]; 
       while(!end) {
       try { 
           //创建数据包对象,以便收取数据包
           DatagramPacket packet=new DatagramPacket(bytes,bytes.length); 
           //堵塞端口,接收数据包
           this.socket.receive(packet); 
           //取出数据包的内容
           String command=new String(packet.getData(),packet.getOffset(),20).trim(); 
           //如果接收到的指令为"REFRESH",
           //则将自己屏幕图像发送出去
           if(command.equalsIgnoreCase("REFRESH"))  {
	            sendScreen(packet.getSocketAddress());
             } 
           //若指令不是"REFRESH",则是一个要执行的鼠标或键盘动作指令
           else { 
             byte[] the=packet.getData(); 
             int n=packet.getOffset(); 
             int x=Integer.parseInt(new String(the,n+20,10).trim()); 
             int y=Integer.parseInt(new String(the,n+30,10).trim()); 
             int button=Integer.parseInt(new String(the,n+40,10).trim()); 
             //如果接收到的指令为"MousePressed",
             //则在自己的电脑中执行"按下鼠标左键"的动作指令
             if(command.equalsIgnoreCase("MousePressed"))  {
	             robot.mousePress(button); 
                } 
	         //如果接收到的指令为"MouseReleased",
             //则在自己的电脑中执行"释放鼠标左键"的动作指令
	         else if(command.equalsIgnoreCase("MouseReleased")) {
	   	         robot.mouseRelease(button);
                } 
		     //如果接收到的指令为"MouseMoved",
             //则在自己的电脑中执行"移动鼠标"的动作指令
		     else if(command.equalsIgnoreCase("MouseMoved"))  {
		         robot.mouseMove(x,y);
                } 
	         //如果接收到的指令为"MousePressed",
             //则在自己的电脑中执行"滚动鼠标滚轮"的动作指令
	         else if(command.equalsIgnoreCase("MouseWheel")) {
			     robot.mouseWheel(button);
                }   
			 //如果接收到的指令为"KeyPressed",
             //则在自己的电脑中执行"按下按键"的动作指令
			 else if(command.equalsIgnoreCase("KeyPressed")) {  
				 robot.keyPress(x); 
                } 
			 //如果接收到的指令为"KeyReleased",
             //则在自己的电脑中执行"释放按键"的动作指令
			 else if(command.equalsIgnoreCase("KeyReleased")){  
                 robot.keyRelease(x);
                } 
	    	} /*  end else  */
       }  /* end try  */
       catch (Exception e) {       }
     }  /*  end while  */
 }     /*  end run  */
      
/* 4. CLOSE() 方法  */		
	public void close() 
	{ 
end=true; 
       this.socket.close(); 
	 } 

 /*  5. MAIN()方法   */
public static void main(String[] args)
{ 
  ServerTest one=null; 
  try { 
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
/*  窗体建立对象  */
	JFrame frame=new JFrame("受监视中。。。"); 
    frame.getContentPane().setLayout(new BorderLayout()); 
    frame.setSize(240,80); 
    JButton exit=new JButton("退出"); 
    frame.getContentPane().add(exit,BorderLayout.CENTER); 
    /*  获取屏幕的分辨率  */
Dimension screen=Toolkit.getDefaultToolkit().getScreenSize(); 
    Dimension a=frame.getSize(); 
    /*  使窗口自动居中 */
    frame.setLocation((screen.width-a.width)/2,(screen.height-a.height)/2); 
  
	one=new ServerTest(); 
    one.start(); 
    final ServerTest the=one; 
              
	/*  退出键的监听  */
	exit.addActionListener(new ActionListener() { 
              public void actionPerformed(ActionEvent e) { 
              the.close(); 
              System.exit(0); } 
        }); 
			  
	/*  窗口关闭的监听  */
	frame.addWindowListener(new WindowAdapter() { 
              public void windowClosing(WindowEvent e) { 
              the.close(); 
              System.exit(0); 
              } 
        }); 
   frame.setVisible(true); 
 }//endtry 
catch (Exception e) 
	{ 
      e.printStackTrace(); 
       if(one!=null) { one.close(); } 
       System.exit(0); 
      } 
 } //end main
}//end class

⌨️ 快捷键说明

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