2010-12-03 22 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給他們(對於一個UDP包,它將會太大)。

+0

但如果任何單個分組丟失然後不能被重新組裝原始UDP消息並且由接收機在OS級網絡堆棧丟棄。 – 2010-12-04 00:24:31

1

我不會爲此使用數據報。如果有任何網絡錯誤,擁塞或接收器無法跟上,數據報將會丟失,您的屏幕截圖將被破壞。

這是更好地使用常規的(例如TCP)套接字,並讓傳輸層處理數據包丟失和恢復。