リモートデスクトップを実装するJavaインスタンスコード
コントロール側はマウスイベントをサーバー側に渡します
サーバーでマウスイベントを受信した後、クライアントに送信します
クライアントがマウスイベントを取得した後、ロボットクラスを介して完了することができ、スクリーンショットを使用して画像をサーバーに送信し、サーバーはコントロール端末に送信します。
単純化した後
//最初にロボットクラスの簡単な使用を紹介しますjava.awt.awtexception;インポートjava.awt.robot; import java.awt.event.inputevent;/** * rebot * @author dumb * */public class robottest {public static void main [] throws awtexception {robot r = awtexception R.MouseMove(300、500); // Mouse Move R.MousePress(inputevent.button1_mask); // Mouse Press R.MouserElease(inputevent.button1_mask); //マウスリリースr.keypress((int) 'a'); // Makeboard Press(int) 'a'は、Aをキーボードの対応するキーに変換することを意味しますR.Keyrelease((int) 'a'); //メイクボードリリース}} //スクリーンクロールインポートjava.awt.awtexception;インポートjava.awt.rectangle;インポートjava.awt.robot;インポートjava.awt.image.bufferedimage;インポートjavax.swing.swing.imageicon; Import javax.javax.swing.javax.swing.swinging.swing.swingin javax.swing.windowconstants;/*** crawl local desktop image* @author dumb**/public class screentest {public static void main(string [] args)throws awtexception、arturtedexception {robot robot = new robot = new robot(); jframe jframe = new JFrame(); jframe.setsize(1200、700); jlabel label = new Jlabel(); jframe.add(label); // 4つのパラメーターxy幅の高さjframe.setVisible(true); jframe.setDefaultCloseoperation(windowconstants.exit_on_close); //(true){bufferedimage image = robot.createscreencapture(new Rectangle(0,0,1366,768)); // Seave Screen Label.seticon(new ImageIcon(画像)); thread.sleep(50); }}} //リモートコントロールの原則の説明
//それをサーバーの端とクライアントの端に分割します。
//元々、サーバー側は転送としてのみ使用されますが、デモとして転送を書き込むことはありません。
//つまり、クライアント側はサーバー側eを制御します
/**
*私がここで使用しているのは、サーバー側から送信された画面を受信した後、クライアント側、つまりコントロール側にマウスイベントを送信することです。
*次に、ロボットを使用して処理します
*送信方法は、ソケット+IOで処理できます
*スクリーンキャプチャと画像圧縮は、ロボットの画面キャプチャ関数とJDK独自の画像エンコーダーを採用してバイト配列に変換します
*サーバーに送信した後、ロボットはIO+ソケットを介してオブジェクトオブジェクトを直接取得し、inputEventにキャストできます(KeyEventとMouseEventの両方が継承されます)
*イベントタイプを審査することにより、個別に処理できます。ここでは、サーバーに2つのスレッドが必要です。1つはスクリーニングしてクライアントに送信すること、もう1つはクライアントに耳を傾けることです。
*パスされたイベント
*/
//以下は特定の実装コードです
//サーバーメインプロセスはjava.awt.awtexception; Import java.awt.event; Import java.awt.robot; Import java.awt.event.inputevent; Import java.awt.eevent; Import java.awt.event.mousevent; import java.datautputtream; java.io.objectinputStream;インポートjava.net.serversocket;インポート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 Procession ImageThread Imagethread = new Imagethread(dos)によってリンクされた出力ストリームを転送します。新しいスレッド(imagethread).start();新しいスレッド(new EventThread(new objectInputStream(socket.getInputStream()))。start(); }}/***受信したマウスイベントまたはキーボードイベントを処理するために使用されます*/class eventthread runnable {private objectinputStream ois;プライベートロボットロボット。 public EventThread(objectInputStream ois){this.ois = ois; } @Override public void run(){try {robot = new robot(); while(true){inputevent event =(inputedEvent)ois.readObject(); //クライアントによって渡されたオブジェクトオブジェクトはオブジェクトActionEvent(event); //ハンドルイベント}} catch(awtexction e){e.printstacktrace(); } catch(classNotFoundException e){e.printstacktrace(); } catch(ioexception e){e.printstacktrace(); }最後に{try {ois.close(); } catch(ioexception e){e.printstacktrace(); }}} / ***イベント処理、イベントタイプを判断し、ロボットクラスで実行するために使用される* @param event* / public void actionEvent(inputevent event){system.out.println(event); if(event instanceof 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(event instanceof mousevent){mousevent e =(mousevent)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()); // mouse drag}}}/***マウスの実際のイベントを返します。マウス時間を直接処理することはできず、変換する必要があります * @return */public int getMouseKey(int button){if(button == mouseEvent.button1){//左マウスボタンreturn inputevent.button1_mask; } else if(button == mouseevent.button2){//右マウスボタンreturn inputevent.button2_mask; } else if(button == mouseevent.button3){// scroller return inputevent.button3_mask; } else {return 0; }}}} //スクリーンキャプターと送信者、ここでは、ソケットJava.awt.awtexception; Import java.awt.dimension; Import java.awt.Rectange; Import java.awt.toolkit; Import Java.awt.image.image.image.image.imagemage java.io.bytearrayoutputStream; Import java.io.dataoutputStream; Import java.io.ioexception; Import com.sun.jpeg。 //データ出力ストリームpublic imagethread(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 = new Rectangle(dimension); BufferedImage画像;バイトImageBytes []; while(true){image = robot.createscreencapture(rec); ImageBytes = getImageBytes(画像); 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(arturnedexception e){e.printstacktrace(); }最後に{try {if(dos!= null)dos.close(); } catch(ioexception e){e.printstacktrace(); }}} / ***圧縮画像*圧縮する必要がある@paramの写真* @return圧縮バイトアレイ* @throws ioexception* @throws imageformatexception* / public byte [] getImageBytes(bufferedimage画像)ImageFormatexcection、ioexception {bytearrayOutputtream baos = baos = baos = new baos = new baos = nev //コンプレッサーを圧縮し、最初にバイト出力ストリームに保存しますjpegimageencoder jpegd = jpegcodec.createjpegencoder(baos); // Imge jpegd.encode(image); //バイトアレイに変換されますbaos.tobytearray(); }}------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- java.io.objectutputStream; Import java.net.socket; import java.net.unknownhostexception; Import javax.swing.imageicon; Import javax.swing.jframe; Import javax.swing.jlabel; Import javax.swing.jpanel; javax.swing.windowconstants;/*** client* @author dumb**/public class {public static void main(string args [])throws nownowedhostexception、ioexception {socket s = new socket( "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()]; //最初に渡された配列の長さを取得します(imagebytes); // BYTE CW.RepainImage(ImageBytes)のすべてのデータを保存します。 }}}/***クライアントフォーム* @author dumb**/class clientWindow拡張jframe {private objectOutputStream 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); // scrollbarをpパネル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-enerated method method stub} @override public void keyreleased(keyevent e){sendevent(e);} @override public void epeint(e); label.addmouseListener(new MouseListener(){@Override public void mouseReed(mousevent e){sendevent(e);} @override public void mousepressed(mouseevent e){sendevent(e);} @Override public void boid(e) @sendevent(e); void mouseentered(MouseEvent e){// todo auto-enerated method stub} @override public void mouseExited(mouseEvent e){// todo auto-fenerated method method stub}}); } public void sendevent(inputevent event){try {oos.writeobject(event); } catch(ioexception e){e.printstacktrace(); }}}リモートデスクトップのJava実装の上記の例コードは、私があなたと共有したすべてのコンテンツです。参照を提供できることを願っています。wulin.comをもっとサポートできることを願っています。