Kode instan Java untuk mengimplementasikan desktop jarak jauh
Sisi kontrol melewati acara mouse ke sisi server
Setelah menerima acara mouse di server, ia mentransmisikannya ke klien
Setelah klien mendapatkan acara mouse, itu dapat diselesaikan melalui kelas robot, dan tangkapan layar akan diambil untuk mengirim gambar ke server, dan server akan mengirimkannya ke terminal kontrol.
Setelah saya menyederhanakannya
//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); // mouse moving r.mousepress (inputevent.button1_mask); // mouse tekan r.mouserelease (inputevent.button1_mask); // mouse rilis r.keypress ((int) 'a'); // Makeboard tekan (int) 'a' berarti mengubah a menjadi kunci yang sesuai dari keyboard r.keyrelease ((int) 'a'); // Rilis Makeboard}} // Screen Crawl Impor Java.Awt.AwtException; import java.awt.rectangle; import java.awt.robot; java.awt.image.bufferedimage; impor javax.swing.imageicon; impor javax.swing.jframe; javax.swing.windowconstants;/*** crawl gambar desktop lokal* @author dumb**/kelas publik screentest {public static void main (string [] args) melempar awtexception, interruptedexception {robot robot = robot baru (); Jframe jframe = jframe baru (); jframe.setsize (1200, 700); Label jlabel = new jlabel (); jframe.add (label); // Empat parameter xy width tinggi jframe.setVisible (true); jframe.setDefaultCloseOperation (windowconstants.exit_on_close); // Bangun intersep dinamis loop mati sementara (true) {bufferedImage Image = robot.createScreencapture (persegi panjang baru (0,0,1366,768)); // Seave the Screen label.seticon (gambar baru (gambar)); Thread.sleep (50); }}} // Penjelasan Prinsip Remote Control
// membagi menjadi ujung server dan akhir klien.
// Awalnya, sisi server hanya digunakan sebagai penerusan, tetapi tidak menulis penerusan sebagai demonstrasi.
// Artinya, sisi klien mengontrol sisi server e
/**
* Apa yang saya gunakan di sini adalah mengirim acara mouse di sisi klien, yaitu sisi kontrol, setelah menerima layar yang dikirim oleh sisi server,
* Kemudian gunakan robot untuk memprosesnya
* Metode transmisi dapat diproses dengan soket+io
* Layar menangkap dan kompresi gambar mengadopsi fungsi penangkapan layar robot dan encoder gambar JDK sendiri untuk mengubahnya menjadi array byte
* Setelah mengirimkannya ke server, robot dapat secara langsung mendapatkan objek objek melalui soket IO+, dan melemparkannya ke InputEvent (baik KeyEvent dan MouseEvent diwarisi)
* Dengan menilai jenis acara, Anda dapat memprosesnya secara terpisah. Di sini, dua utas diperlukan di server, satu untuk menyaring dan mengirim ke klien, dan yang lainnya adalah mendengarkan klien.
* Lulus acara
*/
// Berikut ini adalah kode implementasi spesifik
// Proses utama server mengimpor java.awt.awtexception; impor java.awt.event; impor java.awt.robot; impor java.awt.event.inputevent; impor java.awt.event.keyevent; impor java.awt.event.mouseEvent; impor java.put -tavaoUstr; java.io.objectInputStream; import java.net.serversocket; import java.net.socket;/*** server* @author bodoh**/server kelas publik {server public static void (string [] args) melempar ioException {server server server = server baru server (80); System.out.println ("Server telah dimulai secara normal"); Socket socket = server.accept (); // menunggu untuk menerima permintaan, memblokir metode metode.out.println ("Ada koneksi klien"); DataOutputStream dos = DataOutputStream baru (socket.getoutputStream ()); // Transfer aliran output yang ditautkan oleh klien dan sisi server Imagethread pemrosesan Imagethread imagethread = new Imagethread (DOS); utas baru (Imagethread) .start (); utas baru (EventThread baru (ObjectInputStream baru (socket.getInputStream ()))). start (); }}/*** Digunakan untuk menangani acara mouse yang diterima atau acara keyboard*/kelas EventThread mengimplementasikan runnable {private ObjectInputStream OIS; robot robot pribadi; public eventthread (ObjectInputStream OIS) {this.ois = ois; } @Override public void run () {coba {robot = robot baru (); while (true) {inputEvent event = (inputEvent) ois.readObject (); // Impor bahwa objek objek yang dilewati oleh klien adalah objek actionEvent (event); // handle event}} catch (awtException e) {e.printstacktrace (); } catch (ClassNotFoundException e) {E.PrintStackTrace (); } catch (ioException e) {e.printstacktrace (); } akhirnya {coba {ois.close (); } catch (ioException e) {e.printstacktrace (); }}} / *** Pemrosesan acara, digunakan untuk menilai jenis acara, dan menjalankannya dengan kelas robot* @param event* / public void actionEvent (acara inputEvent) {system.out.println (acara); if (event instanceof keyevent) {keyevent e = (keyevent) event; int type = e.getId (); // Dapatkan jenis acara if (type == event.key_press) {robot.keypress (e.getKeyCode ()); } else if (type == event.key_release) {robot.keyrelease (e.getKeyCode ()); }} lain if (event instanceof mouseEvent) {mouseEvent e = (mouseEvent) event; int tipe = e.getId (); if (type == event.mouse_move) {robot.mouseMove (e.getx (), e.gety ()); } lain jika (type == event.mouse_down) {robot.mousepress (getMousey (type)); } lain jika (type == event.mouse_up) {robot.mouserelease (getMousey (type)); } lain jika (type == event.mouse_drag) {robot.mouseMove (e.getx (), e.gety ()); // mouse drag}}}}/*** Kembalikan peristiwa nyata mouse. Waktu mouse tidak dapat diproses secara langsung, dan perlu dikonversi * @return */public int getMousey (tombol int) {if (tombol == mouseEvent.button1) {// tombol kiri mouse return inputEvent.button1_mask; } else if (tombol == mouseEvent.button2) {// tombol kanan Return inputEvent.button2_mask; } else if (tombol == mouseEvent.button3) {// scroller return inputevent.button3_mask; } else {return 0; }}} // Layar Penangkakan dan pengirim, di sini Anda perlu mendapatkan impor aliran keluar dari soket java.awt.awtexception; import java.awt.dimension; impor java.awt.rectangle; impor java.awt.robot; impor java.awt.toolkit; impor java.awt; java.io.ByteArrayOutputStream;import java.io.DataOutputStream;import java.io.IOException;import com.sun.image.codec.jpeg.*;/** * Used to send image data* @author Dumb* */public class ImageThread implements Runnable{ DataOutputStream dos = null; // Data Output Stream Public ImageTread (DataOutputStream DOS) {this.dos = dos; } @Override public void run () {coba {robot robot = robot baru (); // Seave seluruh dimensi layar dimensi = toolkit.getDefaultToolKit (). GetScreensize (); /* int width = (int) dimensional.getWidth (); int tinggi = (int) dimensional.getWidth (); Rectangle rec = persegi panjang baru (0,0, lebar, tinggi); */ Persegi panjang rec = persegi panjang baru (dimensi); Gambar buferedImage; byte ImageBytes []; while (true) {image = robot.createScreencapture (rec); ImageBytes = getImageBytes (Image); 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 (); } akhirnya {coba {if (dos! = null) dos.close (); } catch (ioException e) {e.printstacktrace (); } } } /** * Compressed image* @param Pictures that need to be compressed* @return Compressed byte array* @throws IOException * @throws ImageFormatException */ public byte[] getImageBytes(BufferedImage image) throws ImageFormatException, IOException{ ByteArrayOutputStream baos = new BytearrayoutputStream (); // kompres kompresor dan pertama -tama dapat disimpan dalam aliran output byte jpegimageencoder jpegd = jpegcodec.createJpegencoder (BAOS); // kompres iamge jpegd.encode (gambar); // konversi ke byte array return baos.tobytearray (); }} --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- java.io.objectoutputStream; import java.net.socket; impor java.net.unknownhostexception; import javax.swing.imageicon; impor javax.swing.jframe; impor javax.swing.jlabel; impor javax.swing.jpanel; javax.swing.windowconstants;/*** klien* @author dumb**/klien kelas publik {public static void main (string args []) melempar unknownHostException, ioException {socket s = soket baru ("127.0.0.1", 80); DataInputStream dis = new DatalputStream (s.getInputStream ()); ObjectOutputStream oos = ObjectOutputStream baru (s.getoutputStream ()); ClientWindow CW = ClientWindow baru (OOS); byte [] ImageBytes; while (true) {ImageBytes = byte baru [dis.readint ()]; // pertama -tama dapatkan panjang array yang dilewatkan dis. // penyimpanan semua data dalam byte cw.repainimage (ImageBytes); }}}/*** Formulir klien* @author dumb**/class clientWindow memperluas jframe {private ObjectOutputStream OOS; label jlabel pribadi; // Tulis ulang metode latar belakang gambar public void repainImage (byte [] ImageBytes) {label.seticon (gambar baru (ImageBytes)); this.repaint (); } clientWindow publik (ObjectOutputStream OOS) {this.oos = oos; this.settitle ("Program Remote Control"); label = jLabel baru (); Jpanel p = jpanel baru (); p.add (label); Jscrollpane scroll = jscrollpane baru (p); // Tambahkan scrollbar ke panel p this.add (gulir); 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(new MouseListener() { @Override public void mouseReleased(MouseEvent e) { sendEvent(e); } @Override public void mousePressed(MouseEvent e) { sendEvent(e); } @Override public void mouseClicked(MouseEvent e) { sendEvent(e); } @Override public void MouseEntered (MouseEvent E) {// TODO Metode yang dihasilkan otomatis Stub} @Override public void mouseExited (mouseEvent e) {// todo Metode yang dihasilkan otomatis Stub}}); } public void sendEvent (event inputEvent) {coba {oos.writeObject (event); } catch (ioException e) {e.printstacktrace (); }}}Kode contoh di atas untuk implementasi Java dari Remote Desktop adalah semua konten yang telah saya bagikan dengan Anda. Saya harap Anda dapat memberi Anda referensi dan saya harap Anda dapat mendukung wulin.com lebih lanjut.