开发者

Send Desktop stream via datagram in Java

I wan开发者_如何学JAVAt to capture the stream desktop and send it (to a client) via datagrams in Java. The following example makes a screenshot.

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

Do I have to use the Robot class too?, How I can send the stream?

Thank's for help.

Regards!


I wouldn't use datagrams for this. If there are any network errors, congestion or the receiver cannot keep up, datagrams will be lost and your screenshots will be corrupted.

It is better to use a regular (e.g. TCP) socket, and let the transport layer deal with lost packets and recovery.


You can read in the just written screen shot file via an FileInputStream or you could directly write the image into a ByteArrayOutputStream:

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

Afterwards you can split the data into several packets and send them through a DatagramSocket (for one UDP package it will be too large).

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜