java实现远程系统控制_java实现电脑远程控制完整源代码
时间: 2023-07-26 08:03:30 浏览: 43
实现电脑远程控制有很多种方法和技术,这里介绍一种基于Java语言的实现方式。具体实现可以分为两个部分,分别是客户端和服务器端。
服务器端代码:
```java
import java.awt.AWTException;
import java.awt.MouseInfo;
import java.awt.Point;
import java.awt.Robot;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
public class RemoteServer {
private final int port = 8888;
private ServerSocket serverSocket;
private Socket socket;
private BufferedReader reader;
private Robot robot;
public RemoteServer() {
try {
serverSocket = new ServerSocket(port);
System.out.println("等待客户端连接...");
socket = serverSocket.accept();
System.out.println("客户端已连接!");
reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
robot = new Robot();
robot.setAutoDelay(50);
robot.setAutoWaitForIdle(true);
} catch (IOException | AWTException e) {
e.printStackTrace();
}
}
public void start() {
String line;
try {
while ((line = reader.readLine()) != null) {
if (line.equals("exit")) {
break;
}
if (line.startsWith("move:")) {
String[] move = line.replace("move:", "").split(",");
int x = Integer.parseInt(move[0]);
int y = Integer.parseInt(move[1]);
Point point = MouseInfo.getPointerInfo().getLocation();
int newX = (int) point.getX() + x;
int newY = (int) point.getY() + y;
robot.mouseMove(newX, newY);
} else if (line.startsWith("click:")) {
int button = Integer.parseInt(line.replace("click:", ""));
if (button == 1) {
robot.mousePress(InputEvent.BUTTON1_DOWN_MASK);
robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);
} else if (button == 2) {
robot.mousePress(InputEvent.BUTTON2_DOWN_MASK);
robot.mouseRelease(InputEvent.BUTTON2_DOWN_MASK);
} else if (button == 3) {
robot.mousePress(InputEvent.BUTTON3_DOWN_MASK);
robot.mouseRelease(InputEvent.BUTTON3_DOWN_MASK);
}
} else if (line.startsWith("key:")) {
int keycode = Integer.parseInt(line.replace("key:", ""));
robot.keyPress(keycode);
robot.keyRelease(keycode);
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
RemoteServer server = new RemoteServer();
server.start();
}
}
```
客户端代码:
```java
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class RemoteClient extends JFrame {
private final String host = "127.0.0.1";
private final int port = 8888;
private Socket socket;
private PrintWriter writer;
private Robot robot;
public RemoteClient() {
setTitle("远程控制");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setPreferredSize(new Dimension(300, 200));
JPanel panel = new JPanel();
getContentPane().add(panel, BorderLayout.CENTER);
panel.setLayout(null);
JButton button = new JButton("左键点击");
button.setBounds(20, 20, 100, 30);
button.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
writer.println("click:1");
writer.flush();
}
});
panel.add(button);
JButton button_1 = new JButton("右键点击");
button_1.setBounds(150, 20, 100, 30);
button_1.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
writer.println("click:3");
writer.flush();
}
});
panel.add(button_1);
JButton button_2 = new JButton("按下键盘A键");
button_2.setBounds(20, 70, 100, 30);
button_2.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
writer.println("key:" + KeyEvent.VK_A);
writer.flush();
}
});
panel.add(button_2);
JButton button_3 = new JButton("移动鼠标");
button_3.setBounds(150, 70, 100, 30);
button_3.addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e) {
new Thread(() -> {
while (e.getButton() == MouseEvent.BUTTON1) {
int x = e.getX() - 150;
int y = e.getY() - 100;
writer.println("move:" + x + "," + y);
writer.flush();
try {
Thread.sleep(50);
} catch (InterruptedException e1) {
e1.printStackTrace();
}
}
}).start();
}
@Override
public void mouseReleased(MouseEvent e) {
writer.println("move:" + 0 + "," + 0);
writer.flush();
}
});
panel.add(button_3);
pack();
setLocationRelativeTo(null);
setVisible(true);
try {
socket = new Socket(host, port);
writer = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()));
robot = new Robot();
} catch (IOException | java.awt.AWTException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
RemoteClient client = new RemoteClient();
}
}
```
以上代码实现了一个简单的远程控制程序,可以通过点击按钮来触发鼠标点击、键盘按键和鼠标移动等操作。需要注意的是,这个程序只是一个简单的演示,实际应用中还需要考虑网络传输的稳定性和安全性等问题。