2011-03-21 98 views
0

你好我正在做一个远程计算机快照的程序。远程计算机的屏幕截图

我完成了。

ScreenServer.java。

import java.net.*; 
import java.awt.*; 
import java.awt.image.*; 
import java.io.*; 
import javax.imageio.ImageIO; 

public class ScreenServer { 
    public static void main(String[] args) throws Exception { 
     Robot robot = new Robot(); 
     BufferedImage screen; 

     while (true) { 
      ServerSocket server = new ServerSocket(6659); 
      Socket client = server.accept(); 

      Rectangle size = new Rectangle(Toolkit.getDefaultToolkit().getScreenSize()); 
      screen = robot.createScreenCapture(size); 
      int[] rgbData = new int[(int) (size.getWidth()*size.getHeight())]; 
      screen.getRGB(0,0, (int) size.getWidth(), (int) size.getHeight(), rgbData, 0, (int) size.getWidth()); 

      OutputStream baseOut = client.getOutputStream(); 
      ObjectOutputStream out = new ObjectOutputStream(baseOut); 

      ImageIO.write(screen, "png", new File("d:\\orig_screen.png")); 
      out.writeObject(size); 

      for (int x = 0; x < rgbData.length; x++) { 
       out.writeInt(rgbData[x]); 
      } 

      out.flush(); 
      server.close(); 
      client.close(); 
      out.close(); 
      baseOut.close(); 
     } 
    } 
} 

ScreenClient.java

import java.net.*; 
import java.awt.*; 
import java.awt.image.*; 
import java.io.*; 
import javax.imageio.ImageIO; 

public class ScreenClient { 

    public static void main(String[] args) throws Exception { 
     Socket server = new Socket("172.22.6.50",6659); 

     ObjectInputStream in = new ObjectInputStream(server.getInputStream()); 

     Rectangle size = (Rectangle) in.readObject(); 

     int[] rgbData = new int[(int)(size.getWidth() * size.getHeight())]; 

     for (int x = 0; x < rgbData.length;x++) { 
      rgbData[x] = in.readInt(); 
     } 

     in.close(); 
     server.close(); 

     BufferedImage screen = new BufferedImage((int) size.getWidth(), (int) size.getHeight(), BufferedImage.TYPE_INT_ARGB); 

     screen.setRGB(0,0, (int) size.getWidth(), (int) size.getHeight(), rgbData, 0,(int)size.getWidth()); 

     ImageIO.write(screen, "png", new File("d:\\screen.png")); 
    } 
} 

但它不能正常工作。服务器采用它自己的快照。请提供解决方案。

回答

1

服务器需要它自己的快照...

那么,显然不能采取一些其他随机计算机的屏幕快照。这将是一个巨大的安全漏洞,如果它可以做

如果您想拍摄计算机屏幕的快照,您必须从在该计算机上执行的程序或通过某种远程桌面协议执行此操作。换句话说,必须设置/配置计算机以允许发生这种情况。


我觉得你的问题是,你只是误解的方式这两个程序是打算使用。您应该在想要查看快照的计算机上运行ScreenServer应用程序,并在要查看快照的计算机上运行ScreenClient应用程序。

你也应该知道,如果你在机器上运行ScreenServer应用程序,网络上的任何其他计算机都可以捕获它的屏幕。这是非常不安全的。

+0

否客户端系统上正在运行screenclient.java – 2011-03-21 04:59:25

+1

@vijesh - 但是'ScreenClient.java'不包含用于屏幕捕获的代码。该代码在'ScreenServer.java'中。看到说'robot.createScreenCapture(size);'? – 2011-03-21 05:18:36

+0

哦!可以提供代码将图片(快照)从客户端发送到服务器和服务器代码,以便接收相同的内容。 – 2011-03-21 05:23:19

2

您正在捕获服务器的屏幕截图。见here寻求帮助。