Отправка изображений через сокеты Java - PullRequest
0 голосов
/ 08 апреля 2019

Я делаю простое приложение для отправки изображений на Java, и у меня есть некоторые проблемы, которые я не знаю, как их решить. Основная проблема заключается в том, что когда я отправляю большое изображение (около 1000 * 600), изображение не принимается полностью, я имею в виду часть изображения, которая не похожа на исходную картинку. Я думаю, что это проблема переполнения, но я прошу другую точку зрения. Спасибо!

originalImage: https://imgur.com/hK8zwX1 Полученное изображение: https://imgur.com/8O2I0rc

sendImage

    public void sendFile(File inputFile) throws IOException {
        try {
            Socket socket = new Socket("localhost", 1414);
            OutputStream outputStream = socket.getOutputStream();
            System.out.println("Conexion establecida");
            File f = inputFile;
            BufferedImage image = ImageIO.read(f);
            ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
            ImageIO.write(image, "jpg", byteArrayOutputStream);

            byte[] size = ByteBuffer.allocate(1024).putInt(byteArrayOutputStream.size()).array();
            outputStream.write(size);
            outputStream.write(byteArrayOutputStream.toByteArray());
            outputStream.flush();
            System.out.println("Flushed: " + System.currentTimeMillis());
            Thread.sleep(1);
            System.out.println("Closing: " + System.currentTimeMillis());
            socket.close();
        } catch (InterruptedException ex) {
            Logger.getLogger(ButPanel.class.getName()).log(Level.SEVERE, null, ex);
        }

    }

Клиент:

try {
                    ServerSocket serverSocket = new ServerSocket(1414);
                    while (true) {
                        Socket socket = serverSocket.accept();
                        InputStream inputStream = socket.getInputStream();

                        System.out.println(socket.getInetAddress() + " conectandose..." + System.currentTimeMillis());
                        byte[] sizeAr = new byte[1024];
                        inputStream.read(sizeAr);
                        int size = ByteBuffer.wrap(sizeAr).asIntBuffer().get();

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

                        BufferedImage image = ImageIO.read(new ByteArrayInputStream(imageAr));
                        System.out.println("Received " + image.getHeight() + "x" + image.getWidth() + ": " + System.currentTimeMillis());
                        ImageIO.write(image, "jpg", new File("C:\\Users\\Public\\Pictures\\imgTemp.jpg"));
                        File f = new File ("C:\\Users\\Public\\Pictures\\imgTemp.jpg");
                        System.out.println("Closing: " + System.currentTimeMillis());
                        this.repaint();
                        serverSocket.close();
                    }
                } catch (IOException ex) {
                    System.err.println(ex.getMessage());
                }
...