使用Java套接字发送时图像不完整

问题描述 投票:0回答:1

我想将图像发送到套接字服务器,但是没有完全到达

首先,我创建一个屏幕截图,该屏幕截图应使用以下代码通过套接字发送到服务器:

try {
            Robot robot = new Robot();
            Rectangle rectangle = new Rectangle(Toolkit.getDefaultToolkit().getScreenSize());
            File file = new File("original.png");
            BufferedImage bufferedImage = robot.createScreenCapture(rectangle);
            try {
                ImageIO.write(bufferedImage, "png", file);
            } catch (IOException e) {
                e.printStackTrace();
            }
            socket(robot.createScreenCapture(rectangle));
        } catch (AWTException ex) {
            System.err.println(ex);
        }

void socket(BufferedImage bufferedImage) {
    try {
        Socket socket = new Socket("localhost", 20000);
        OutputStream outputStream = socket.getOutputStream();

        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
        ImageIO.write(bufferedImage, "jpg", byteArrayOutputStream);

        byte[] size = ByteBuffer.allocate(4).putInt(byteArrayOutputStream.size()).array();
        outputStream.write(size);
        outputStream.write(byteArrayOutputStream.toByteArray());
        outputStream.flush();

        System.out.println(byteArrayOutputStream.size());

        try {
            sleep(1200);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        socket.close();
        System.exit(0);
    } catch (IOException e) {
        e.printStackTrace();
    }
}

The Original Screenshot

然后服务器应使用以下代码保存此代码:

try {
        ServerSocket serverSocket = new ServerSocket(20000);
        System.out.println("-------------------------------------------------------");
        while ( true ) {
            Socket clientSocket = null;
            try {
                clientSocket = serverSocket.accept();
                handleConnection(clientSocket);
            }
            catch (IOException e) {
                e.printStackTrace();
            }
            finally {
                if (clientSocket != null) {
                    try {
                        clientSocket.close();
                    } catch (IOException e) {
                    }
                }
            }
        }
    } catch (UnknownHostException uhe) {
        System.out.println(uhe);
    } catch (IOException ioe) {
        System.out.println(ioe);
    }
static void handleConnection(Socket clientSocket) {
    try {
        OutputStream socketoutstr = clientSocket.getOutputStream();
        OutputStreamWriter osr = new OutputStreamWriter(socketoutstr);
        BufferedWriter bw = new BufferedWriter(osr);

        InputStream socketinstr = clientSocket.getInputStream();
        InputStreamReader isr = new InputStreamReader(socketinstr);
        BufferedReader br = new BufferedReader(isr);


        byte[] sizeAr = new byte[4];
        socketinstr.read(sizeAr);
        int size = ByteBuffer.wrap(sizeAr).asIntBuffer().get();

        byte[] imageAr = new byte[size];
        socketinstr.read(imageAr);

        BufferedImage image = ImageIO.read(new ByteArrayInputStream(imageAr));
        ImageIO.write(image, "png", new File("send.png"));

        System.out.println("111");

        bw.write("");
        bw.newLine();
        bw.flush();

        bw.close();
        br.close();
        clientSocket.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

The sent picture

发送的图片需要更多空间:

没有人知道一种解决方案,我可以不更改任何内容地发送图片吗?

java serversocket
1个回答
0
投票

我看到两个问题

© www.soinside.com 2019 - 2024. All rights reserved.