/****************************************
* 程序文件名称: ClientTest.java
* 功能: 客户端应用程序
*****************************************/
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.AWTEvent;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Rectangle;
import java.awt.Toolkit;
import java.awt.event.AWTEventListener;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.event.MouseWheelEvent;
import java.awt.event.MouseWheelListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPopupMenu;
import javax.swing.JScrollPane;
import javax.swing.Scrollable;
import javax.swing.SwingConstants;
import javax.swing.UIManager;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageDecoder;
public class ClientTest extends JLabel implements Runnable//,Scrollable
{
private DatagramSocket socket;
private boolean ended;
private long delay=1000;
private InetAddress server;
private BufferedImage image;
public static String s="";
final private JPopupMenu menu;
/* 1. 显示图像 */
public void paint(Graphics g)
{
super.paint(g);
if(image!=null) {g.drawImage(image,0,0,this);}
}
/* 2.构造方法 */
public ClientTest(String ip) throws Exception
{
super();
image=null;
ended=false;
//设置UDP数据报端口
socket=new DatagramSocket(5000);
//设置存放接收数据缓冲区的大小
socket.setReceiveBufferSize(409600);
//存放被控端IP地址
server=InetAddress.getLocalHost();
//定义向被控端发出截取屏幕图像指令的线程
new Thread(new Runnable()
{
public void run()
{
DatagramPacket packetsign=new
DatagramPacket("REFRESH".getBytes(),20);
while(!ended) {
try {
packetsign.setAddress(server);
packetsign.setPort(5000);
socket.send(packetsign);
Thread.sleep(delay);
}
catch (Exception e) {
try { Thread.sleep(100); }
catch (Exception ex) { }
}
} //end while
} //end run
}).start();
//定义弹出式菜单
menu=new JPopupMenu();
JMenuItem target=new JMenuItem("监控目的地址");
final JLabel one=this;
this.setPreferredSize(new Dimension(640,480));
InetAddress address=InetAddress.getByName(ip);
server=address;
menu.add(target);
/* 设置鼠标按键监听 */
this.addMouseListener(new MouseListener(){
public void mouseClicked(MouseEvent e) { process(e);}
public void mouseEntered(MouseEvent e) { process(e);}
public void mouseExited(MouseEvent e) { process(e); }
//点击鼠标按键
public void mousePressed(MouseEvent e)
{
process(e);
sendMouse(MouseEvent.MOUSE_PRESSED,e.getX(),e.getY(),e.getButton());
}
//释放鼠标按键
public void mouseReleased(MouseEvent e)
{
process(e);
sendMouse(MouseEvent.MOUSE_RELEASED,e.getX(),e.getY(),e.getButton());
}
//侦测鼠标的坐标位置
private void process(MouseEvent e)
{ if(e.isPopupTrigger()) {
menu.show(one,e.getX(),e.getY());
}
}
}); /* end addMouseListener( ) */
/* 设置鼠标移动监听 */
this.addMouseMotionListener(new MouseMotionListener(){
public void mouseDragged(MouseEvent e) {
sendMouse(MouseEvent.MOUSE_MOVED,e.getX(),e.getY(),e.getButton());
}
public void mouseMoved(MouseEvent e) {
sendMouse(MouseEvent.MOUSE_MOVED,e.getX(),e.getY(),e.getButton());
}
}); /* end addMouseMotionListener( ) */
/* 设置鼠标滚轮监听 */
this.addMouseWheelListener(new MouseWheelListener(){
public void mouseWheelMoved(MouseWheelEvent e) {
sendMouse(MouseEvent.MOUSE_WHEEL,e.getX(),e.getY(),e.getUnitsToScroll());
}
}); /* end addMouseWheelListener( ) */
} /* 构造方法 ClientInit( ) 结束 */
/* 发送键盘信息方法 */
private void sendKey(int type,int code,char c,int location) {
byte[] bytes=new byte[50];
for(int i=0;i<bytes.length;i++) {
bytes[i]=' ';
}
String command;
if(type==KeyEvent.KEY_PRESSED) {
command="KeyPressed";
}
else if(type==KeyEvent.KEY_RELEASED) {
command="KeyReleased";
}
else {
command="";
}
byte[] the=command.getBytes();
for(int i=0;i<the.length;i++) {
bytes[i]=the[i];
}
the=String.valueOf(code).getBytes();
for(int i=0;i<the.length;i++) {
bytes[20+i]=the[i];
}
the=String.valueOf(Character.getNumericValue(c)).getBytes();
for(int i=0;i<the.length;i++) {
bytes[30+i]=the[i];
}
the=String.valueOf(location).getBytes();
for(int i=0;i<the.length;i++) {
bytes[40+i]=the[i];
}
try {
DatagramPacket packet=new DatagramPacket(bytes,bytes.length,server,5000);
socket.send(packet);
}
catch (Exception e) {
e.printStackTrace();
}
} /* end sendKey */
/* 发送鼠标事件信息方法 */
private void sendMouse(int type,int x,int y,int button)
{
byte[] bytes=new byte[50];
for(int i=0;i<bytes.length;i++) {
bytes[i]=' ';
}
String command;
if(type==MouseEvent.MOUSE_PRESSED)
{ command="MousePressed"; }
else if(type==MouseEvent.MOUSE_RELEASED)
{ command="MouseReleased"; }
else if(type==MouseEvent.MOUSE_MOVED)
{ command="MouseMoved"; }
else if(type==MouseEvent.MOUSE_WHEEL)
{
command="MouseWheel";
}
else {command=""; }
if(button==MouseEvent.BUTTON1)
{
button=MouseEvent.BUTTON1_MASK;
}
else if(button==MouseEvent.BUTTON2)
{
button=MouseEvent.BUTTON2_MASK;
}
else if(button==MouseEvent.BUTTON3)
{
button=MouseEvent.BUTTON3_MASK;
}
byte[] the=command.getBytes();
for(int i=0;i<the.length;i++)
{bytes[i]=the[i]; }
the=String.valueOf(x).getBytes();
for(int i=0;i<the.length;i++) {
bytes[20+i]=the[i];
}
the=String.valueOf(y).getBytes();
for(int i=0;i<the.length;i++) {
bytes[30+i]=the[i];
}
the=String.valueOf(button).getBytes();
for(int i=0;i<the.length;i++) {
bytes[40+i]=the[i];
}
try {
DatagramPacket packetmouse=new
DatagramPacket(bytes,bytes.length,server,5000);
socket.send(packetmouse);
}
catch (Exception e)
{
e.printStackTrace();
}
} /* end sendMouse( ) */
/* 3.将接收到的屏幕图象数据进行解压,还原成图像 */
private void getScreen(InputStream input)
{
try{
JPEGImageDecoder decoder=JPEGCodec.createJPEGDecoder(input);
BufferedImage image=decoder.decodeAsBufferedImage();
this.image=image;
this.setPreferredSize(new Dimension(image.getWidth(),image.getHeight()));
this.updateUI();
}
catch (Exception e) {e.printStackTrace();}
}
/* 4.线程RUN(),接收传来的屏幕图像数据 */
public void run()
{
byte[] bytes=new byte[409600];
while(!ended)
{
try {
DatagramPacket packet=new DatagramPacket(bytes,bytes.length);
socket.receive(packet);
ByteArrayInputStream input= new ByteArrayInputStream(
packet.getData(),packet.getOffset(
没有合适的资源?快使用搜索试试~ 我知道了~
远程屏幕监控java实现
共15个文件
class:12个
java:2个
bak:1个
需积分: 5 0 下载量 37 浏览量
2024-08-05
17:16:34
上传
评论
收藏 22KB ZIP 举报
温馨提示
远程屏幕监控是一种技术,允许用户通过网络实时查看和控制远程计算机的屏幕,广泛应用于系统管理、技术支持、教育和协作等领域。在这个场景中,我们有一个用Java编写的远程屏幕监控程序,这表明它利用了Java的网络编程和图形用户界面(GUI)能力。 Java作为一种跨平台的编程语言,它的“一次编写,到处运行”特性使得开发远程屏幕监控软件变得方便。在提供的文件列表中,我们可以看到一些类文件(.class)和源代码文件(.java),这些都是Java程序的组成部分。让我们逐一解析这些文件的作用: 1. `ClientTest$2.class`、`ClientTest$6.class`、`ClientTest$4.class`、`ClientTest$3.class`、`ClientTest$1.class`: 这些可能是`ClientTest`类的内部类,用于实现特定功能,如处理网络通信、屏幕捕获等。Java允许在类内部定义其他类,以保持代码的组织性和封装性。 2. `ServerTest$1.class`: 类似地,这是`ServerTest`类的内部类,可能包含服务器端的逻辑,如接收客户
资源推荐
资源详情
资源评论
收起资源包目录
远程屏幕监控.zip (15个子文件)
远程屏幕监控
ClientTest$3.class 739B
ServerTest.class 5KB
ClientTest$2.class 1KB
ClientTest.java 11KB
ServerTest$2.class 561B
ClientTest.java.bak 11KB
ClientTest$8.class 771B
ClientTest$4.class 680B
ClientTest$5.class 797B
ClientTest$7.class 557B
ServerTest$1.class 584B
ServerTest.java 6KB
ClientTest$1.class 1KB
ClientTest$6.class 466B
ClientTest.class 7KB
共 15 条
- 1
资源评论
阿凡达强强
- 粉丝: 0
- 资源: 10
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- CRC校验日常学习笔记
- c语言24点游戏源码.zip
- CodeGlancePro-1.8.7-signed
- jdk - 21.0.4 - windows graalVM
- 基于Matlab界面GUI设计的打地鼠游戏[Matlab界面GUI设计].zip
- 基于Matlab界面GUI设计的车牌识别系统设计[Matlab界面GUI设计].zip
- Sigrity-SystemSI-Pre-Layout Transmission Line Modeling Applicati
- 机械臂仿真Matlab界面GUI设计[Matlab界面GUI设计].zip
- Sigrity-SystemSI-OpenPOWER Compliance Tutorial.rar
- 【精品毕设推荐】-基于微信小程序的大学生心理健康服务系统设计与实现.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功