(4)java开发远程协助

来源:互联网 发布:淘宝差评后还能追评吗 编辑:程序博客网 时间:2024/06/09 08:49

客户端:

Client

package com.xdy.local;import java.io.DataInputStream;import java.io.IOException;import java.io.ObjectOutputStream;import java.net.Socket;import java.net.UnknownHostException;public class Client {public static void main(String[] args) throws UnknownHostException, IOException {Socket socket = new Socket("127.0.0.1", 8888);ObjectOutputStream objectOutputStream = new ObjectOutputStream(socket.getOutputStream());ClientWindow clientWindow = new ClientWindow(objectOutputStream);System.out.println("连接成功");DataInputStream dataInputStream = new DataInputStream(socket.getInputStream());byte[] img ;while(true){img = new byte[dataInputStream.readInt()];dataInputStream.readFully(img);clientWindow.repaintImg(img);}}}

ClientWindow

package com.xdy.local;import java.awt.event.InputEvent;import java.awt.event.KeyEvent;import java.awt.event.KeyListener;import java.awt.event.MouseEvent;import java.awt.event.MouseListener;import java.awt.event.MouseMotionListener;import java.io.DataOutputStream;import java.io.IOException;import java.io.ObjectOutputStream;import javax.swing.ImageIcon;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JPanel;import javax.swing.JScrollPane;/** * 控制端窗体类 *  * @author asus *  */public class ClientWindow extends JFrame {private JLabel background;// 背景标签private ObjectOutputStream objectOutputStream;public ClientWindow(ObjectOutputStream objectOutputStream) {this.objectOutputStream = objectOutputStream;this.setTitle("远程协助");this.setSize(1024, 668);// 设置居中this.setLocationRelativeTo(null);background = new JLabel();// 容器JPanel pane = new JPanel();pane.add(background);// 滚动条JScrollPane jScrollPane = new JScrollPane(pane);this.add(jScrollPane);//键盘事件this.addKeyListener(new KeyListener() {public void keyTyped(KeyEvent e) {}public void keyReleased(KeyEvent e) {sendEvent(e);}public void keyPressed(KeyEvent e) {sendEvent(e);}});//鼠标操作监听background.addMouseListener(new MouseListener() {public void mouseReleased(MouseEvent e) {sendEvent(e);}public void mousePressed(MouseEvent e) {sendEvent(e);}public void mouseExited(MouseEvent e) {}public void mouseEntered(MouseEvent e) {}public void mouseClicked(MouseEvent e) {}});//鼠标移动监听background.addMouseMotionListener(new MouseMotionListener() {public void mouseMoved(MouseEvent e) {sendEvent(e);}public void mouseDragged(MouseEvent e) {sendEvent(e);}});// 关闭退出进程this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setVisible(true);}public void repaintImg(byte[] img) {background.setIcon(new ImageIcon(img));this.repaint();}public void sendEvent(InputEvent e){try {objectOutputStream.writeObject(e);objectOutputStream.flush();} catch (IOException e1) {e1.printStackTrace();}}}

服务端

Server.java

package com.xdy.remote;import java.io.DataOutputStream;import java.io.IOException;import java.io.ObjectInputStream;import java.net.ServerSocket;import java.net.Socket;public class Server {public static void main(String[] args) throws IOException {ServerSocket serverSocket = new ServerSocket(8888);System.out.println("服务器在8888端口监听^_^");;Socket socket = serverSocket.accept();System.out.println("对接成功^_^---IP地址:【"+socket.getInetAddress()+"】");;DataOutputStream dataOutputStream = new DataOutputStream(socket.getOutputStream());ImageThread imageThread = new ImageThread(dataOutputStream);imageThread.start();ObjectInputStream objectInputStream = new ObjectInputStream(socket.getInputStream());EventThread eventThread = new EventThread(objectInputStream);eventThread.start();}}

EventThread.java

package com.xdy.remote;import java.awt.AWTException;import java.awt.Event;import java.awt.Robot;import java.awt.event.InputEvent;import java.awt.event.KeyEvent;import java.awt.event.MouseEvent;import java.io.ObjectInputStream;/** * 读取事件 * @author asus * */public class EventThread extends Thread {private ObjectInputStream objectInputStream;private Robot robot;public EventThread(ObjectInputStream objectInputStream) {super();this.objectInputStream = objectInputStream;}public void run(){try {robot = new Robot();InputEvent inputEvent;while(true){inputEvent = (InputEvent) objectInputStream.readObject();actionEvent(inputEvent);}} catch (Exception e) {e.printStackTrace();}}//键盘事件public void actionEvent(InputEvent e){if(e instanceof KeyEvent){KeyEvent keyEvent = (KeyEvent) e;int type = keyEvent.getID();if(type == Event.KEY_PRESS){robot.keyPress(keyEvent.getKeyCode());}else if (type == Event.KEY_RELEASE) {robot.keyRelease(keyEvent.getKeyCode());}}else if(e instanceof MouseEvent){MouseEvent mouseEvent = (MouseEvent) e;int type = mouseEvent.getID();if(type==Event.MOUSE_DOWN){robot.mousePress(getMouseButton(mouseEvent.getButton()));}else if (type == Event.MOUSE_UP) {robot.mouseRelease(getMouseButton(mouseEvent.getButton()));}else if (type == Event.MOUSE_MOVE) {robot.mouseMove(mouseEvent.getX(), mouseEvent.getY());}else if (type == Event.MOUSE_DRAG) {robot.mousePress(getMouseButton(mouseEvent.getButton()));}}}public int getMouseButton(int button){if(button == MouseEvent.BUTTON1){return InputEvent.BUTTON1_MASK;}else if (button == MouseEvent.BUTTON2) {return InputEvent.BUTTON2_MASK;}else if (button == MouseEvent.BUTTON3) {return InputEvent.BUTTON3_MASK;}else{return -1;}}}

ImageThread.java

package com.xdy.remote;import java.awt.AWTException;import java.awt.Dimension;import java.awt.Rectangle;import java.awt.Robot;import java.awt.Toolkit;import java.awt.image.BufferedImage;import java.io.ByteArrayOutputStream;import java.io.DataOutputStream;import java.io.IOException;import com.sun.image.codec.jpeg.*;/** * 本地图片传输线程 *  * @author asus *  */public class ImageThread extends Thread {private DataOutputStream dataOutputStream;public ImageThread(DataOutputStream dataOutputStream) {super();this.dataOutputStream = dataOutputStream;}@Overridepublic void run() {try {Robot robot = new Robot();Toolkit toolkit = Toolkit.getDefaultToolkit();Dimension dimension = toolkit.getScreenSize();//获取屏幕尺寸分辨率Rectangle rectangle = new Rectangle(dimension);BufferedImage bufferedImage;byte[] imgBytes;while(true){bufferedImage = robot.createScreenCapture(rectangle);imgBytes = getBytesImage(bufferedImage);//传递图片数组大小dataOutputStream.writeInt(imgBytes.length);//传递图片dataOutputStream.write(imgBytes);//手动清空缓存空间dataOutputStream.flush();Thread.sleep(80);}} catch (Exception e) {e.printStackTrace();}}/** * 将缓存中的图片转换成二进制数组 * @param bufferedImage * @return * @throws ImageFormatException * @throws IOException */private byte[] getBytesImage(BufferedImage bufferedImage) throws ImageFormatException, IOException{ByteArrayOutputStream baos = new ByteArrayOutputStream();JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(baos);encoder.encode(bufferedImage);return baos.toByteArray();}}


0 0
原创粉丝点击