Код экземпляра Java для реализации удаленного рабочего стола
Сторона управления передает событие мыши на стороне сервера
После получения события мыши на сервере он передает его клиенту
После того, как клиент получает событие мыши, его можно завершить через класс роботов, и экранинг будет сделан для отправки изображения на сервер, а сервер отправит его на терминал управления.
После того, как я упростил это
// Сначала представьте простое использование класса робота импорта Java.awt.awtexception; import java.awt.robot; импорт java.awt.event.inputevent;/** * Использовать робот * @author roote * */public robottest {public static void main (string [] args) Throws awtexception {robot r = robot (); R.MouseMove (300, 500); // Мышь перемещение r.mousepress (inputevent.button1_mask); // Mouse Press R.mouserelease (inputevent.button1_mask); // Выпуск мыши R.KeyPress ((int) 'a'); // Makeboard нажимать (int) 'a' означает преобразование A в соответствующую клавишу клавиатуры R.keyRelease ((int) 'a'); // Makeboard Release}} // Импорт экрана java.awt.awtexception; import java.awt.rectangle; импорт java.awt.robot; импорт java.awt.image.bufferedimage; импорт javax.swing.imageicon; импорт javax.wing.jframe; импорт; javax.swing.windowconstants;/*** Crawl Local Desktop Image* @author Dumb**/public Class Screentest {public static void main (string [] args) бросает awtexception, прерывание {robot robot = new Robot (); Jframe jframe = new jframe (); jframe.setsize (1200, 700); Jlabel label = new jlabel (); jframe.add (этикетка); // четыре параметра xy ширина высота jframe.setvisible (true); jframe.setDefaultCloseoPeration (windowsConstants.exit_on_close); // Создание динамического перехвата мертвого цикла В то время как (true) {BufferedImage Image = robot.createCreencapture (новый прямоугольник (0,0,1366,768)); // seave the Screen Label.seticon (New Imageicon (Image)); Thread.sleep (50); }}} // Объяснение принципа дистанционного управления
// Разделите его на конец сервера и конец клиента.
// Первоначально сторона сервера используется только в качестве пересылки, но она не пишет пересылку в качестве демонстрации.
// то есть на стороне клиента управляет стороной сервера E
/**
* Я использую здесь, чтобы отправить событие мыши на стороне клиента, то есть сторона управления, после получения экрана, отправленного на стороне сервера,
* Затем используйте робот для его обработки
* Метод передачи может быть обработан с помощью сокета+IO
* Условие экрана и сжатие изображений применяет функцию захвата экрана робота и собственный энкодер изображения JDK, чтобы преобразовать его в массив байтов
* После отправки его на сервер, робот может напрямую получить объект объекта через IO+сокет и разыграть в InputeVent (как KeyEvent, так и Mouseevent унаследованы)
* Судя по типу события, вы можете обработать его отдельно. Здесь на сервере требуются два потока, один из них - экран и отправка клиенту, а другая - прослушать клиента.
* Прошло события
*/
// Ниже приведено конкретный код реализации
// Основной серверный процесс импорт java.awt.awtexception; import java.awt.event; import java.awt.robot; import java.awt.event.inputevent; import java.awt.event.keyevent; importaUtexeam; java.io.objectInputStream; import 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 («Сервер начался нормально»); Socket Socket = server.accept (); // ожидание получения запроса, блокируя метод System.out.println («Существует клиентское соединение»); DataOutputStream dos = new DataOutputStream (socket.getOutputStream ()); // Передача выходных потоков, связанных клиентскими и серверами, обработка ImageThread ReadureDread = new ImagetRead (DOS); новая поток (ImageThread) .start (); Новый поток (New EventThread (новый ObjectInputStream (socket.getInputStream ()))). start (); }}/*** Используется для обработки полученных событий мыши или событий клавиатуры*/class EventThread реализует runnable {private objectStream OIS; Частный робот -робот; public EventThread (ObjectInputStream OIS) {this.ois = ois; } @Override public void run () {try {robot = new Robot (); while (true) {inputevent event = (inputevent) ois.readobject (); // Импортировать, что объект, переданный клиентом, является объектом Actionevent (event); // Обработка события}} Catch (awtexception e) {e.printstacktrace (); } catch (classnotfoundexception e) {e.printstacktrace (); } catch (ioException e) {e.printstackTrace (); } наконец {try {ois.close (); } catch (ioException e) {e.printstackTrace (); }}} / **. if (exantef extanceof keyevent) {keyevent e = (keyevent) event; int type = e.getid (); // Получить тип события if (type == event.key_press) {robot.keypress (e.getKeyCode ()); } else if (type == event.key_release) {robot.keyrelease (e.getKeyCode ()); }} else if (экземпляр события mouseevent) {mouseevent e = (mouseevent) event; int type = 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 (type)); } else if (type == event.mouse_drag) {robot.mouseMove (e.getx (), e.gety ()); // Мышь -перетаскивание}}}}/*** Возвращает реальное событие мыши. Время мыши не может быть обработано напрямую, и его необходимо преобразовать * @return */public int getmousekey (int button) {if (button == mouseevent.button1) {// левая кнопка мыши возвращается inputevent.button1_mask; } else if (button == mouseevent.button2) {// правая кнопка мыши вернуть inputevent.button2_mask; } else if (button == mouseevent.button3) {// scroller return inputevent.button3_mask; } else {return 0; }}} // каппер и отправитель экрана, здесь вам нужно получить импорт потока Zocket java.awt.awtexception; импорт java.awt.dimension; импорт java.awt.rectangle; импорт java.awt.robot; импорт java.awt.toolkit; import java.Image.Buffered; java.io.bytearrayoutputstream; import java.io.dataoutputstream; импортировать java.io.ioexception; import com.sun.image.codec.jpeg.*;/*** используется для отправки изображений* @author dumb**/public gimbredread uplessable {DataOutputStream dos = null; // Выходные данные потоки public ImagetRead (DataOutputStream DOS) {this.dos = dos; } @Override public void run () {try {robot robot = new Robot (); // seave Весь размерный размер экрана = toolkit.getDefaulttoolkit (). GetScreensize (); /* int width = (int) dimensional.getWidth (); int height = (int) dimensional.getwidth (); Прямоугольник rec = новый прямоугольник (0,0, ширина, высота); */ Rectangle rec = новый прямоугольник (размер); BuffereMage Image; Byte ImageBytes []; while (true) {image = robot.createscreencapture (rec); ImageBytes = GetImageBytes (Image); dos.writeint (imagebytes.length); Dos.Write (ImageBytes); dos.flush (); Thread.sleep (50); // поток сна}} catch (awtexception e) {e.printstacktrace (); } catch (imageformatexception e) {e.printstacktrace (); } catch (ioException e) {e.printstackTrace (); } catch (прерванное искусство e) {e.printstacktrace (); } наконец {try {if (dos! = null) dos.close (); } catch (ioException e) {e.printstackTrace (); }}} / *** Сжатое изображение* @param картинки, которые необходимо сжать* @return сжатый байт -массив* @throhs ioexception* @throws imageformatexception* / public byte [] getImagebytes (bufferedimage image) thriptormatexception, ioException {byTearRayoutputStream baOs = newAemaRexception, ioException {byTearRayoutputStream baoS = neweAmaUtStreameStreAtStreamAteMAGE = newAeAMATEMATEXCECTEREXCEPTION; // Сжатие компрессора и сначала получите его в байтовом выходном потоке jpegimageencoder jpegd = jpegcodec.createjpegenceder (baos); // Сжатие IAMGE JPEGD.ENCODE (Image); // преобразовать в байт -массив return baos.tobytearray (); }} ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- java.io.objectOutputStream; импорт java.net.socket; import java.net.unknownhostexception; import javax.swing.imageicon; импорт javax.swing.jframe; импорт javax.swing.jlabel; импорт javax.swing.jpanel; import javax.swing.jscrollpane; javax.swing.windowconstants;/*** client* @author Dumb**/public Class client {public static void main (String args []) Throws Unknownhostexception, ioException {сокет s = новая сокет ("127.0.0.1", 80); DataInputStream dis = new DataInputStream (S.GetInputStream ()); ObjectOutputStream oos = new objectOutputStream (s.getOutputStream ()); ClientWindow CW = New ClientWindow (OOS); Byte [] ImageBytes; while (true) {imagebytes = new Byte [dis.readint ()]; // сначала получить пропущенную длину массива Dis.RectiveLy (ImageBytes); // хранение все данные в байтовом cw.repainimage (imagebytes); }}}/*** Клиентская форма* @author dumb**/class clientwindow extends jframe {private objoyoutputstream oos; частный лейбл Jlabel; // Переписать метод фонового изображения public void repainimage (byte [] imagebytes) {label.seticon (new imageicon (imagebytes)); this.repaint (); } public clientWindow (objectOutputStream oos) {this.OOS = oos; this.setTitle («Программа дистанционного управления»); label = new jlabel (); Jpanel p = new jpanel (); P.Add (этикетка); JScrollpane scroll = new jscrollpane (p); // Добавить прокрутку в панель p this.add (scroll); это. setize (1024,768); this.setDefaultCloseoPeration (windowsConstants.exit_on_close); this.setvisible (true); this.addkeyListener (new KeyListener () {@Override public void keytyped (keyEvent e) {// todo автоматически сгенерированный метод} @override public void keyreled (keyevent e) {sendevent (e);} @override public void-probessed (KeyEvent e) {Sendevent (e); Label.AddMouseListener (new MouseListener () {@Override public void mouserealeedEleade (mouseevent e) {sendevent (e);} @override public void mousepressed (mouseevent e) {Sendevent (e);} @Override publicOver (mouseevent e) {Sendevent @usevent @sendevent @sendevent @sendevent @sendevent) void mouseEnted (mouseevent e) {// todo автоматически сгенерированный метод} @override public void mouseexited (mouseevent e) {// todo Автогенерированный метод stub}}); } public void sendevent (inputevent event) {try {oos.writeObject (event); } catch (ioException e) {e.printstackTrace (); }}}Приведенный выше пример кода для реализации Java удаленного рабочего стола - это весь контент, которым я поделился с вами. Я надеюсь, что вы можете дать вам ссылку, и я надеюсь, что вы сможете поддержать Wulin.com больше.