通过套接字将字节流数组转换为位图图像不成功

Unsuccessful conversion of byte stream array to bitmap image via socket

我正在从一台机器上托管的 java 服务器发送截图。屏幕截图将以字节流数组的形式通过套接字发送到 android 设备。但是我在 android 设备中获取的数组没有转换为位图。下面我附上 java 服务器代码、android 代码和 logcat.

这里是 java 服务器代码,用于发送捕获的屏幕截图。

socket2 = serverSocket2.accept(); System.out.println("A client has connected");

         Robot robot = new Robot();
         String format = "jpg";
         String fileName = "FullScreenshot." + format;

         Rectangle screenRect = new Rectangle(Toolkit.getDefaultToolkit().getScreenSize());
            BufferedImage screenFullImage = robot.createScreenCapture(screenRect); // captured image
            ImageIO.write(screenFullImage, format, new File("C:\Users\User\Desktop\"+fileName));
            ByteArrayOutputStream bao=new ByteArrayOutputStream();
            ImageIO.write(screenFullImage,format,bao);//ye

            byte[] ar=bao.toByteArray();
            System.out.println("Parental block is executed");        
            mainWriter = new BufferedWriter(new OutputStreamWriter(socket2.getOutputStream()));
            mainWriter.write(java.util.Arrays.toString(ar));
            mainWriter.newLine();
            mainWriter.flush();

         System.out.println("A full screenshot saved!");

         serverSocket2.close();
         socket2.close();
         mainWriter.close();
         Testing t = new Testing();

这是我获取字节流数组的 android 代码。

public void PCConnection(final View view) // just for this activity
{
    new Thread()
    {

        public Socket socket;

        public void run()
        {

            try
            {

                Log.i(DebuggString,"Attempting to connect to the server");
                socket = new Socket(hostname,60120);
                Log.i(DebuggString,"Connection established");
                mivScreenShot = (ImageView) findViewById(R.id.ivScreenShot);
                //Receive message from the server
                //Message is stored in the br.readLine()
                brr = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                img = brr.readLine();
                Log.d("Image", img);//yeh byte[] display karta h
                final ByteArrayInputStream arrayInputStream = new ByteArrayInputStream(img.getBytes());
                arrayInputStream.reset();
                this.socket.close();

                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        Glide.with(ParentalControl.this)
                                .load(bitmap)
                                .asBitmap()
                                .into(mivScreenShot);
                    }
                });
                if(bitmap!=null)
                {
                    Log.d(DebuggString,"Bitmap is not null "); // oh ok koi nai
                }
                else
                {
                    Log.d(DebuggString,"Bitmap is null");
                }





            }
            catch (IOException e )
            {
                e.printStackTrace();
            }

        }
    }.start();
}

我附上 logcat 截图 url: https://i.imgur.com/167Vje3.png

mainWriter = new BufferedWriter(new OutputStreamWriter(socket2.getOutputStream()));
        mainWriter.write(java.util.Arrays.toString(ar));

您不能使用 writer 和字符串来发送 jpg 图像,因为它们仅用于文本。干掉他们。也不要使用 ByteOutputStream,因为您可以直接将位图压缩到套接字的输出流。

进一步检查您发送了多少字节以及接收了多少字节。

那是针对服务器的。同样在接收方,您不能使用阅读器和字符串。