2010-12-03 33 views
0

ストリームデスクトップをキャプチャし、Javaのデータグラム経由で(クライアントに)送信します。次の例ではスクリーンショットを作成します。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(); 
     } 
    } 
} 

Robotクラスも使用する必要がありますか?ストリームを送信する方法はありますか。

ありがとうございました。

よろしくお願いいたします。

答えて

1

あなたはFileInputStreamを経由して書き込まれたばかりのスクリーンショットファイルを読み込むことができたり、直接ByteArrayOutputStreamにイメージを書き込むことができます:

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

は、その後、あなたはいくつかのデータをパケットに分割し、DatagramSocketを介してそれらを送信することができます(1つのUDPパッケージでは大きすぎます)。

+0

個々のパケットのいずれかが失われた場合、元のUDPメッセージは再構成できず、OSレベルのネットワークスタック内の受信側のマシンによって破棄されます。 –

1

私はこれにデータグラムを使用しません。ネットワークエラーが発生した場合、輻輳または受信者が追いつくことができない場合、データグラムが失われ、スクリーンショットが破損します。

通常の(たとえばTCP)ソケットを使用し、トランスポート層がパケットを失ってリカバリすることをお勧めします。

関連する問題