Código de instância Java para implementar a área de trabalho remota
O lado do controle passa o evento do mouse para o lado do servidor
Depois de receber o evento do mouse no servidor, ele o transmite para o cliente
Depois que o cliente recebe o evento do mouse, ele pode ser concluído através da classe de robôs e a captura de tela será levada para enviar a imagem ao servidor e o servidor o enviará para o terminal de controle.
Depois que eu simplificar
//First introduce the simple use of the robot class import java.awt.AWTException;import java.awt.Robot;import java.awt.event.InputEvent;/** * Use robot * @author Dumb* */public class RobotTest { public static void main(String[] args) throws AWTException { Robot r = new Robot(); R.MouSEMove (300, 500); // Move de mouse r.MousePress (inputEvent.Button1_Mask); // mouse Press R.MouseRelease (inputevent.Button1_Mask); // Liberação do mouse R.Keypress ((int) 'A'); // Makeboard Press (int) 'a' significa converter A na tecla correspondente do teclado R.KeyReLease ((int) 'A'); // makeboard release}} // rastreio de tela importa importar java.awt.awtexception; importar java.awt.rectangle; importar java.awt.robot; importar java.awt.image.bufferimage; importar javax.swing.imageicon; import.abing.jfame; importa; javax.swing.windowconstants;/*** Rastreie a imagem local da área de trabalho* @Author Dumb**/public classe Screentest {public static void main (string [] args) lança awtexception, interruptedException {robot robot = new robot (); Jframe jframe = new jframe (); jframe.setsize (1200, 700); Rótulo jlabel = new jlabel (); jframe.add (etiqueta); // quatro parâmetros xy largura altura jframe.setvisible (true); jframe.setDefaultCloseoperation (windowconstants.exit_on_close); // Construa uma interceptação dinâmica de loop morto while (true) {buffaredImage image = robot.createsCreencapture (novo retângulo (0,0,1366.768)); // SEAVE A REQUILAÇÃO DA TELA.SETICON (NOVA IMAGEICON (IMAGEM)); Thread.sleep (50); }}} // Explicação do princípio do controle remoto
// Divida -o no final do servidor e no final do cliente.
// Originalmente, o lado do servidor é usado apenas como encaminhamento, mas não escreve o encaminhamento como demonstração.
// isto é, o lado do cliente controla o lado do servidor e
/**
* O que eu uso aqui é enviar um evento do mouse no lado do cliente, ou seja, o lado do controle, depois de receber a tela enviada pelo lado do servidor,
* Em seguida, use o robô para processá -lo
* O método de transmissão pode ser processado com soquete+io
* Captura de tela e compressão de imagem adota a função de captura de tela do Robot e o próprio codificador de imagem do JDK para convertê -lo em uma matriz de bytes
* Depois de enviá -lo para o servidor, o robô pode obter diretamente o objeto através do soquete IO+e lançá -lo em inputas (keyevent e mouseevent são herdados)
* Ao julgar o tipo de evento, você pode processá -lo separadamente. Aqui, dois threads são necessários no servidor, um é a exibição e enviar ao cliente, e o outro é ouvir o cliente.
* Eventos passados
*/
// o seguinte é o código de implementação específico
// O processo principal do processo importa java.awt.awtexception; importar java.awt.event; importar java.awt.robot; importar java.awt.event.inputevent; importação java.awt.event.keyevent; Import; java.io.ObjectInputStream; importar java.net.serversocket; importar java.net.socket;/*** servidor* @author idiota**/public class Server {public static void main (string [] args) lança a ioexception {serverSocket Server = New ServerSocket (80); System.out.println ("O servidor começou normalmente"); Soquete soket = server.accept (); // aguardando o recebimento da solicitação, bloqueando o método system.out.println ("existe uma conexão com o cliente"); DataOutputStream DOS = new DataOutputStream (Socket.getOutputStream ()); // Transfira os fluxos de saída vinculados pelo cliente e servidor ImageThRead Processing ImagethRead ImageThRead = new ImageThread (DOS); novo thread (ImageThread) .start (); novo thread (new EventThread (new ObjectInputStream (Socket.getInputStream ()))). start (); }}/*** Usado para lidar com eventos de mouse recebidos ou eventos de teclado*/class EventThread implementa Runnable {Private ObjectInputStream OIS; robô privado robô; public EventThread (ObjectInputStream OIS) {this.ois = OIS; } @Override public void run () {try {robot = new Robot (); while (true) {inputevent event = (inputevent) ois.readObject (); // importe que o objeto passado pelo cliente é um objeto actionEvent (event); // handle event}} catch (awtexception e) {e.printStacktrace (); } catch (classNotFoundException e) {e.printStackTrace (); } catch (ioexception e) {e.printStackTrace (); } finalmente {tente {ois.close (); } catch (ioexception e) {e.printStackTrace (); }}} / *** Processamento de eventos, usado para julgar o tipo de evento e executá -lo com a classe Robot* @param evento* / public void ActionEvent (Evento inputEvent) {System.out.println (Event); if (Instância do evento de keyEvent) {KeyEvent e = (KeyEvent) Evento; int tipo = e.getId (); // Obtenha o tipo de evento if (type == event.key_press) {robot.keypress (e.getKeyCode ()); } else if (type == event.key_release) {robot.keyReLease (e.getKeyCode ()); }} else if (instância de evento de mouseevent) {mouseevent e = (mouseevent) evento; int tipo = e.getId (); if (type == event.mouse_move) {robot.mouseMove (e.getx (), e.gety ()); } else if (type == event.mouse_down) {robot.mousepress (getMouseKey (type)); } else if (type == event.mouse_up) {robot.mouseRelease (getMouseKey (tipo)); } else if (type == event.mouse_drag) {robot.mousEmove (e.getx (), e.gety ()); // mouse drag}}}}/*** retorna o evento real do mouse. O tempo do mouse não pode ser processado diretamente e precisa ser convertido * @return */public int getMouseKey (int button) {if (button == mouseevent.button1) {// botão do mouse esquerdo retorna inputevent.button1_mask; } else if (botão == mouseevent.button2) {// botão do mouse direito retorna inputevent.button2_mask; } else if (botão == mouseevent.button3) {// roller retorna inputevent.button3_mask; } else {return 0; }}} // Capturador e remetente da tela, aqui você precisa obter a importação de fluxo do soquete java.awt.awtexception; importar java.awt.dimension; importar java.awt.rectangle; importar java.ta.awt.robot; import java.awt.toolkit; importar; java.io.bytearrayoutputStream; importar java.io.dataoutputStream; importar java.io.ioException; importar com.sun.image.codec.jpeg.*;/*** usado para enviar dados de imagem* @author dumb*/public // Stream de saída de dados public ImagEThRead (DataOutputStream DOS) {this.dos = DOS; } @Override public void run () {try {robot robot = new Robot (); // SEAVE toda a dimensão da tela da tela = Toolkit.getDefaultToolkit (). GetScreensize (); /* int width = (int) dimensional.getWidth (); int height = (int) dimensional.getwidth (); Retângulo rec = novo retângulo (0,0, largura, altura); */ Retângulo rec = novo retângulo (dimensão); Imagem de bufferImage; byte imageBytes []; while (true) {image = robot.createsCreencapture (rec); imageBytes = getImageBytes (imagem); Dos.WriteInt (ImageBytes.Length); Dos.Write (ImageBytes); Dos.flush (); Thread.sleep (50); // Thread Sleep}} Catch (AwTexception e) {E.PrintStackTrace (); } catch (imageformatexception e) {e.printStackTrace (); } catch (ioexception e) {e.printStackTrace (); } catch (interruptedException e) {e.printStackTrace (); } finalmente {tente {if (dos! = null) dos.close (); } catch (ioexception e) {e.printStackTrace (); }}} / *** Imagem compactada* @param Pictures que precisam ser compactadas* @return Array de byte comprimido* @THOWSows IoException* @Throws ImageFormatexception* / public byte [] getImageByTesputes (bufferImage imagem) lança imagexception, ioxception {portrayoututes (bufferImage) lança imageOxception, ioException {porTrayoutSutes // compactar o compressor e primeiro obtenha -o no fluxo de saída de bytes jpegImageEncoder jpegd = jpegCodec.createjpegencoder (Baos); // comprime iamge jpegd.encode (imagem); // converter para a matriz de bytes retorna baos.tobytearray (); }} ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- java.io.ObjectOutputStream;import java.net.Socket;import java.net.UnknownHostException;import javax.swing.ImageIcon;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JPanel;import javax.swing.JScrollPane;import javax.swing.windowconstants;/*** cliente* @Author Dumb**/public class Client {public static void main (string args []) lança UnknownHostException, ioexception {Socket s = new Socket ("127.0.0.1, 80); DatainputStream DIS = new DataAinputStream (s.getInputStream ()); ObjectOutputStream ooS = new ObjectOutputStream (s.getOutputStream ()); ClientWindow CW = new ClientWindow (OOS); byte [] imageBytes; while (true) {imageBytes = novo byte [Dis.ReadInt ()]; // Primeiro, obtenha o comprimento da matriz passada de forma nunca (ImageBytes); // armazenar todos os dados em byte cw.repainImage (ImageBytes); }}}/*** Formulário do cliente* @Author Dumb**/classe ClientWindow estende JFrame {Private ObjectOutputStream OOS; Rótulo privado de Jlabel; // Reescrever o método da imagem em segundo plano public void RepAnimage (byte [] imageBytes) {Label.Seticon (novo Imageicon (ImageBytes)); this.Repaint (); } public clientwindow (objectOutputStream ooS) {this.oos = ooS; this.setTitle ("Programa de controle remoto"); etiqueta = new jlabel (); Jpanel p = new jpanel (); p.add (etiqueta); JscrollPane scroll = new jscrollPane (p); // Adicione scrollbar ao painel p this.add (roll); this.SetSize (1024.768); this.setDefaultCloseoperation (windowconstants.exit_on_close); this.setVisible (true); this.addkeyListener (new KeyListener () {@Override public void keyped (keyEvent e) {// TODO Method Auto-Gerated Stub} @Override public void keyreLEEDED (keyEvent e) {sendEvent (e);} @Override Public void keyPened (keyEvent e) {sendEvent; LABEL.AddMouseListener (new MouseListener () {@Override public void mousereledEd (mouseevent e) {sendEvent (e);} @Override public void mousePressed (mouseevent e) {sendEvent (e);} @Override Public void mousent (mouseEnt (mousein) {sendEvent (e); @@Override Public void mousent (mouseEnt (mouseein) mouseEntered (mouseevent e) {// TODO Método GOERADO AUTOMELADO Método} @Override public void Mouseexited (mouseevent e) {// TODO Método Geral-Generado}}}); } public void sendEvent (Evento inputEvent) {try {oos.writeObject (event); } catch (ioexception e) {e.printStackTrace (); }}}O código de exemplo acima para a implementação do Java do desktop remoto é todo o conteúdo que compartilhei com você. Espero que você possa lhe dar uma referência e espero que você possa apoiar mais o wulin.com.