2010-12-03 52 views
0

Je souhaite capturer le bureau de flux et l'envoyer (à un client) via des datagrammes en Java. L'exemple suivant fait une capture d'écran.Envoyer un flux de bureau via datagramme en Java

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(); 
     } 
    } 
} 

Dois-je aussi utiliser la classe Robot?, Comment puis-je envoyer le flux?

Merci pour votre aide.

Cordialement!

Répondre

1

Vous pouvez lire dans le fichier de capture d'écran vient d'écrire au moyen d'un FileInputStream ou vous pouvez écrire directement l'image dans un ByteArrayOutputStream:

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

Ensuite, vous pouvez diviser les données en plusieurs paquets et les envoyer par un DatagramSocket (pour un paquet UDP, il sera trop grand).

+0

mais si l'un des paquets individuels est perdu, le message UDP d'origine ne peut pas être réassemblé et est ignoré par la machine réceptrice dans la pile réseau au niveau du système d'exploitation. –

1

Je n'utiliserais pas de datagrammes pour cela. S'il y a des erreurs de réseau, l'encombrement ou le récepteur ne peut pas suivre, les datagrammes seront perdus et vos captures d'écran seront corrompues.

Il est préférable d'utiliser une socket régulière (par exemple TCP), et de laisser la couche de transport gérer les paquets perdus et la récupération.