ソースを参照

java实现远程控制

朱丽 4 年 前
コミット
972a53b5ae

+ 29 - 24
src/com/sziit/G06/controller/Controller.java

@@ -1,5 +1,7 @@
 package com.sziit.G06.controller;
 
+import com.sziit.G06.controller.MyException;
+
 import javax.imageio.ImageIO;
 import javax.swing.*;
 import java.awt.*;
@@ -18,14 +20,15 @@ import java.io.ObjectOutputStream;
 
 public class Controller extends Thread {
 
-    private java.io.DataInputStream dis;//读视频流对象
-    private java.io.ObjectOutputStream ous;//写事件流
-    private javax.swing.JLabel la_image = new javax.swing.JLabel();
+    private DataInputStream dis;//读视频流对象
+    private ObjectOutputStream ous;//写事件流
+    private JLabel la_image = new JLabel();
+
 
     /*
      * 显示页面
      */
-    public void showUI() {
+    public void showUI(String ip,int port,String idname) {
 
 //////发现鼠标不能精准定位的问题:
 
@@ -51,12 +54,16 @@ public class Controller extends Thread {
         //1.设置远程控制页面
 
         //设置远程控制窗口的标题
-        javax.swing.JFrame frame=new javax.swing.JFrame("远程控制");    //-----问题所在:存在任务栏高度差!
+        JFrame frame=new JFrame("远程控制");    //-----问题所在:存在任务栏高度差!
 //        frame.setSize(1920,1080);
+        //设置远程控制窗口标题
+
         //设置远程控制屏幕大小,整个屏幕高度(包含任务栏高度)
         frame.setSize(w,h);
         //设置远程控制屏幕可见
         frame.setResizable(false);
+
+        frame.setTitle(ip +"    端口:" + port+"    被控制端名字:"+idname);
         //设置被控制端屏幕大小,不包含任务栏高度
         la_image.setSize(w1, h1);
         JLayeredPane jlp = new JLayeredPane();
@@ -73,13 +80,13 @@ public class Controller extends Thread {
 
         //2.监听键盘事件并处理
         frame.addKeyListener(new KeyAdapter(){
-                                 public void keyPressed(KeyEvent e) {
-                                     sendEventObject(e);
-                                 }
-                                 @Override
-                                 public void keyReleased(KeyEvent e) {
-                                     sendEventObject(e);
-                                 }
+            public void keyPressed(KeyEvent e) {
+                sendEventObject(e);
+            }
+            @Override
+            public void keyReleased(KeyEvent e) {
+                sendEventObject(e);
+            }
             @Override
             public void keyTyped(KeyEvent e) {
             }
@@ -122,7 +129,7 @@ public class Controller extends Thread {
             }
         });
     }
-//连接服务端
+    //连接服务端
     private void connectToServer(String ip,int port)
             throws Exception{
 
@@ -135,10 +142,10 @@ public class Controller extends Thread {
         if(dis==null||ous==null)throw new MyException("远程控制不接受或未接受被控制。。。");
 
     }
-     //将控制端所侦听到的事件封装成InputEvent类,用对象输出流发送到被控制端。
+    //将控制端所侦听到的事件封装成InputEvent类,用对象输出流发送到被控制端。
 
     //发送事件对象到被控制端
-    private void sendEventObject(java.awt.event.InputEvent event){
+    private void sendEventObject(InputEvent event){
         try{
             ous.writeObject(event);
 
@@ -154,7 +161,7 @@ public class Controller extends Thread {
         try{
             //读取图片数据
             while(true){
-             //图片长度
+                //图片长度
                 int len=dis.readInt();
                 //把数据储存在字节数组
                 byte[] data=new byte[len];
@@ -165,8 +172,8 @@ public class Controller extends Thread {
                 ByteArrayInputStream bins=new ByteArrayInputStream(data);
                 BufferedImage image= ImageIO.read(bins);
 
-               //将读到的数据生成为一个图标对象
-                javax.swing.ImageIcon ic=new ImageIcon(image);
+                //将读到的数据生成为一个图标对象
+                ImageIcon ic=new ImageIcon(image);
                 Image img = ic.getImage();
 
                 // 2.根据屏幕设定图片的大小
@@ -191,7 +198,7 @@ public class Controller extends Thread {
 
     }
 
-//从被控制端传输的图片在控制端实现回放
+    //从被控制端传输的图片在控制端实现回放
     private static BufferedImage resize(Image img, int newW, int newH) {
 //设置在控制端回放的图片大小
         int w = img.getWidth(null);
@@ -201,7 +208,7 @@ public class Controller extends Thread {
 
         Graphics2D g = dimg.createGraphics();
         //Graphics2D属于Graphics 类,
-       // 提供了对几何形状、坐标转换、颜色管理和文本布局更为复杂的控制。
+        // 提供了对几何形状、坐标转换、颜色管理和文本布局更为复杂的控制。
         // 它是用于在 Java(tm) 平台上呈现二维形状、文本和图像的基础类。
 
         //设置模式
@@ -224,11 +231,11 @@ public class Controller extends Thread {
      * @throws Exception
      */
 
-    public static void connect(String ip,int port) throws Exception{
+    public static void connect(String ip,int port,String idname) throws Exception{
         //1.创建对象
         Controller ct=new Controller();
         //2.建立显示界面,showUI()实现
-        ct.showUI();
+        ct.showUI(ip,port,idname);
         //3.连接被控端,私有方法connectToServer(ip,port)实现
         ct.connectToServer(ip,port);
         //4.启动线程,start()方法
@@ -236,5 +243,3 @@ public class Controller extends Thread {
     }
 
 }
-
-

+ 17 - 15
src/com/sziit/G06/controller/Server.java

@@ -27,11 +27,11 @@ import java.net.Socket;
 
 public class Server extends JFrame {
 
-/*
-* (服务端):
-* 实现服务端监视界面,当有客户端请求连接后,开启一个线程负责和它通讯。
-* 接受从被控端发出的请求,根据端口指定对应的线程执行其要求连接的对象与其通讯。
-* */
+    /*
+     * (服务端):
+     * 实现服务端监视界面,当有客户端请求连接后,开启一个线程负责和它通讯。
+     * 接受从被控端发出的请求,根据端口指定对应的线程执行其要求连接的对象与其通讯。
+     * */
 
 
     private static final long serialVersionUID = 1L;
@@ -48,10 +48,11 @@ public class Server extends JFrame {
     */
 
     //设置文本框的大小
+    public JTextField porttf  =new JTextField(3);
     public JTextField iptf  =new JTextField(10);
+    public JTextField idname =new JTextField(10);
 
-    public JTextField porttf  =new JTextField(3);
-//添加连接与断开按钮
+    //添加连接与断开按钮
     public JButton jb1 = new JButton("连接");
 
     public JButton jb2 = new JButton("断开");
@@ -62,7 +63,7 @@ public class Server extends JFrame {
 
         this.setLocation(350, 200);
 
-        this.setSize(350, 100);
+        this.setSize(500, 100);
 //设置窗口始终置顶
         this.setAlwaysOnTop(true);
 
@@ -71,24 +72,25 @@ public class Server extends JFrame {
 
         jlp.setLayout(new FlowLayout());
 
-
-        jlp.add(new JLabel("远程IP地址:"));
-
         iptf.setText("");
-
         porttf.setText("");
+        idname.setText("");
 
+        jlp.add(new JLabel("远程IP地址:"));
         jlp.add(iptf);
 
         jlp.add(new JLabel("端口:"));
-
         jlp.add(porttf);
+
+        jlp.add(new JLabel("备注:"));
+        jlp.add(idname);
+
 //监听按钮点击事件
         jb1.addMouseListener(new MouseAdapter(){
 
             public void mouseClicked(MouseEvent e) {
                 try {
-                    Controller.connect(iptf.getText(),Integer.parseInt(porttf.getText().trim()));
+                    Controller.connect(iptf.getText(),Integer.parseInt(porttf.getText().trim()),idname.getText());
 //                    if (iptf.getText()==null||iptf.getText())
                 } catch (NumberFormatException e1) {
 
@@ -149,7 +151,7 @@ public class Server extends JFrame {
         this.setVisible(true);
 
     }
-//启动方法
+    //启动方法
     public static void main(String[] args) {
 
         // TODO Auto-generated method stub

+ 0 - 3
src/com/sziit/G06/thread/CaptureThread.java

@@ -1,10 +1,7 @@
 package com.sziit.G06.thread;
 
-import com.sun.image.codec.jpeg.JPEGCodec;
-import com.sun.image.codec.jpeg.JPEGImageEncoder;
 
 import javax.imageio.ImageIO;
-import javax.swing.*;
 import java.awt.*;
 import java.awt.image.BufferedImage;
 import java.io.*;