Отправить рабочий стол поток через дейтаграмму в Java - PullRequest
0 голосов
/ 03 декабря 2010

Я хочу захватить рабочий стол потока и отправить его (клиенту) через дейтаграммы на 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 тоже ?, Как я могу отправить поток?

Спасибо за помощь.

Привет!

Ответы [ 2 ]

2 голосов
/ 03 декабря 2010

Я бы не использовал дейтаграммы для этого.Если есть какие-либо сетевые ошибки, перегрузка или приемник не может идти в ногу, датаграммы будут потеряны, а ваши снимки экрана будут повреждены.

Лучше использовать обычный (например, TCP) сокет и разрешить транспортный уровеньиметь дело с потерянными пакетами и восстановлением.

1 голос
/ 03 декабря 2010

Вы можете прочитать в только что записанном файле снимка экрана через FileInputStream или вы можете напрямую записать изображение в ByteArrayOutputStream:

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

После этого вы можете разделить данные на несколько пакетов и отправить их через DatagramSocket (для одного пакета UDP он будет слишком большим).

...