通过套接字将字节流数组转换为位图图像失败

时间:2018-04-05 07:46:44

标签: java android sockets bitmap android-glide

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

以下是用于发送捕获的屏幕截图的java服务器代码。

socket2 = serverSocket2.accept();             System.out.println("客户已连接");

         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屏幕截图网址:https://i.imgur.com/167Vje3.png

1 个答案:

答案 0 :(得分:0)

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

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

进一步检查您发送的字节数和接收的字节数。

那是为了服务器。同样在接收方,你不能使用读者和字符串。