📄 servertest.java
字号:
/****************************************
* 程序文件名称: ServerTest.java
* 功能: 服务器应用程序
*****************************************/
import java.awt.*;
import java.awt.event.*;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketAddress;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.UIManager;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGEncodeParam;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
public class ServerTest extends Thread
{
private DatagramSocket socket; //UDP
public static final int PORT=5000;
public static final int MAX=409600; //数据大小
public boolean end;
private Robot robot;
private Toolkit toolkit;
int i=0;
//SocketAddress address=SocketAddress.getByName("192.169.1.77");
/* 1.构造方法ServerTest() */
public ServerTest() throws Exception
{
robot=new Robot();
toolkit=Toolkit.getDefaultToolkit();
this.socket=new DatagramSocket(PORT);
socket.setSendBufferSize(MAX);
end=false;
}
/* 2.发送屏幕方法sendScreen() */
private void sendScreen(SocketAddress address)
{
try {
BufferedImage image=
robot.createScreenCapture(new Rectangle(toolkit.getScreenSize()));
ByteArrayOutputStream output=new ByteArrayOutputStream();
JPEGEncodeParam param=JPEGCodec.getDefaultJPEGEncodeParam(image);
param.setQuality(0.3f,false);
JPEGImageEncoder encoder=JPEGCodec.createJPEGEncoder(output,param);
encoder.encode(image);
encoder.getOutputStream().close();
DatagramPacket packet=
new DatagramPacket(output.toByteArray(),output.size(),address);
this.socket.send(packet);
System.out.println(++i+"\n");
}
catch (Exception e) { e.printStackTrace();}
}
/* 3.线程方法RUN() */
public void run()
{
//定义字节数组,放置接收到的数据
byte[] bytes=new byte[4096];
while(!end) {
try {
//创建数据包对象,以便收取数据包
DatagramPacket packet=new DatagramPacket(bytes,bytes.length);
//堵塞端口,接收数据包
this.socket.receive(packet);
//取出数据包的内容
String command=new String(packet.getData(),packet.getOffset(),20).trim();
//如果接收到的指令为"REFRESH",
//则将自己屏幕图像发送出去
if(command.equalsIgnoreCase("REFRESH")) {
sendScreen(packet.getSocketAddress());
}
//若指令不是"REFRESH",则是一个要执行的鼠标或键盘动作指令
else {
byte[] the=packet.getData();
int n=packet.getOffset();
int x=Integer.parseInt(new String(the,n+20,10).trim());
int y=Integer.parseInt(new String(the,n+30,10).trim());
int button=Integer.parseInt(new String(the,n+40,10).trim());
//如果接收到的指令为"MousePressed",
//则在自己的电脑中执行"按下鼠标左键"的动作指令
if(command.equalsIgnoreCase("MousePressed")) {
robot.mousePress(button);
}
//如果接收到的指令为"MouseReleased",
//则在自己的电脑中执行"释放鼠标左键"的动作指令
else if(command.equalsIgnoreCase("MouseReleased")) {
robot.mouseRelease(button);
}
//如果接收到的指令为"MouseMoved",
//则在自己的电脑中执行"移动鼠标"的动作指令
else if(command.equalsIgnoreCase("MouseMoved")) {
robot.mouseMove(x,y);
}
//如果接收到的指令为"MousePressed",
//则在自己的电脑中执行"滚动鼠标滚轮"的动作指令
else if(command.equalsIgnoreCase("MouseWheel")) {
robot.mouseWheel(button);
}
//如果接收到的指令为"KeyPressed",
//则在自己的电脑中执行"按下按键"的动作指令
else if(command.equalsIgnoreCase("KeyPressed")) {
robot.keyPress(x);
}
//如果接收到的指令为"KeyReleased",
//则在自己的电脑中执行"释放按键"的动作指令
else if(command.equalsIgnoreCase("KeyReleased")){
robot.keyRelease(x);
}
} /* end else */
} /* end try */
catch (Exception e) { }
} /* end while */
} /* end run */
/* 4. CLOSE() 方法 */
public void close()
{
end=true;
this.socket.close();
}
/* 5. MAIN()方法 */
public static void main(String[] args)
{
ServerTest one=null;
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
/* 窗体建立对象 */
JFrame frame=new JFrame("受监视中。。。");
frame.getContentPane().setLayout(new BorderLayout());
frame.setSize(240,80);
JButton exit=new JButton("退出");
frame.getContentPane().add(exit,BorderLayout.CENTER);
/* 获取屏幕的分辨率 */
Dimension screen=Toolkit.getDefaultToolkit().getScreenSize();
Dimension a=frame.getSize();
/* 使窗口自动居中 */
frame.setLocation((screen.width-a.width)/2,(screen.height-a.height)/2);
one=new ServerTest();
one.start();
final ServerTest the=one;
/* 退出键的监听 */
exit.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
the.close();
System.exit(0); }
});
/* 窗口关闭的监听 */
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
the.close();
System.exit(0);
}
});
frame.setVisible(true);
}//endtry
catch (Exception e)
{
e.printStackTrace();
if(one!=null) { one.close(); }
System.exit(0);
}
} //end main
}//end class
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -