Не в состоянии передавать изображение каждый раз через сокет Android

Мне нужно разработать приложение для непрерывной передачи изображения с Android на Android, которое должно быть получено в виде видео на стороне клиента. И у меня есть два приложения, одно из которых (сервер) будет отправлять файл через сокет, подключенный по Wi-Fi, а другое - клиентская сторона должна получить отправленное изображение... в настоящее время я просто сохраняю его в одном месте на клиентской стороне... могу получить файл правильно... но проблема в том, что я не могу правильно отправить все файлы время... Означает, что некоторое время файл изображения будет передан, и через некоторое время я не смогу получить, а когда я не смогу получить, я получаю исключение как: java.io.UTFDataFormatException:... и файл не записывается и сохраняется на принимающей стороне...

Если я не могу получать изображения непрерывно... я могу подумать, что в коде есть какая-то проблема... но я могу передавать его несколько раз... а иногда не могу передать... я не могу понять, что вопрос... плз любое руководство

ошибка:

11-18 10: 38: 17.351: W / System.err (1001): java.io.UTFDataFormatException: неверный второй или третий байт при 2 11-18 10:38:17.359: W/System.err(1001): в java.nio.charset.ModifiedUtf8.decode(ModifiedUtf8.java:53) 11-18 10:38:17.359: W/System.err(1001): at java.io.DataInputStream.decodeUTF(DataInputStream.java:444) 11-18 10:38:17,359: W / System.err (1001): в java.io.DataInputStream.decodeUTF(DataInputStream.java:438) 11-18 10:38:17.359: W/System.err(1001): в java.io.DataInputStream.readUTF(DataInputStream.java:433)

и файл не сохраняется, когда я получаю это исключение..

Множество сценариев, которые я протестировал, захватывая изображение, сохраняя и отправляя... а также сжимая изображение и отправляя... в этих сценариях некоторые очень редко происходят... я не могу понять это...

Код отправителя: файл myFile = новый файл (sdCard + "/ image / image.jpg");
byte [] mybytearray = new byte [(int) myFile.length ()];

           FileInputStream fis = new FileInputStream(myFile);  
           BufferedInputStream bis = new BufferedInputStream(fis);  
           //bis.read(mybytearray, 0, mybytearray.length);  

           DataInputStream dis = new DataInputStream(bis);     
           dis.readFully(mybytearray, 0, mybytearray.length);  

           OutputStream os = socket.getOutputStream();  
           tv.setText("Send file name size to server");

           //Sending file name,file size and to the server  
           DataOutputStream dos = new DataOutputStream(os);     
           dos.writeUTF(myFile.getName());     
           dos.writeLong(mybytearray.length);     
           dos.write(mybytearray, 0, mybytearray.length);     
           dos.flush();  
           socket.close();
           tv.setText("Socket Close");

           tv.setText("Sent");

Код получателя: Файл dir = новый файл (sdCard.getAbsolutePath() + "/dir1/dir2"); dir.mkdirs();

            String fileName = clientData.readUTF();   
            File file = new File(dir,fileName);

            OutputStream output = new FileOutputStream(file);     
            long size = clientData.readLong();     
            byte[] buffer = new byte[1024];     
            while (size > 0 && (bytesRead = clientData.read(buffer, 0, (int)Math.min(buffer.length, size))) != -1)     
            {     
                output.write(buffer, 0, bytesRead);     
                size -= bytesRead; 
                System.out.println("Writing");
            }  
             // status.setText("Received");
            // Closing the FileOutputStream handle  
            output.close();
            s.close();

Спасибо и всего наилучшего, Дивья.К

1 ответ

Я застрял на этой вещи, я объединил несколько дней моего поиска и достиг этого... Попробуйте и посмотрите, работает ли у вас..

  Bitmap myBitmap = null;
        try {
            File imgFile = new File(imgPath);
            if (imgFile.exists()) {

                File image = new File(imgPath, "imagename.jpg");
                BitmapFactory.Options bmOptions = new BitmapFactory.Options();
                myBitmap = BitmapFactory.decodeFile(image.getAbsolutePath(),bmOptions);
                //myBitmap = Bitmap.createScaledBitmap(bitmap,parent.getWidth(),parent.getHeight(),true); //uncomment this if you want to scale the image
                //imageView.setImageBitmap(bitmap);//to set bitmap to image view
            }

            Socket sock = new Socket("192.168.1.1", 80);//ip adress and port number
                 ByteArrayOutputStream bos = new ByteArrayOutputStream();
            if (myBitmap != null) {
                myBitmap.compress(Bitmap.CompressFormat.PNG, 0 /*ignored for PNG*/, bos);
            }
            byte[] bitmapdata = bos.toByteArray();
            ByteArrayInputStream bs = new ByteArrayInputStream(bitmapdata);


            BufferedInputStream bis = new BufferedInputStream(bs);
            bis.read(bitmapdata, 0, bitmapdata.length);
            OutputStream os = sock.getOutputStream();
            System.out.println("Sending...");
            os.write(bitmapdata, 0, bitmapdata.length);
            os.flush();
            sock.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
Другие вопросы по тегам