2011-03-21 7 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

클라이언트 시스템 –

+1

@vijesh에서 screenclient.java가 실행되고 있지 않습니다.하지만 'ScreenClient.java'에는 화면 캡처를위한 코드가 포함되어 있지 않습니다. 그 코드는'ScreenServer.java'에 있습니다. 'robot.createScreenCapture (size);'라는 라인을 보시오. –

+0

오!. 사진 (스냅 샷)을 클라이언트에서 server.and 서버 코드로 전송하여 수신하도록 코드를 제공 할 수 있습니까? –

2

서버의 스크린 샷을 캡처하고 있습니다. 도움을 받으려면 here을 참조하십시오.