1,编写一个视屏监控软件,远程监控实时画面
初步实现的功能
分析;服务器;截取屏幕 通过对象流写出去
客户端;读取服务器发送过来的数据,并且显示在指定的位置
服务器可以点击打开客户端的应用
代码如下
package 监控服务器v1; import java.io.InputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; /* * * 服务器入口 */ public class MyServer { public static void main(String[] args) { //创建服务器套接字 try { ServerSocket server = new ServerSocket(8080); System.out.println("等待客户端连接..."); //等待客户端连接 Socket socket = server.accept(); System.out.println(socket.getRemoteSocketAddress()+"连接上服务器"); //获得输出流,包装成对象流 OutputStream ops = socket.getOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(ops); //启动发送消息的线程 SendThread sendthread = new SendThread(oos); sendthread.start(); //创建收鼠标消息的输入流 InputStream is= socket.getInputStream(); ObjectInputStream ois = new ObjectInputStream(is); //接受鼠标消息的线程 ReceiverThread receiverthread = new ReceiverThread(ois); receiverthread.start(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
package 监控服务器v1; 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.ObjectOutputStream; import javax.swing.ImageIcon; /** * * @author Administrator *服务器截屏,发送 */ public class SendThread extends Thread{ private boolean islive = true; private ObjectOutputStream oos; public SendThread(ObjectOutputStream oos){ this.oos = oos; } public void run(){ while(islive){ try { //使用Robot截取屏幕 Robot robot = new Robot(); //获得屏幕分辨率 Dimension dim = Toolkit.getDefaultToolkit().getScreenSize(); //截取的矩形 Rectangle rect = new Rectangle(0, 0, dim.width, dim.height); //保存图片 BufferedImage image = robot.createScreenCapture(rect); //图片装成ImageIcon来保存 ImageIcon icon = new ImageIcon(image); //将图片写出去 if(icon!=null){ oos.writeObject(icon); oos.flush(); Thread.sleep(500); }else{ } } catch (Exception e) { islive = false; // TODO Auto-generated catch block System.out.println("丢失客户端..."); } } } }
package 监控服务器v1; /** * 服务器收鼠标数据的线程 */ import java.awt.Robot; import java.awt.event.InputEvent; import java.awt.event.MouseEvent; import java.io.ObjectInputStream; public class ReceiverThread extends Thread { private ObjectInputStream ois; private boolean islive = true; public ReceiverThread(ObjectInputStream ois) { this.ois = ois; } // 线程接受数据 @Override public void run() { try { Robot robot = new Robot(); while (islive) { int x = ois.readInt(); int y = ois.readInt(); int button = ois.readInt(); String type = (String) ois.readObject(); int btn = 0; if (button == MouseEvent.BUTTON1) { btn = InputEvent.BUTTON1_MASK; } else if (button == MouseEvent.BUTTON3) { btn = InputEvent.BUTTON3_MASK; } if (type.equals("Released")) { robot.mouseMove(x, y); robot.mousePress(btn); } else if (type.equals("Pressed")) { robot.mouseMove(x, y); robot.mousePress(btn); } } } catch (Exception e1) { islive = false; e1.printStackTrace(); } } }
客户端
package 监控客户端v1; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.MouseWheelEvent; import java.io.InputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.OutputStream; import java.net.Socket; import javax.management.modelmbean.ModelMBean; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextField; /** * * @author Administrator 客户端界面 */ public class ClientUI extends JFrame { JPanel panel = new JPanel(); private ObjectOutputStream oos; public static void main(String[] args) { new ClientUI(); } private JTextField ipfield; private JTextField portfield; // 构造函数 public ClientUI() { this.setSize(600, 500); this.setTitle("监控客户端"); this.setLayout(new BorderLayout()); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 显示区域中间 JScrollPane jsp = new JScrollPane(panel); jsp.setAutoscrolls(true); panel.setBackground(Color.WHITE); this.add(jsp, BorderLayout.CENTER); // 按钮区域 JPanel tool = new JPanel(); tool.setBackground(Color.GRAY); tool.setPreferredSize(new Dimension(1, 80)); this.add(tool, BorderLayout.SOUTH); // 在按钮区域添加ip和端口的输入框 JLabel ipLabel = new JLabel("ip:"); ipfield = new JTextField("127.0.0.1", 20); JLabel portLabel = new JLabel("port:"); portfield = new JTextField("8080", 10); JButton btn = new JButton("连接服务器"); // 将按钮区域的文本,输入框,按钮 添加到按钮区域 tool.add(ipLabel); tool.add(ipfield); tool.add(portLabel); tool.add(portfield); tool.add(btn); this.setVisible(true); // 创建监听器对象给按钮添加监听器 BtnLisener btnlis = new BtnLisener(); btn.addActionListener(btnlis); //创建鼠标监听器对象,并添加d } /** * * @author Administrator 添加鼠标监听器 */ class panelMouseListener extends MouseAdapter { public void mouseClicked(MouseEvent e) { } public void mousePressed(MouseEvent e) { int x = e.getX(); int y = e.getY(); int button = e.getButton(); String type = "Pressed"; try { if(oos!=null){ oos.writeInt(x); oos.writeInt(y); oos.writeInt(button); oos.writeObject(type); oos.flush(); }else{ JOptionPane.showMessageDialog(null,"与服务器断开"); } } catch (Exception e2) { e2.printStackTrace(); } } public void mouseReleased(MouseEvent e) { int x = e.getX(); int y = e.getY(); int button = e.getButton(); String type = "Released"; try { if(oos!=null){ oos.writeInt(x); oos.writeInt(y); oos.writeInt(button); oos.writeObject(type); oos.flush(); }else{ JOptionPane.showMessageDialog(null,"与服务器断开"); } } catch (Exception e2) { e2.printStackTrace(); } } public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } //119.39.86.222 public void mouseWheelMoved(MouseWheelEvent e) { } public void mouseDragged(MouseEvent e) { } public void mouseMoved(MouseEvent e) { } } /** * * @author Administrator 添加按钮监听器 */ class BtnLisener implements ActionListener { @Override public void actionPerformed(ActionEvent e) { // 获得默认按钮 String command = e.getActionCommand(); // 获得事件源 JButton btn = (JButton) e.getSource(); // 获取输入框中的字符串 String ip = ipfield.getText().trim(); String ports = portfield.getText().trim(); // 端口是int型 int port = Integer.parseInt(ports); if (command.equals("连接服务器")) { try { Socket socket = new Socket(ip, port); btn.setText("连接上服务器"); // 创建输入流得到服务器的图片 InputStream is = socket.getInputStream(); ObjectInputStream ois = new ObjectInputStream(is); // 启动接收数据线程 ClientThread th = new ClientThread(ois, panel); th.start(); //创建输出流,将鼠标信息写出去 OutputStream os=socket.getOutputStream(); oos = new ObjectOutputStream(os); } catch (Exception e1) { e1.printStackTrace(); } } } } }
package 监控客户端v1; import java.awt.Dimension; import java.awt.Graphics; import java.io.ObjectInputStream; import javax.swing.ImageIcon; import javax.swing.JPanel; /** * * @author Administrator 客户端收消息 */ public class ClientThread extends Thread { private ObjectInputStream ois; private JPanel panel; private boolean islive = true; public ClientThread(ObjectInputStream ois, JPanel panel) { this.ois= ois; this.panel = panel; } // 线程收消息 public void run() { while (islive) { try { //读取图片 ImageIcon icon = (ImageIcon)ois.readObject(); //根据读取到的图片设置图片大小 Dimension dim = new Dimension(icon.getIconWidth(), icon.getIconHeight()); Graphics g = panel.getGraphics(); g.drawImage(icon.getImage(), 0, 0, null); Thread.sleep(500); } catch (Exception e) { islive = false; // TODO Auto-generated catch block e.printStackTrace(); } } } }
由于是在本电脑上运行的,结果可能不太明显;
相关推荐
NULL 博文链接:https://baihe747.iteye.com/blog/2115289
基于TCP/IP的视屏聊天系统,适合c++程序员,注释齐全
MFC编写的局域网视屏监控模块,vs2010可运行,包括服务端,和客户端
ok6410的web视屏监控这是开源的源代码,很不错的。
内容是基于 Java 的一款局域网即时通信软件。 Java 是一种跨平台的编程语言,其具有的良好的网络功能以及对数据库的全面 支持毫无疑问能实现本次设计的所有内容。本系统采用 C/S 模式,即客户端/服务器 模式,客户端...
可以实现网络视屏监控,好东西一起分了,快来看看
java调用海康威视监控获取视频监控web程序demo,监控视屏安装软件插件
delphi实现视屏监控客户端动态分屏功能;双击全屏,双击还原,放大缩小自适应窗体。功能强大。
视屏监控,rtsp流播放
基于TQ2440开发板与Windows下的qt客服端的视频监控程序。及原理
EZOPEN播放协议,内附多个m3u8资源和监控视屏资源链接,包括日志打印,控件控制
城市视屏监控系统综合网络管理平台的设计,对视屏监控系统网络管理平台构建可提供相关资料帮助
web远程视屏实时监控系统
客户端是使用qt编写而成; 服务器(摄像头端)是基于ARM开发;并提供了gsm模块和蜂鸣器模块。 整个工程代码都有,简单移植就可拿来借鉴和使用。
C#视屏C#视C#视屏屏C#视屏C#视屏C#视屏C#视屏C#视屏C#视屏C#视屏C#视屏C#视屏C#视屏C#视屏C#视屏C#视屏C#视屏C#视屏C#视屏C#视屏C#视屏C#视屏C#视屏C#视屏C#视屏C#视屏C#视屏C#视屏C#视屏
用户使用视屏:https://v.youku.com/v_show/id_XMzU4NjQwODIzNg==.html 部署&管理员视屏:https://v.youku.com/v_show/id_XMzYwMzA2MzUyNA==.html 部署:api.war 或 通过解压软件解压api.war 后部署
本播放器专门播放监控视屏文件,。播放格式为DAV。。希望你能使用
MFC编写的局域网视屏监控模块,vs2010可运行,包括服务端,和客户端
这是个不错的文档,可以大家学习,可以大家交流,然后一起进步。