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

📄 jvncserver.java

📁 its good.. for scjp guys......
💻 JAVA
字号:
import java.awt.AWTException;
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.ObjectOutputStream;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketException;
import javax.swing.ImageIcon;	
import javax.swing.JOptionPane;	
import java.awt.event.*;


public class JVNCserver
{
	private final int WIDTH = Toolkit.getDefaultToolkit().getScreenSize().width;
	private final int HEIGHT = Toolkit.getDefaultToolkit().getScreenSize().height;
	private final Rectangle screenRect = new Rectangle(0, 0, WIDTH, HEIGHT);
	public Socket socket;
	public ServerSocket s;
	private CaptureThread capturethread;
	private CaptureEvents captureevents;
	private Robot robot;
	private ObjectOutputStream out;
	private BufferedReader in;
	private BufferedImage i;
	Image image;
	
	
	public static void main(String arg[])
	{
		JVNCserver s = new JVNCserver();
	}
	
	public JVNCserver()
	{
			
			try
			{
				s = new ServerSocket(1166);

				socket = s.accept();
				System.out.println("Server Started");
				out = new ObjectOutputStream(socket.getOutputStream());
				in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
				robot = new Robot();
				capturethread = new CaptureThread();
				captureevents = new CaptureEvents();
			}
			
			catch (IOException ex)
			{
				ex.printStackTrace();
			}
			catch(Exception e)
			{
				e.printStackTrace();
				JOptionPane.showMessageDialog(null,"server is stop");
			
			}
		
	}
	
	
	public void sendImage() throws IOException
	{
		i = robot.createScreenCapture(screenRect);

		image = i.getScaledInstance(WIDTH, HEIGHT-60, Image.SCALE_SMOOTH);
		out.writeObject(new ImageIcon(image));
		
		i.flush();
		image.flush();
		out.flush();
	}
	
	
	private class CaptureThread implements Runnable
	{
		private volatile boolean keepRunning;
		Thread thread;
		
		CaptureThread()
		{
			thread = new Thread(this,"Capture Thread");
			keepRunning = true;
			thread.start();
		}
		
		public void run()
		{	
			while (keepRunning)
			{			
				try
				{			
					sendImage();
					Thread.currentThread().sleep(8000);
					//Thread.currentThread().sleep(20000);
				}
				catch(InterruptedException e1)
				{
					System.out.println("Thread Stop");
				}
				catch (IOException ex)
				{
					ex.printStackTrace();
				}
				catch(Exception e)
				{
					JOptionPane.showMessageDialog(null,"server is stoped");
					
				}
			}
		}
		
		public void stopRunning()
		{
			keepRunning = false;
		}
		
	}
	
	private class CaptureEvents implements Runnable
	{
		private volatile boolean keepRunning;
		Thread thread;
		private int HY = HEIGHT / 2;
		int y;
		
		
		CaptureEvents()
		{
			thread = new Thread(this,"Capture Events");
			keepRunning = true;
			
			thread.start();
		}
		
		
		public void run()
		{	
			
			while (keepRunning)
			{			
				try
				{				
					if (in!=null)
					{	
						String e = (String)in.readLine();
					
						if (e!=null)			
						{	
							//System.out.println(e);		
							int eventType = Integer.parseInt(e.substring(0, e.indexOf("|")));
							int arg1 = Integer.parseInt(e.substring(e.indexOf("|")+1, e.lastIndexOf("|")));
							int arg2 = Integer.parseInt(e.substring(e.lastIndexOf("|")+1));
							//System.out.println(arg1+"-"+arg2);
							
							if(eventType==JVNCconstant.CLOSE)
							{
								keepRunning = false;
								in.close();
								out.close();
								return;
							}
							
							if(arg2 < HY)
								y = arg2 - 20; 
							else if(arg2 > HY)
								y = arg2 + 21;
								
							if (eventType == JVNCconstant.MOUSE_MOVE)
								robot.mouseMove(arg1,y);
							
							else if (eventType == JVNCconstant.MOUSE_PRESS)
							{
								robot.mousePress(InputEvent.BUTTON1_MASK);
							}
							else if (eventType==JVNCconstant.MOUSE_RELEASE)
								robot.mouseRelease(InputEvent.BUTTON1_MASK);
							else if(eventType== JVNCconstant.MOUSE_WHEEL)
								robot.mouseWheel(arg1);	
							else if(eventType == JVNCconstant.KEY_PRESS_EVENTS)
							{
								switch(arg1)
								{
									case KeyEvent.VK_ENTER:
											robot.keyPress(KeyEvent.VK_ENTER);
											break;
									case KeyEvent.VK_F1:
											robot.keyPress(KeyEvent.VK_F1);
											break;
									case KeyEvent.VK_ESCAPE:
											robot.keyPress(KeyEvent.VK_ESCAPE);
											break;
								}
							}
														
						} 
					}
					else
					 	System.out.println("In empty");
					
					
					//Thread.currentThread().sleep(50);
				}
				/*catch(InterruptedException e)
				{
					System.out.println("Thread Stop");
				}*/
				catch(SocketException ex)
				{
					ex.printStackTrace();
					JOptionPane.showMessageDialog(null,"Client is stopped");
					break;
				}
				catch (IOException ex)
				{
					ex.printStackTrace();
				}
				catch(Exception e)
				{
					JOptionPane.showMessageDialog(null,"Server is stop");
					
				}
			}
		}
		
		public void stopRunning()
		{
			keepRunning = false;
		}
		
	}

}

⌨️ 快捷键说明

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