1,编写一个视屏监控软件,远程监控实时画面
初步实现的功能
分析;服务器;截取屏幕 通过对象流写出去
客户端;读取服务器发送过来的数据,并且显示在指定的位置
注意:在写客户端和服务器的时候要边写边测试,不然可能会出很多的问题
代码如下;
服务器入口
package 监控服务器v1; 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(); } 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); //将图片写出去 oos.writeObject(icon); oos.flush(); Thread.sleep(100); } catch (Exception e) { // TODO Auto-generated catch block e.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.io.InputStream; import java.io.ObjectInputStream; import java.net.Socket; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextField; /** * * @author Administrator 客户端界面 */ public class ClientUI extends JFrame { JPanel panel = new JPanel(); 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); } /** * * @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(); } 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(100); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
本程序最好是在两台机器上面测试,本人就是在一台机器上测试的
扩展;实现能打开监控的桌面的软件等等;;;;
相关推荐
本文将重点讨论“视屏监控(基于TCP/IP二)”的相关知识点,结合提供的标签“源码”和“工具”,我们将探讨如何使用TCP/IP协议来构建一个视频监控系统,以及可能涉及的源代码和工具有哪些。 首先,TCP/IP(传输控制...
【标题】:“视屏监控客服端” 在信息技术领域,视频监控客户端是一种用于远程查看和管理摄像头设备的应用程序。本文将详细解析基于TQ2440开发板与Windows下的QT客户端的视频监控程序及其工作原理。 【描述】:...
【基于ARM的网络视频监控系统】是一种集成硬件和软件的智能监控解决方案,它利用了ARM(Advanced RISC Machines)架构的处理器,这种处理器在嵌入式系统中广泛应用,以其高效能和低功耗特性著名。该系统的核心在于将...
Qt的网络模块支持TCP/IP通信,便于视频流的传输和控制命令的发送。 3. **Java**:Java作为服务器端编程语言,可以用于处理视频流的编码、解码、压缩和解压缩,以及数据存储和用户权限管理等。例如,使用Spring Boot...
Winsock是Windows平台上的网络通信接口,提供了TCP/IP协议栈的访问。服务端和客户端都需要用到Winsock来建立连接,发送和接收数据。 五、多线程技术 由于视频流处理和用户界面更新需要同时进行,因此在MFC中通常会...
昆仑通态触摸屏作为一款广泛使用的HMI设备,具有操作简便、功能强大的特点,而欧姆龙PLC则是全球知名的自动化控制解决方案提供商之一。通过它们之间的通讯,可以实现设备监控、数据采集和控制指令的传输。 首先,...
这两部分之间的通信可能基于TCP/IP协议,确保数据的可靠传输,或者使用UDP协议以实现更低的延迟。 "CJLibrary608c"可能是一个第三方库,用于辅助处理视频编解码或者网络通信。在C#中,这样的库可以大大简化开发者的...
4. **104规约**:104规约,即《IEC 60870-5-104》,是一种基于TCP/IP的网络通信协议,适应了电力系统向数字化、网络化的转型需求。与101规约相比,104规约提供了更高效、可靠的数据传输,支持多路并发通信,适合于大...
- **图像传输设计**:考虑到网络带宽限制等因素,采用适当的传输协议(如TCP/IP)进行优化处理,保证视频流传输的流畅性。 #### 6. 视频采集系统测试 - 对已完成的视频采集系统进行全面的功能性和性能测试,包括但...
可以通过TCP、UDP和ICMP在一分钟内一直超过某个值进行报警,也可以通过单机一分钟内的流速一直超过某个值进行报警,这样可以及时知道网络异常情况,并通过置水安全无忧信息分析控制软件分析处理; 现场察看: ...
过日志可以准确定位到具体人,特别是对于网络内通过IP修改进行逃避监控的,就可以通过IP和MAC地址 绑定进行有效管理; 网络报警: 可以通过TCP、UDP和ICMP在一分钟内一直超过某个值进行报警,也可以通过单机一...