通过Socket发送图片来索引边界性感



我想制作一个小程序,为Desktop制作实时流。应该这样,你可以将图片发送到echo服务器,他会将其响应到客户端。在那里你可以绘制图像。并排。所以它就像一部电影(或者类似的东西)。但我总是得到一个关于性观念的索引。错误在哪里,或者我如何改进我的程序。

ImageIO.write行显示错误

//客户端主

公共类主{

public static void main(String[] args) {
    Frame frm = new Frame();
    Frame.Client client;
    frm.setLayout(null);
    frm.setDefaultCloseOperation(Frame.EXIT_ON_CLOSE);
    frm.setResizable(false);
    frm.setSize(1600,900);
    frm.setVisible(true);

}

}

//获取并发送桌面图像

公共类桌面捕获{

Robot robo;
BufferedImage screenImage;
Rectangle bounding;
public desktopCapture() {
    try {
        bounding = new Rectangle(0,0,1600,900);
        robo = new Robot();
    } catch (AWTException e) {e.printStackTrace();}
}
public void sendScreenCapture(Socket client) {
    screenImage = robo.createScreenCapture(bounding);
    try {
        ImageIO.write(screenImage, "png", client.getOutputStream());
    } catch (IOException e) {e.printStackTrace();}
}

}

//在actionListener对象的Frame two函数中,所以我可以说谁流式传输他的Desktop,谁只将图像传输到。public void readImage(){而(true){

            try {
                while((screenImage = ImageIO.read(in)) != null){
                    repaintScreen();
                }
            } catch (IOException e) {e.printStackTrace();}
        }
    }

public void sendImage(){

        try {
            while(true){
            dC.sendScreenCapture(client);
            System.out.println("read1");
            while((screenImage = ImageIO.read(in)) != null){
            System.out.println("read2");
            ImageIO.write(screenImage, "png", new File("image1.png"));
            Thread.sleep(250);
            }
            repaintScreen();
            screenImage = null;
            }   
            } catch (IOException | InterruptedException e) {e.printStackTrace();}
     }
    }
}

//客户端的线程

公共类处理程序实现Runnable{

Socket client;
OutputStream out;
InputStream in; 
PrintWriter writer;
BufferedImage image;
public handler(Socket client) {
    this.client = client;
}
@Override
public void run() {
    try {
        in = client.getInputStream();       
    BufferedReader reader = new BufferedReader(new InputStreamReader(in));
    while(true) {
        System.out.println("write1");
        while((image = ImageIO.read(in)) != null){
            System.out.println("write2");
    for(int i = 1;i <= Server.connectionArray.size();i++){
        Socket TEMP_SOCK = (Socket)Server.connectionArray.get(i-1);
     out = TEMP_SOCK.getOutputStream();
     writer = new PrintWriter(out);
    ImageIO.write(image, "png", TEMP_SOCK.getOutputStream());
    System.out.println("write3");
        }
      image = null;
     }
    }
    } catch (IOException e) {e.printStackTrace();}
}

}

我会将您的for循环更改为:

int count = Server.connectionArray.size()
int index  = count - 1; 
for(int i = 0;i < count; i++){
        Socket TEMP_SOCK = (Socket)Server.connectionArray.get(index);
        out = TEMP_SOCK.getOutputStream();
        writer = new PrintWriter(out);
        ImageIO.write(image, "png", TEMP_SOCK.getOutputStream());
        System.out.println("write3");
  }

最新更新