2017-10-14 10 views
1

J'ai une application Serveur sur mon PC qui lit un fichier jpg et l'envoie via une socket à l'appareil Android. Le problème est que lorsque le périphérique Android reçoit un tableau d'octets, il ne peut pas être converti en bitmap. J'ai créé une application PC pour recevoir ce même tableau et les données reçues sont différentes de celles de l'androïde même si j'utilise le même code pour le recevoir.Tableau d'octets incohérents lus lors de l'envoi de PC vers PC et de PC vers Android

D'où mon hypothèse est que je dois en quelque sorte besoin de le lire différemment sur android.

PC serveur Java

 ServerSocket serverSocket = new ServerSocket(PORT); 
     Socket clientSocket = serverSocket.accept(); 

     BufferedImage image = ImageIO.read(new File("D:\\test1\\test.jpg")); 
     ByteArrayOutputStream byteArrayoutputStream = new ByteArrayOutputStream(); 
     ImageIO.write(image, "jpg", byteArrayoutputStream); 
     OutputStream outputStream = clientSocket.getOutputStream(); 

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

     Thread.sleep((long)5000); 
     clientSocket.close(); 

Récepteur Android

DataInputStream inputStream = new DataInputStream(serverSocket.getInputStream()); 

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

    byte[] imageAr = new byte[size]; 
    inputStream.read(imageAr); 
    System.out.println(imageAr.toString()); 
    bMap = BitmapFactory.decodeByteArray(imageAr, 0, imageAr.length);//this returns null 

Répondre

0

Vous ne recevez probablement la chose, Au lieu de cela:

inputStream.read(imageAr); 

essayer:

inputStream.read(imageAr, 0, size); 

la deuxième forme attendra jusqu'à ce que les octets de taille soient reçus.

AJOUTÉE

font également la même chose sur la première lecture()

à la place: inputStream.read(sizeAr); essayer inputStream.read(sizeAr, 0, 4);

Également obtenir et vérifier inputStream.read() valeurs de retour, il dit combien les octets étaient vraiment lus.

+0

Malheureusement n'a pas aidé, toujours eu exactement le même tableau d'octets. –