2011-03-21 5 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 работает на клиентской системе –

+1

@vijesh - но 'ScreenClient.java' не содержит код для захвата экрана. Этот код находится в 'ScreenServer.java'. См. Строку, которая говорит 'robot.createScreenCapture (size);'? –

+0

oh!. Предоставьте код для отправки изображения (моментального снимка) от клиента к серверу. И код сервера для получения того же. –

2

Вы снимаете снимок экрана сервера. см. here за помощью.

Смежные вопросы