Java -Instanzcode zum Implementieren von Remotedesktop
Die Steuerseite übergibt das Mausereignis an die Serverseite
Nach dem Empfangen des Mausereignisses auf dem Server überträgt es es an den Client
Nachdem der Client das Mausereignis erhalten hat, kann er über die Roboterklasse abgeschlossen werden, und der Screenshot wird aufgenommen, um das Bild an den Server zu senden, und der Server sendet es an das Steuerterminal.
Nachdem ich es vereinfachte
// Erste Einführung der einfachen Verwendung der Roboterklasse importieren java.awt.awtexception; import Java.awt.robot; importieren Sie Java.awt.event.inputEvent;/** * Robot verwenden * @Author dumb * */öffentliche Klasse Robottest {public static void Main (String [] args [] wors {]. R.Mousemove (300, 500); // Mausbewegung R.MousePress (InputEvent.button1_mask); // Mouse Press r.mouserEasease (inputEvent.button1_mask); // Mausfreigabe R.Keypress ((int) 'a'); // makeboard drücken (int) 'a' bedeutet, A in die entsprechende Tastatur der Tastatur zu konvertieren. // Makeboard Release}} // Bildschirmcrawl import Java.awt.awtexception; Import Java.awt.Rectangle; Import Java.awt.Robot; Import Java.awt.image.Buffeedimage; Import Javax.swing.imageCon; javax.swing.windowConstants;/*** Crawl Local Desktop Image* @Author Dumb**/public class Screentest {public static void main (String [] args) löst Awtexception aus, InterruptedException {Robot Robot = new Robot (); JFrame Jframe = new Jframe (); Jframe.SetSize (1200, 700); JLabel label = new JLabel (); Jframe.Add (Label); // vier Parameter xy Breite Höhe jframe.setvisible (true); jframe.setDefaultCloseOperation (windowConstants.exit_on_close); // Konstruieren Sie einen dynamischen Abschnitt Dead Loop, während (true) {bufferedImage image = Robot.CreateScreencapture (neues Rechteck (0,0,1366,768)); // Seave the Screen Label.seticon (neues Bildicon (Bild)); Thread.sleep (50); }}} // Erklärung des Prinzips der Fernbedienung
// Dividieren Sie es in das Serverend und das Clientend.
// Ursprünglich wird die Serverseite nur als Weiterleitung verwendet, aber sie schreibt nicht als Demonstration.
// dh die Client -Seite steuert die Serverseite e
/**
* Was ich hier verwende, ist, ein Mausereignis auf der Client -Seite zu senden, dh die Steuerseite, nachdem der von der Serverseite gesendete Bildschirm gesendet wurde.
* Verwenden Sie dann Roboter, um es zu verarbeiten
* Die Übertragungsmethode kann mit Socket+IO verarbeitet werden
* Die Bildschirmaufnahme und Bildkomprimierung übernimmt die Roboter -Bildschirmaufnahmefunktion und das eigene Bildcodierer von JDK, um sie in ein Byte -Array umzuwandeln
* Nachdem Robot es an den Server gesendet hat, kann er das Objektobjekt direkt über IO+Socket abrufen und es in InputEvent stalten (sowohl KeyeVent als auch MouseEvent werden geerbt)
* Durch die Beurteilung des Ereignisentyps können Sie ihn separat verarbeiten. Hier sind auf dem Server zwei Threads erforderlich, einer soll den Client seiten und an den Client senden, und der andere ist, den Client anzuhören.
* Ereignisse übergeben
*/
// Folgendes ist der spezifische Implementierungscode
// Der Server -Hauptprozess importieren java.awt.awtexception; import Java.awt.event; import Java.awt.robot; import Java.awt.event.inputEvent; importieren java.awt.event.keevent.Keyevent; Import Java. java.io.objectInputStream; importieren java.net.serversocket; import java.net.socket;/*** Server* @author dumb**/public class Server {public static void main (String [] args) throws ioException {ServerSocket Server = New ServerSocket (80); System.out.println ("Der Server hat normal gestartet"); Socket Socket = server.accept (); // Warten auf den Empfang der Anforderung, blockiert das Method System.out.println ("Es gibt eine Client -Verbindung"); DataOutputStream dos = new DataOutputStream (Socket.getOutputStream ()); // Übertragung der Ausgabestreams, die vom Client- und Server -Seiten -Imagethead -Verarbeitung imaghead imagetHhread = new Imagethead (DOS) verknüpft sind; neuer Thread (Imagethead) .Start (); neuer Thread (neuer EventThread (neuer ObjectInputStream (Socket.getInputStream ())). start (); }}/*** verwendet, um empfangene Mausereignisse oder Tastaturereignisse zu verarbeiten privater Roboterroboter; public eventThread (ObjectInputStream ois) {this.ois = ois; } @Override public void run () {try {Robot = new Robot (); while (true) {InputEvent event = (inputEvent) ois.readObject (); // Importieren, dass das vom Client übergebene Objekt ein Objekt -Action -Event (Ereignis); // Ereignis}} catch (awtexception e) {e.printstacktrace (); } catch (classNotFoundException e) {e.printstacktrace (); } catch (ioException e) {e.printstacktrace (); } endlich {try {ois.close (); } catch (ioException e) {e.printstacktrace (); }}} / *** Ereignisverarbeitung, verwendet, um den Ereignistyp zu beurteilen und mit der Robot -Klasse* @param Ereignis* / public void actionEvent (InputEvent Event) {System.out.println (Ereignis) auszuführen; if (Ereignisinstanz von KeyEvent) {KeyEvent e = (KeyEvent) Ereignis; int type = e.getId (); // Erhalten Sie den Ereignistyp if (type == event.key_press) {Robot.Keypress (e.getKeyCode ()); } else if (type == event.key_release) {Robot.Keyrelease (e.getKeyCode ()); }} else if (Ereignisinstanz von MouseEvent) {MouseEvent e = (MouseEvent) Ereignis; int type = e.getId (); if (type == event.mouse_move) {robot.mousemove (e.getX (), e.gety ()); } else if (type == event.mouse_down) {Robot.mousePress (getMouseKey (Typ)); } else if (type == event.mouse_Up) {Robot.MouserEase (getMouseKey (Typ)); } else if (type == event.mouse_drag) {robot.mousemove (e.getX (), e.gety ()); // Maus Drag}}}/*** Gibt das reale Ereignis der Maus zurück. Die Mauszeit kann nicht direkt verarbeitet werden und muss konvertiert werden. } else if (button == mouseEvent.button2) {// rechte Maustaste return inputEvent.button2_mask; } else if (button == mouseEvent.button3) {// scroller return inputEvent.button3_mask; } else {return 0; }}} // Screencaper und Absender, hier müssen Sie den Out -Stream -Import des Socket Java.awt.awtexception erhalten; Import Java.awt.Dimension; Import Java.awt.Rectangle; Import Java.awt.robot; Import. Java.io.BytearrayoutputStream; importieren java.io.dataoutputStream; import Java.io.ioException; importieren com.sun.image.codec.jpeg. // Data Output Stream Public Imaghead (DataOutputStream dos) {this.dos = dos; } @Override public void run () {try {Robot Robot = new Robot (); // Seave Die gesamte Bildschirmdimension dimension = Toolkit.getDefaulttoolkit (). GetCreenSize (); /* int width = (int) dimensional.getWidth (); int Höhe = (int) dimensional.getWidth (); Rechteck rec = neues Rechteck (0,0, Breite, Höhe); */ Rechteck rec = neues Rechteck (Dimension); Bufferedimage Bild; Byte ImageBytes []; while (true) {image = robot.createScreencapture (rec); ImageBytes = getImageBytes (Bild); 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 (); } endlich {try {if (dos! = null) dos.close (); } catch (ioException e) {e.printstacktrace (); }}} / *** komprimiertes Bild* @param -Bilder, die komprimiert werden müssen // den Kompressor komprimieren und zuerst im Byte -Ausgangsstrom JPegimageCoder JPEGD = JPEGCODEC.CreatejpeNcoder (BAOS) gespeichert werden; // Kompress iamge jpegd.code (Bild); // in Byte Array zurückkehren baos.tobytearray (); }} ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- java.io.objectoutputStream; import Java.net.socket; import Java.net.unnownhostexception; import Javax.swing.imageicon; Import Javax.swing.jframe; Import Javax.swing.jlabel; Import Javax.swing.jpanel; Javax.SWing.SWing.SWing.SWing.SWing.SWing.SWing.SWing.SWing.jsswing.jsswing.jscrollpan; javax.swing.windowconstants;/*** client* @author dumb**/public class Client {public static void main (String args []) löst UnbekannteHostException, ioException {Socket s = neuer Socket ("127.0.0.1", 80); DataNputStream dis = new DataNputStream (S.GetInputStream ()); ObjectOutputStream OOS = new ObjectOutputStream (S.GetOutputStream ()); ClientWindow CW = New ClientWindow (OOS); Byte [] ImageBytes; while (true) {imageBytes = new byte [dis.readint ()]; // Erster die übergebene Array -Länge dis. // Alle Daten in Byte CW.Repainimage (ImageBytes) speichern; }}}/*** Client -Formular* @author dumb**/class clientWindow erweitert JFrame {private ObjectOutputStream OOS; Privat -JLabel -Label; // Hintergrundbildmethode public void repainimage neu schreiben (byte [] bildBytes) {label.seticon (New ImageIcon (ImageBytes)); this.Repaint (); } public ClientWindow (ObjectOutputStream OOS) {this.oos = oos; this.settitle ("Fernbedienungsprogramm"); label = new JLabel (); Jpanel p = new jpanel (); P.Add (Etikett); JScrollPane scroll = new Jscrollpane (p); // Scrollbar zum P -Panel this.add (scroll); this.setSize (1024.768); this.setDefaultCloseOperation (windowConstants.exit_on_close); this.setvisible (true); this.addKeyListener(new KeyListener() { @Override public void keyTyped(KeyEvent e) { // TODO Auto-generated method stub } @Override public void keyReleased(KeyEvent e) { sendEvent(e); } @Override public void keyPressed(KeyEvent e) { sendEvent(e); } }); Label.AddMouselistener (neuer Mouselistener () {@Override public void mouseReased (MouseEvent e) {sendEvent (e);} @Override public void Mouse -depressived (MouEeivent E) {sendEvent (e) @overrade öffentlich mousekled (mousevent (mousevent e) (e) @overrade öffentlich void void mouseclicked (mousevent e) (e) {e. öffentlich void mouseclicked (mousevent e) (e) {e) {edrede void mouseclicked (mousevEvent void museEnted (Mouseevent e) {// Todo automatisch generierter Methode Stub} @Override public void mouseexited (MouseeEvent e) {// Todo Auto-generierter Methode Stub}}); } public void sendEvent (InputEvent Ereignis) {try {oos.writeObject (Ereignis); } catch (ioException e) {e.printstacktrace (); }}}Der obige Beispielcode für die Java -Implementierung von Remote -Desktop ist der gesamte Inhalt, den ich mit Ihnen geteilt habe. Ich hoffe, Sie können Ihnen eine Referenz geben und ich hoffe, Sie können wulin.com mehr unterstützen.