视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
利用java实现一个简单的远程监控程序
2025-09-24 18:24:28 责编:小OO
文档
利用java实现一个简单的远程监控程序

一般的远程监控软件都是用c或者c++等语言开发的,而使用java如何来实现相同的功能呢。

首先我们先介绍一下一个简单的远程监控程序的实现原理。

功能一,远程屏幕监视

(1) 必须要有监控端与被监控端,而且程序保持启动。

(2) 被监控端获取本机的屏幕截屏发图给监控端。

(3) 监控端在本地窗口中显示被监控端发送过来的图像。

(4) (2)(3)步骤重复执行,这时在监控端即可实时监视到被监控端的桌面操作了。

功能二,远程控制

(1) 必须要有监控端与被监控端,而且程序保持启动。

(2) 在监控端监视窗体上执行鼠标点击事件。

(3) 记录步骤 (2)中的鼠标点击的坐标,及键值发送到被监控端。

(4) 被监控接受鼠标坐标,及键值,然后再本地屏幕上模拟同样的点击动作。

OK,现在看下具体的java与语言是如何实现上述功能的。

使用java语言要实现截屏的功能就要依靠java类库中的一个有趣的类

java.awt.Robot类【俗称Java机器人】了

功能一,远程屏幕监视

//『客户端』抓取屏幕快照GuiCamera.java

Java代码 

1BufferedImage screenshot =   

2        (new Robot()).createScreenCapture(   

3                new Rectangle(0, 0, (int) size.getWidth(),   

4                              (int) size.getHeight()));   

//『客户端』发送快照 SendThread.java

Java代码 

5image=gc.snapShot();   

6  //保存为临时文件  

7  File file=new

8  FileOutputStream fileout=new FileOutputStream(file);   

9  ImageIO.write(image,"png",fileout);   

10  fileout.close();   

11     

12  //读取图像  

13  FileInputStream fileIn=new FileInputStream(file);   

14  int len=(int)file.length();   

15  

16 //建立字节数组  

17  byte[] buf=new byte[len];   

18  fileIn.read(buf,0,len);   

19  

20  //发送  

21  out.write(buf,0,len);   

22  out.flush();   

23     

24  //间隔500毫秒  

25  Thread.sleep(500);   

//『监控端』接受图像,Snap.java

Java代码 

26public void run() {   

27while (flag) {   

28                   byte[] buf = new byte[102400];   

29                   try {   

30  

31                       imgStream = new BufferedInputStream(   

32                               socket.getInputStream());   

33                       imgStream.read(buf);   

34                       ImageIcon icon = new ImageIcon(Toolkit.   

35                               getDefaultToolkit().   

36                               createImage(buf));   

37                       lab.setIcon(icon);   

38  

39                       File file = new

40                       FileOutputStream fileOut = new FileOutputStream(file);   

41                       fileOut.write(buf);   

42                       fileOut.close();   

43  

44                       repaint();   

45                       setVisible(true);   

46                       System.out.println("读取图象成功!");   

47                   } catch (Exception ex) {   

48                       ex.printStackTrace();   

49                       flag = false;   

50                   }   

51               }   

52               System.out.println("服务器停止");   

53           }   

功能二,远程控制

『监控端』记录鼠标操作Snap.java

Java代码 

54  

55//内部类,主要功能监听鼠标事件。记录坐标。  

56class keyAdapet extends KeyAdapter   

57    { //键盘监听适配器  

58        public void keyTyped(KeyEvent e) {   

59  

60            if (e.getKeyChar() == 27) { //按ESC键  

61                Object[] options = {   

62                                   "确定",   

63                                   "取消"};   

                int n = JOptionPane.showOptionDialog(null,   

65                        "是否退出程序?",   

66                        "远程监控系统",   

67                        JOptionPane.OK_CANCEL_OPTION,   

68                        JOptionPane.QUESTION_MESSAGE,   

69                        null, //don't use a custom Icon  

70                        options, //the titles of buttons  

71                        options[0]);   

72                if (0 == n) {   

73                    System.exit(0);   

74                }   

75            }   

76  

77        }   

78    }   

79  

80         

81        public void mouseClicked(MouseEvent e) {   

82  

83            System.out.println("双击了鼠标");   

84            int x = e.getX();   

85            int y = e.getY();   

86            if (tempSocket != null) {   

87                new CommandMsg("2", tempSocket, x, y).start();   

88            }   

        }   

90  

91        public void mousePressed(MouseEvent e) {   

92            if (e.BUTTON1 == MouseEvent.BUTTON1) {   

93                System.out.println("你按了鼠标左键~~~~~~~~~~~");   

94                int x = e.getX();   

95                int y = e.getY();   

96                if (tempSocket != null) {   

97                    new CommandMsg("3", tempSocket, x, y).start();   

98                }   

99            }   

100        }   

101  

102       ......   

103   }  

『监控端』发送坐标Snap.java

Java代码 

104public void run() {   

105                out.println(eventType + 

106                out.flush();   

107}  

『客户端』获取鼠标坐标后,在本机相同坐标位置模拟一个鼠标点击操作 Coop.java

Java代码 

108public void run() {   

109        while (flag) {   

110            try {   

111                String s = in.readLine();   

112                decode(s);   

113                switch (method) {   

114                //这里的man实际也是Robot的一个实例。  

115                case 1:   

116                    man.mouseMove(x, y);   

117                    break;   

118                case 2:   

119                    man.mouseMove(x, y);   

120                    man.mousePress(InputEvent.BUTTON1_MASK);   

121                    man.mouseRelease(InputEvent.BUTTON1_MASK);   

122                    break;   

123                case 3:   

124                    man.mousePress(InputEvent.BUTTON1_MASK);   

125                    break;   

126                case 4:   

127                    man.mouseRelease(InputEvent.BUTTON1_MASK);   

128                    break;   

129                default:   

130                    break;   

131                }   

132  

133            } catch (IOException exe) {   

134                ThreadInfo.CoopIsLive=false;   

135                flag=false;   

136                exe.printStackTrace();   

137            }   

138        }   

139    }  

代码的部分就介绍到这里,由于java语言的一些,本实例仅作为演示。有感兴趣的朋友可以下载附件中的程序做进一步参考。

java远程监控.rar(224.7 KB)下载本文

显示全文
专题