2010-12-03 6 views
0

Ich möchte den Stream-Desktop erfassen und über Datagramme in Java an einen Client senden. Das folgende Beispiel erstellt einen Screenshot.Desktop-Stream über Datagramm in Java senden

import java.awt.*; 
import java.awt.image.*; 
import java.io.*; 
import javax.imageio.ImageIO; 
public class Captura{ 
    static public void captureScreen(String fileName) throws Exception { 
     Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize(); 
     Rectangle screenRectangle = new Rectangle(screenSize); 
     Robot robot = new Robot(); 
     BufferedImage image = robot.createScreenCapture(screenRectangle); 
     ImageIO.write(image, "png", new File(fileName)); 
    } 
//---- 
    public static void main(String[] args) { 
     try{ 
      System.out.println("[ Captura iniciada ]"); 
      //sleep 5 sg 
      Thread.currentThread().sleep(5*1000); 
      String FILENAME="/home/jose/Desktop/captura01.png"; 
      Captura.captureScreen(FILENAME); 
      System.out.println("[ Captura finalizada ]"); 
     } 
     catch(Exception e) 
     { 
      e.printStackTrace(); 
     } 
    } 
} 

Muss ich auch die Roboterklasse verwenden ?, Wie kann ich den Stream senden?

Danke für Hilfe.

Grüße!

Antwort

1

Sie können über einen Fileinputstream in der gerade geschrieben Screenshot Datei lesen oder Sie können das Bild in ein ByteArrayOutputStream direkt schreiben:

ByteArrayOutputStream buffer = new ByteArrayOutputStream(); 
    ImageIO.write(image, "png", buffer); 
    byte[] data = buffer.toByteArray(); 

Danach können Sie die Daten in mehrere Pakete aufgeteilt und sie durch eine DatagramSocket schicken (für ein UDP-Paket wird es zu groß).

+0

Wenn jedoch eines der einzelnen Pakete verloren geht, kann die ursprüngliche UDP-Nachricht nicht erneut zusammengestellt werden und wird vom empfangenden Rechner im Netzwerkstapel auf Betriebssystemebene verworfen. –

1

Ich würde Datagramme nicht dafür verwenden. Wenn es Netzwerkfehler gibt, Staus oder der Empfänger nicht mithalten kann, gehen Datagramme verloren und Ihre Screenshots werden beschädigt.

Es ist besser, einen normalen (z. B. TCP) Socket zu verwenden und die Transportschicht mit verlorenen Paketen und der Wiederherstellung fertig zu werden.

Verwandte Themen