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

📄 tcpmonitorserver.java

📁 一个远程控制的java测试程序源代码.转于网上
💻 JAVA
字号:
/*
 * @(#)TcpMonitorServer.java 1.00 2005-9-4
 *
 * Copyright 2005 BeanSoft Studio. All rights reserved.
 * PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
 */
package studio.beansoft.remotecontrol.server;

import java.awt.AWTException;
import java.awt.Dimension;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.event.KeyEvent;
import java.awt.event.MouseEvent;
import java.awt.image.BufferedImage;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Hashtable;

import studio.beansoft.net.HttpParameterParser;
import studio.beansoft.remotecontrol.ConfigurationManager;
import studio.beansoft.util.logging.Logger;
import sun.net.NetworkServer;

import com.keypoint.PngEncoder;
import com.keypoint.PngEncoderB;

/**
 * TcpMonitorServer holds a server that send server screen images to client,
 * and do keyboard and mouse operations requested by the client.
 * 
 * Chinese documents:
 * TCP 监控服务器 发送服务器屏幕图像到客户端, 并根据客户机的请求进行鼠标和键盘操作.
 * 
 * @author BeanSoft
 * @version 1.00 2005-9-4
 */
public class TcpMonitorServer extends NetworkServer {
	/** The robot object */
	protected Robot robot;
	
	/** Logger */
	private static Logger logger = Logger.getLogger(TcpMonitorServer.class);
	/**
	 * 
	 */
	public TcpMonitorServer() {
		try {
			robot = new Robot();
		} catch (AWTException e1) {
			// TODO auto generated try-catch
			e1.printStackTrace();
			return;
		}
	
		try {
			String portString = ConfigurationManager.getConfiguration().getProperty("server_port");
			startServer(Integer.parseInt(portString));
			
			System.out.println(getClass().getName() + " started at " + portString);
		} catch (Exception e) {
			// TODO auto generated try-catch
			e.printStackTrace();
		}
	}
	
	/**
	 * Service client as a TCP monitor server.
	 * @see studio.beansoft.remotecontrol.client.TcpCommunicationThread
	 */
	public void serviceRequest() throws IOException {
		BufferedReader in = new BufferedReader(new InputStreamReader(this.clientInput));
		
		String line;
		
		// Buffered output
		BufferedOutputStream bufferout = new BufferedOutputStream(clientOutput, 
				10240);
		byte[] imgData;// Produced image data
		
		while((line = in.readLine()) != null) {
			long startTime = System.currentTimeMillis();
			doEventHandle(line);
			
			// Keypoint png file output
            PngEncoderB pngb = new PngEncoderB(captureScreen(),
					PngEncoder.NO_ALPHA, 0, 9);
            
			imgData = pngb.pngEncode();
			
			bufferout.write(("length" + imgData.length + '\n').getBytes());
			
			bufferout.write(imgData);
			bufferout.flush();
			
			logger.info("Execution time:" + (System.currentTimeMillis() - startTime));
			
			startTime = System.currentTimeMillis();
			
		}
	}
	
	/**
	 * Capture the current computer's screen to a image.
	 * @return
	 */
	public BufferedImage captureScreen() {
		//	 determine current screen size
		Toolkit toolkit = Toolkit.getDefaultToolkit();
		Dimension screenSize = toolkit.getScreenSize();
		Rectangle screenRect = new Rectangle(screenSize);
		// create screen shot

		BufferedImage image = robot.createScreenCapture(screenRect);
		
		return image;
	}
	
	/**
	 * Do event handles, such as mouse and keyboard events.
	 * @param parameters the request string with parameters
	 */
	public void doEventHandle(String parameters) {
		Hashtable param = HttpParameterParser.parseURIParameters(parameters);
//		 Mouse events
		String mouse_events = (String)param.get("mouse_events");
		if(mouse_events != null && mouse_events.length() > 0) {
			java.util.ArrayList list = studio.beansoft.remotecontrol.MouseEventCodec.stringToMouseEvent(mouse_events);

			long startTime = 0;

			for (int i = 0; i < list.size(); i++) {
				java.awt.event.MouseEvent e = (java.awt.event.MouseEvent) list.get(i);

				if(i == 0) {
					startTime = e.getWhen();
				}

				// Move mouse to given position
				robot.mouseMove(e.getX(), e.getY());

				int buttonMask = java.awt.event.InputEvent.BUTTON1_MASK;// 鼠标按键的掩码
				int button = e.getButton();// Mouse buttons , @since JDK 1.4
				
//				 Change button mask
				switch (button) {
					case MouseEvent.BUTTON1:
						buttonMask = java.awt.event.InputEvent.BUTTON1_MASK;
						break;
					case MouseEvent.BUTTON2:
						buttonMask = java.awt.event.InputEvent.BUTTON2_MASK;
						break;
					case MouseEvent.BUTTON3:
						buttonMask = java.awt.event.InputEvent.BUTTON3_MASK;
						break;						
					default:
						break;
				}
				
				if(e.getID() == MouseEvent.MOUSE_PRESSED) {
				// System.out.println("Press at " + e.getX() + "," + e.getY());
					robot.mousePress(buttonMask);
				} else	if(e.getID() == MouseEvent.MOUSE_RELEASED) {
				//	System.out.println("Realease at " + e.getX() + "," + e.getY());
					robot.mouseRelease(buttonMask);
				}

				robot.delay(10);

				// Pause some time
				//robot.delay((int)(e.getWhen() - startTime));

//				System.out.println("Delayed " + (e.getWhen() - startTime) + "ms");

				startTime = e.getWhen();
			}
		}

//		 Key board events
		String key_events = (String)param.get("key_events");
		if(key_events != null && key_events.length() > 0) {
			java.util.ArrayList list = studio.beansoft.remotecontrol.KeyEventCodec.stringToKeyEvent(key_events);

			long startTime = 0;

			for (int i = 0; i < list.size(); i++) {
				java.awt.event.KeyEvent e = (java.awt.event.KeyEvent) list.get(i);

				if(i == 0) {
					startTime = e.getWhen();
				}

				if(e.getID() == KeyEvent.KEY_PRESSED) {
				// System.out.println("Press at " + e.getX() + "," + e.getY());
					robot.keyPress(e.getKeyCode());
				} else	if(e.getID() == KeyEvent.KEY_RELEASED) {
				//	System.out.println("Realease at " + e.getX() + "," + e.getY());
					robot.keyRelease(e.getKeyCode());
				}

				robot.delay(10);

				// Pause some time
				//robot.delay((int)(e.getWhen() - startTime));

//				System.out.println("Delayed " + (e.getWhen() - startTime) + "ms");

				startTime = e.getWhen();
			}
		}
	}	

	/**
	 * Running the TCP server.
	 * @param args
	 */
	public static void main(String[] args) {
		new TcpMonitorServer();
	}

	/**
	 * @return returns the robot object.
	 */
	public Robot getRobot() {
		return robot;
	}

	/**
	 * @param robot The robot object to set.
	 */
	public void setRobot(Robot robot) {
		this.robot = robot;
	}

}

⌨️ 快捷键说明

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