java里面的Robot类可以完成截图的功能,借助于这点,我尝试着做了一个简陋的桌面监控程序,运行了下,感觉速度还可以,还有很大的优化空间的,比如用udp协议取代tcp等。代码也写的不是很优雅,只在娱乐了。
实现原理其实很简单,在被监视者的机器上,运行一个线程,每隔一段时间就自动截图,并把截图压缩发送到指定的机器上;在监视机器上,也是运行一个线程,接收发送过来的图片包,解压,并绘制到当前的窗口上。这样就基本完成了。
public class Server extends Thread {
private Dimension screenSize;
private Rectangle rectangle;
private Robot robot;
public Server() {
screenSize = Toolkit.getDefaultToolkit().getScreenSize();
rectangle = new Rectangle(screenSize);// 可以指定捕获屏幕区域
try {
robot = new Robot();
} catch (Exception e) {
e.printStackTrace();
System.out.println(e);
}
}
public void run() {
ZipOutputStream os = null;
Socket socket = null;
while (true) {
try {
socket = new Socket("192.168.1.100", 5001);// 连接远程IP
BufferedImage image = robot.createScreenCapture(rectangle);// 捕获制定屏幕矩形区域
os = new ZipOutputStream(socket.getOutputStream());// 加入压缩流
// os = new ZipOutputStream(new FileOutputStream("C:/1.zip"));
os.setLevel(9);
os.putNextEntry(new ZipEntry("test.jpg"));
JPEGCodec.createJPEGEncoder(os).encode(image);// 图像编码成JPEG
os.close();
Thread.sleep(50);// 每秒20帧
} catch (Exception e) {
e.printStackTrace();
} finally {
if (os != null) {
try {
os.close();
} catch (Exception ioe) {
}
}
if (socket != null) {
try {
socket.close();
} catch (IOException e) {
}
}
}
}
}
public static void main(String[] args) {
new Server().start();
}
}
public class Client extends JFrame {
private static final long serialVersionUID = 1L;
Dimension screenSize;
public Client() {
super();
screenSize = Toolkit.getDefaultToolkit().getScreenSize();
this.setSize(800, 640);
Screen p = new Screen();
Container c = this.getContentPane();
c.setLayout(new BorderLayout());
c.add(p, SwingConstants.CENTER);
new Thread(p).start();
SwingUtilities.invokeLater(new Runnable(){
public void run() {
setVisible(true);
}});
}
public static void main(String[] args) {
new Client();
}
class Screen extends JPanel implements Runnable {
private static final long serialVersionUID = 1L;
private Image cimage;
public void run() {
ServerSocket ss = null;
try {
ss = new ServerSocket(5001);// 探听5001端口的连接
while (true) {
Socket s = null;
try {
s = ss.accept();
ZipInputStream zis = new ZipInputStream(s
.getInputStream());
zis.getNextEntry();
cimage = ImageIO.read(zis);// 把ZIP流转换为图片
repaint();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (s != null) {
try {
s.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
} catch (Exception e) {
} finally {
if (ss != null) {
try {
ss.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
public Screen() {
super();
this.setLayout(null);
}
public void paint(Graphics g) {
super.paint(g);
Graphics2D g2 = (Graphics2D) g;
g2.drawImage(cimage, 0, 0, null);
}
}
}
分享到:
相关推荐
支持远程桌面监视和控制,可以对远程进行控制,对方可以拒绝控制!
本文档的主要内容是基于Java的远程桌面监控源代码
远程桌面监控系统可以让本地计算机通过局域网访问不同的远程计算机,并对其进行操作。维护人员可以通过本系统实时地监控联网计算机的运行情况、根据需要随时改变联网计算机系统设置,对出现故障的计算机能够通过网络...
该系统适用人群为需要进行远程设备监控和控制的企业、学校、政府等单位,系统的主要使用场景包括:远程设备实时监控和控制、网络视频监控和远程桌面管理等多种场景。该系统的主要目标是为企业、学校、政府等单位提供...
1.不需要安装任何插件可以在网页上实时浏览远程桌面信息; 2.基于WebRtc技术,超低延时; 3.不是简单,直接双击就可以运行,且带有详细的用户手册; 4.适用于任何想实时查看远程桌面的场景;
Java实现远程桌面控制,屏幕查看,键盘和鼠标控制,可直接运行
基于Java的远程桌面监控源代码.rar
基于JAVA CS远程监控系统软件的实现(源代码+论文)
软著V1基于Java的远程桌面监控源代码交底.doc
基于JAVA CS远程监控系统软件的实现(源代码+WORD论文文档论文) 基于JAVA C/S远程监控系统软件的实现 摘 要 近年来,网络技术的不断发展,为远程监控技术的发展创造了条件。远程监控系统软件越来越受到人们的重视,...
jpeg在jdk1.6后无法识别 解决方法 1.用1.6的jdk 2.直接在preferences---》java---》compile---》errors/wa'rnining----》deprecate and restritesd api----》改成warning
本人自己写的Java远程监控,超简单,代码清晰易懂,使用UDP不可靠连接,cpu占用少,不过只有远程桌面监控,目前尚不能远程操作。。。纯Java代码无扩展jar包。 另免费附送基于JMF的远程摄像头监控,xp可用win7有些...
远程桌面协议:使用基于TCP/IP的远程桌面协议,实现远程监控和控制功能。 图像压缩与传输:对监控画面进行图像压缩,减少网络带宽占用,提高传输效率。 远程操作实现:利用Java的网络编程技术,实现远程关机、重启...
关于java实时远程监控设计的论文,对关注远程桌面开发的朋友很有帮助
。。。
。。。
基于JAVA的CS远程监控系统软件可以实现对远程计算机的监控和控制,其主要功能包括: 远程监控:通过该软件,可以实时监控远程计算机的屏幕、键盘和鼠标操作等。 远程控制:通过该软件,可以对远程计算机进行远程...
用java写的远程屏幕监控程序,用Robot实现,截取远程桌面图片,通过socket发送到监控端!!!