`
百合不是茶
  • 浏览: 355897 次
社区版块
存档分类
最新评论

视屏监控(基于TCP/IP一)

阅读更多

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();
			}

		}

	}
}

 

 

 

本程序最好是在两台机器上面测试,本人就是在一台机器上测试的

 

  扩展;实现能打开监控的桌面的软件等等;;;;

 

  • 大小: 134.3 KB
0
2
分享到:
评论

相关推荐

    视屏监控(基于TCP/IP二)

    本文将重点讨论“视屏监控(基于TCP/IP二)”的相关知识点,结合提供的标签“源码”和“工具”,我们将探讨如何使用TCP/IP协议来构建一个视频监控系统,以及可能涉及的源代码和工具有哪些。 首先,TCP/IP(传输控制...

    视屏监控客服端

    【标题】:“视屏监控客服端” 在信息技术领域,视频监控客户端是一种用于远程查看和管理摄像头设备的应用程序。本文将详细解析基于TQ2440开发板与Windows下的QT客户端的视频监控程序及其工作原理。 【描述】:...

    基于ARM的网络视频监控系统

    【基于ARM的网络视频监控系统】是一种集成硬件和软件的智能监控解决方案,它利用了ARM(Advanced RISC Machines)架构的处理器,这种处理器在嵌入式系统中广泛应用,以其高效能和低功耗特性著名。该系统的核心在于将...

    web远程视屏实时监控系统

    Qt的网络模块支持TCP/IP通信,便于视频流的传输和控制命令的发送。 3. **Java**:Java作为服务器端编程语言,可以用于处理视频流的编码、解码、压缩和解压缩,以及数据存储和用户权限管理等。例如,使用Spring Boot...

    MFC编写的局域网视屏监控模块,vs2010可运行,包括服务端,和客户端

    Winsock是Windows平台上的网络通信接口,提供了TCP/IP协议栈的访问。服务端和客户端都需要用到Winsock来建立连接,发送和接收数据。 五、多线程技术 由于视频流处理和用户界面更新需要同时进行,因此在MFC中通常会...

    昆仑通态触摸屏与欧姆龙PLCT通讯

    昆仑通态触摸屏作为一款广泛使用的HMI设备,具有操作简便、功能强大的特点,而欧姆龙PLC则是全球知名的自动化控制解决方案提供商之一。通过它们之间的通讯,可以实现设备监控、数据采集和控制指令的传输。 首先,...

    远程视屏控制系统C#编写源代码

    这两部分之间的通信可能基于TCP/IP协议,确保数据的可靠传输,或者使用UDP协议以实现更低的延迟。 "CJLibrary608c"可能是一个第三方库,用于辅助处理视频编解码或者网络通信。在C#中,这样的库可以大大简化开发者的...

    电力规约大全101~104

    4. **104规约**:104规约,即《IEC 60870-5-104》,是一种基于TCP/IP的网络通信协议,适应了电力系统向数字化、网络化的转型需求。与101规约相比,104规约提供了更高效、可靠的数据传输,支持多路并发通信,适合于大...

    视屏采集系统

    - **图像传输设计**:考虑到网络带宽限制等因素,采用适当的传输协议(如TCP/IP)进行优化处理,保证视频流传输的流畅性。 #### 6. 视频采集系统测试 - 对已完成的视频采集系统进行全面的功能性和性能测试,包括但...

    置水安全无忧信息分析控制系统 v1.23

    可以通过TCP、UDP和ICMP在一分钟内一直超过某个值进行报警,也可以通过单机一分钟内的流速一直超过某个值进行报警,这样可以及时知道网络异常情况,并通过置水安全无忧信息分析控制软件分析处理; 现场察看: ...

    网上特工上网行为管理

    过日志可以准确定位到具体人,特别是对于网络内通过IP修改进行逃避监控的,就可以通过IP和MAC地址 绑定进行有效管理; 网络报警: 可以通过TCP、UDP和ICMP在一分钟内一直超过某个值进行报警,也可以通过单机一...

Global site tag (gtag.js) - Google Analytics