您的位置:首页 > 编程语言 > Java开发

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+"张");

}

}

}

以上程序只是实现了屏幕的监视功能,并没有控制功能,那需要添加监听器,并要创建可视化图形界面,所以没有进行深究。

呵呵,娱乐娱乐,仅供参考!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: