TCP远程桌面控制

服务端程序:

           第一步创建服务器套接字(程序如下):

                    ServerSocket server = new ServerSocket(10086);//里面传指定的端口号

           第二步等待客服端连接(代码如下):

                    Socket socket = server.accept();

           第三步创建一个发送数据的线程和一个接受数据的线程:(代码如下)

           1.1.服务端向客服端发送数据

public class SendThread extends Thread{
	Socket sk;
	public SendThread(Socket sk){
		this.sk = sk;
	}
	
	public void run(){
		try {
			//从套接字上获得输出流
			OutputStream os = sk.getOutputStream();
			ObjectOutputStream oos = new ObjectOutputStream(os);
			//创建一个机器人对象
			Robot rt = new Robot();
			while(true){
				//获得频幕分辨率
				Toolkit tool = Toolkit.getDefaultToolkit();
				Dimension sion = tool.getScreenSize();
				//截取起点
				Point p = new Point(0,0);
				//指定截取的区域
				Rectangle rect = new Rectangle(p,sion);
				
				//开始截屏,获得截取的图像
				BufferedImage img = rt.createScreenCapture(rect);
				ImageIcon icon = new ImageIcon(img);
				oos.writeObject(icon);
				oos.flush();
				Thread.sleep(500);
				
				
				
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		
	}

}

 一定要记得创建机器人对象,只有通过机器人对象才能不断的去截取屏幕图像。

       1.2 创建客服端套接字:

        Socket socket = new Socket(ip,intport);

      发送数据一定要把数据包装成对象流:

OutputStream ops = socket.getOutputStream();

oos = new ObjectOutputStream(ops);

然后启动线程不断接受从服务端发来的数据(图片)

public class RecieveThread extends Thread {
	Socket socket;
	JPanel panel;
	public RecieveThread(Socket socket, JPanel panel){
		this.socket = socket;
		this.panel = panel;
	}
	public void run(){
	try {
		InputStream is = socket.getInputStream();
		ObjectInputStream ois = new ObjectInputStream(is);
	  while(true){
		  Object ject = ois.readObject();
		  ImageIcon icon = (ImageIcon)ject;
		  int width = icon.getIconWidth();
		  int height = icon.getIconHeight();
		  panel.setPreferredSize(new Dimension(width,height));
		  
		  Graphics g = panel.getGraphics();
		  g.drawImage(icon.getImage(), 0, 0, null);
		  
		  
		  
		  
		  
	  }
		
	} catch (Exception e) {
		e.printStackTrace();
	}
		  
		
	}

}

      1.3.服务端接受客服端发来的数据

public class RecieveThread extends Thread{
	Socket socket;
	public RecieveThread(Socket socket){
		this.socket= socket;
	}
	public void run(){
		
		try {
			Robot robot = new Robot();//创建一个机器人对象
			InputStream ips = socket.getInputStream();
			ObjectInputStream ois = new ObjectInputStream(ips);
			while(true){
				int x = ois.readInt();
				int y = ois.readInt();
				int btnNum = ois.readInt();
				String type = (String) ois.readObject();
                               //这里函数参数对应的鼠标左键中建和右键的值,和鼠标事件得到的值不一样,在这里需要做一下转换
				int btnMask = InputEvent.BUTTON1_MASK;
                               //监听客服端的鼠标键
				if(btnNum == MouseEvent.BUTTON1){
					btnMask = InputEvent.BUTTON1_MASK;
					
					
				}else if(btnMask == MouseEvent.BUTTON2){
					btnMask = InputEvent.BUTTON2_MASK;
				}else if(btnMask == MouseEvent.BUTTON3){
					btnMask = InputEvent.BUTTON3_MASK;
				}
				if("pressed".equals(type)){
					robot.mouseMove(x, y);
					robot.mouseRelease(btnMask);
				}else if("released".equals(type)){
					robot.mouseMove(x, y);
					robot.mouseRelease(btnMask);
				}else if("moved".equals(type)){
					robot.mouseMove(x, y);
				}
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}

           

猜你喜欢

转载自goslinzhihui.iteye.com/blog/2128203