?? tlient.java.bak
字號:
/****************************************
* 程序文件名稱: 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(),packet.getLength());
getScreen(input);
} //try end
catch (Exception e) { }
}//end while
}//end run
/* 5.CLOSE方法 */
public void close()
{
ended=true;
System.exit(0);
}
/* 6.MAIN方法 */
public static void main(String[] args)
{ ClientTest one=null;
/* 建立輸入IP地址信息窗體ipwin */
JFrame ipwin=new JFrame("請輸入IP:");
ipwin.getContentPane().setLayout(new BorderLayout());
ipwin.setSize(240,80);
JButton exit=new JButton("確定");
JTextField text=new JTextField();
ipwin.getContentPane().add(text,BorderLayout.SOUTH);
ipwin.getContentPane().add(exit,BorderLayout.CENTER);
Dimension screen1=Toolkit.getDefaultToolkit().getScreenSize();
Dimension a1=ipwin.getSize();
ipwin.setLocation((screen1.width-a1.width)/2,(screen1.height-a1.height)/2);
final JFrame xxx=ipwin;
final JTextField yyy=text;
/* 輸入IP地址窗體--退出鍵的監聽 */
exit.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String aaa=yyy.getText();
s=aaa;
xxx.setVisible(false);
}
});
/* 輸入IP地址窗體--窗口關閉的監聽 */
ipwin.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
ipwin.setVisible(true);
/* 判斷 */
while(s==""){ }
System.out.println(s);
/* 顯示圖象窗口 */
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
JFrame frame=new JFrame("監視中。。。");
frame.getContentPane().setLayout(new BorderLayout());
Dimension screen=Toolkit.getDefaultToolkit().getScreenSize();
frame.setSize(640,480);
Dimension thesize=frame.getSize();
frame.setLocation((screen.width-thesize.width)/2,
(screen.height-thesize.height)/2);
/* 實例化啟動線程 */
one=new ClientTest(s);
new Thread(one).start();
final ClientTest the=one;
JScrollPane scroll=new JScrollPane(one);
frame.getContentPane().add(scroll,BorderLayout.CENTER);
/* 顯示圖象窗口--窗口關閉的監聽 */
frame.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e) {
the.close(); System.exit(0);
}
});
/* 對被控端顯示窗口的鍵盤進行監聽 */
Toolkit.getDefaultToolkit().addAWTEventListener(new AWTEventListener(){
public void eventDispatched(AWTEvent event) {
KeyEvent e=(KeyEvent)event;
if(e.getID()==KeyEvent.KEY_PRESSED) {
the.sendKey(KeyEvent.KEY_PRESSED,e.getKeyCode(),
e.getKeyChar(),e.getKeyLocation());
}
else if(e.getID()==KeyEvent.KEY_RELEASED) {
the.sendKey(KeyEvent.KEY_RELEASED,e.getKeyCode(),
e.getKeyChar(),e.getKeyLocation());
}
}
},AWTEvent.KEY_EVENT_MASK);
frame.setVisible(true);
}//end try
catch (Exception e) {
e.printStackTrace();
if(one!=null) {one.close();}
System.exit(0);
} /* end catch */
} /* end main */
} /* end class */
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -