Невозможно отобразить изображение при просмотре изображений в Android через сокет - PullRequest
0 голосов
/ 19 мая 2018

Я пытаюсь сделать снимок экрана с сервера, используя класс Robot, затем отправить его на Android, а затем отобразить снимок экрана в виджете просмотра изображений.

это мой код сервера:

public static void main(String[] args) {
   Thread t = new Thread(new Runnable() {
    @Override
    public void run() {
     try {
      ServerSocket server = new ServerSocket(400);
      System.out.println("Running.....");
      while (true) {
       Socket serverSockt = server.accept();
       System.out.println("Accept.....");

       Toolkit toolKit = Toolkit.getDefaultToolkit();
       Dimension dimension = toolKit.getScreenSize();
       Robot robot = new Robot();
       BufferedImage screenshot = robot.createScreenCapture(new Rectangle(dimension));
       ImageIcon icon = new ImageIcon(screenshot);

       ObjectOutputStream oos = new ObjectOutputStream(serverSockt.getOutputStream());
       oos.writeObject(icon);
       oos.flush();
       oos.close();

       serverSockt.close();
      }
     } catch (IOException ex) {
      Logger.getLogger(VNCserver.class.getName()).log(Level.SEVERE, null, ex);
     } catch (AWTException ex) {
      Logger.getLogger(VNCserver.class.getName()).log(Level.SEVERE, null, ex);
     }
    }
   });
   t.start();
  }

и этот код клиента (android):

btnConnect.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View view) {
       Thread th = new Thread(new Runnable() {


        @Override
        public void run() {
         try {
          Socket clinetSocket = new Socket(txtIP.getText().toString(), Integer.parseInt(txtPort.getText().toString()))

          ObjectInputStream ois = new ObjectInputStream(clinetSocket.getInputStream());

          byte[] buffer = (byte[]) ois.readObject();
          img = BitmapFactory.decodeByteArray(buffer, 0, buffer.length);
          viwe.setImageBitmap(img);

          clinetSocket.close();

         } catch (IOException e) {
          e.printStackTrace();
         } catch (ClassNotFoundException e) {
          e.printStackTrace();
         }
        }
       });
       th.start();
      }
     });

Я не знаю, где это идет не так?, И яя не получаю ошибку IOException, моя первая мысль, может быть, мой клиент получает пустой поток ввода.Любая помощь ?Какую ошибку я совершил?если весь мой код неверен ... тогда как я могу заставить сервер сделать снимок экрана, затем отправить его клиенту Android и отобразить снимок экрана в режиме просмотра изображений или на холсте.

...