java 写的屏幕远程监控程序
2012-07-13 00:34
344 查看
以前都是从网上下载一些远程监控软件,无聊之余,自己也在想能不能用java开发一个远程监控软件呢,经过思考和测试也算小有收获,下面就来介绍一下开发的步骤和思路。
思路:
要想实现远程监控,肯定是需要一个被控端和控制端,被控端的任务就是将机器的实时画面传送到控制端。相反,控制端就是要实时接收被控端传过来的信息,并对其处理。
先来看一下效果吧:
源代码:
被控端程序(client.java)
package com.wdw.client;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;
import org.omg.CORBA.Environment;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
public class Client extends Thread{
private Socket socket = null;
private BufferedImage image;
private JPEGImageEncoder encoder ;
public Client(){
getInstant();
}
/**
* 单例模式
* @return
*/
public synchronized Socket getInstant() {
System.out.println("正在连接服务器");
if(socket==null)
{
try {
socket = new Socket("192.168.1.101",8989);
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
System.out.println("找不到服务器....");
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
System.out.println("服务器连接成功");
return socket;
}
/**
* 线程启动……
*/
public void run()
{
int i=0;
while(true)
{
try {
System.out.println(i++);
image = getDeskTop();
sendImage(image);
Thread.sleep(10000);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
/**
* 获取桌面信息
* @return
* @throws Exception
*/
public BufferedImage getDeskTop()throws Exception
{
Robot robot = new Robot();
Rectangle re = new Rectangle(Toolkit.getDefaultToolkit().getScreenSize());
return robot.createScreenCapture(re);
}
/**a
* 发送图片到服务器
* @param image
* @throws Exception
*/
public void sendImage(BufferedImage image)throws Exception
{
encoder = JPEGCodec.createJPEGEncoder(socket.getOutputStream());
encoder.encode(image);
}
public void stopSend()
{
try {
Thread.yield();
socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args)throws Exception
{
Client client = new Client();
Thread t = new Thread(client);
t.start();
}
}
控制端程序(server.java)
package com.wdw.server;
import java.awt.image.BufferedImage;
import java.io.FileOutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Random;
import com.sun.image.codec.jpeg.JPEGImageDecoder;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
import com.sun.image.codec.jpeg.JPEGCodec;
public class Server {
public static void main(String[] args)throws Exception
{
System.out.println("打开服务器…………");
ServerSocket ss = new ServerSocket(8989);
int i=0;
System.out.println("服务器开启正常…………");
System.out.println("服务器正在接收桌面图片…………");
Socket st = ss.accept();
while(true)
{
JPEGImageDecoder jid = JPEGCodec.createJPEGDecoder(st.getInputStream());
BufferedImage image =jid.decodeAsBufferedImage();
FileOutputStream out = new FileOutputStream("d:/img/"+new Random().nextInt()+".jpg");
JPEGImageEncoder jie = JPEGCodec.createJPEGEncoder(out);
jie.encode(image);
out.close();
i++;
System.out.println("已经从 "+st.getLocalAddress() +" 成功接收"+i+"张");
}
}
}
以上程序只是实现了屏幕的监视功能,并没有控制功能,那需要添加监听器,并要创建可视化图形界面,所以没有进行深究。
呵呵,娱乐娱乐,仅供参考!
思路:
要想实现远程监控,肯定是需要一个被控端和控制端,被控端的任务就是将机器的实时画面传送到控制端。相反,控制端就是要实时接收被控端传过来的信息,并对其处理。
先来看一下效果吧:
源代码:
被控端程序(client.java)
package com.wdw.client;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;
import org.omg.CORBA.Environment;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
public class Client extends Thread{
private Socket socket = null;
private BufferedImage image;
private JPEGImageEncoder encoder ;
public Client(){
getInstant();
}
/**
* 单例模式
* @return
*/
public synchronized Socket getInstant() {
System.out.println("正在连接服务器");
if(socket==null)
{
try {
socket = new Socket("192.168.1.101",8989);
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
System.out.println("找不到服务器....");
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
System.out.println("服务器连接成功");
return socket;
}
/**
* 线程启动……
*/
public void run()
{
int i=0;
while(true)
{
try {
System.out.println(i++);
image = getDeskTop();
sendImage(image);
Thread.sleep(10000);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
/**
* 获取桌面信息
* @return
* @throws Exception
*/
public BufferedImage getDeskTop()throws Exception
{
Robot robot = new Robot();
Rectangle re = new Rectangle(Toolkit.getDefaultToolkit().getScreenSize());
return robot.createScreenCapture(re);
}
/**a
* 发送图片到服务器
* @param image
* @throws Exception
*/
public void sendImage(BufferedImage image)throws Exception
{
encoder = JPEGCodec.createJPEGEncoder(socket.getOutputStream());
encoder.encode(image);
}
public void stopSend()
{
try {
Thread.yield();
socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args)throws Exception
{
Client client = new Client();
Thread t = new Thread(client);
t.start();
}
}
控制端程序(server.java)
package com.wdw.server;
import java.awt.image.BufferedImage;
import java.io.FileOutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Random;
import com.sun.image.codec.jpeg.JPEGImageDecoder;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
import com.sun.image.codec.jpeg.JPEGCodec;
public class Server {
public static void main(String[] args)throws Exception
{
System.out.println("打开服务器…………");
ServerSocket ss = new ServerSocket(8989);
int i=0;
System.out.println("服务器开启正常…………");
System.out.println("服务器正在接收桌面图片…………");
Socket st = ss.accept();
while(true)
{
JPEGImageDecoder jid = JPEGCodec.createJPEGDecoder(st.getInputStream());
BufferedImage image =jid.decodeAsBufferedImage();
FileOutputStream out = new FileOutputStream("d:/img/"+new Random().nextInt()+".jpg");
JPEGImageEncoder jie = JPEGCodec.createJPEGEncoder(out);
jie.encode(image);
out.close();
i++;
System.out.println("已经从 "+st.getLocalAddress() +" 成功接收"+i+"张");
}
}
}
以上程序只是实现了屏幕的监视功能,并没有控制功能,那需要添加监听器,并要创建可视化图形界面,所以没有进行深究。
呵呵,娱乐娱乐,仅供参考!
相关文章推荐
- Java远程屏幕监控案例
- 利用java实现一个简单的远程监控程序
- 用java写的远程监控程序,可以看到别人计算机上正在进行的操作(2)
- 利用java实现一个简单的远程监控程序
- visualvm监控远程机器上的Java程序
- 跪求java 程序 swing加socket 做的反向连接远程控制软件,公司要我做我只用反向连接做了一个屏幕截取的,可是带事件控制的做不出报错一大堆,我都卡住了一周了。无奈啊!跪求java反向连接 带事件控制的完整代码!
- visualvm 监控 远程 机器上的 Java 程序
- JAVA本地远程连接linux程序监控状态
- 转:visualvm监控远程机器上的Java程序
- 利用java实现一个简单的远程监控程序
- Visualvm监控远程机器上的Java程序
- 为java程序添加远程jmi监控
- Java VisualVM 监控远程Java程序运行情况
- visualvm监控远程机器上的Java程序
- visualvm监控远程机器上的Java程序
- JAVA本地远程连接linux程序监控状态
- 如何使用JVisualVM远程监控和优化Tomcat和Java程序的内存和CPU
- JAVA远程监控程序
- 利用java实现一个简单的远程监控程序
- 用java写的远程监控程序