无法通过Android套接字每次传输图像

无法通过Android套接字每次传输图像,android,sockets,multimedia,Android,Sockets,Multimedia,我需要开发一个应用程序,将图像从android连续传输到android,并在客户端作为视频接收。我有两个应用程序,其中一个(服务器)将通过wifi连接的套接字发送文件,如果客户端接收到发送的图像,则其他客户端将接收到该文件…目前我只是将其保存在客户端的一个位置…我能够正确接收文件…但问题是我无法始终正确发送所有文件。。。 这意味着图像文件将在某一时间被传输,而在某一时间我将无法接收,当我无法接收时,我会得到一个异常 :java.io.UTFDataFormatException:…并且该文件未在

我需要开发一个应用程序,将图像从android连续传输到android,并在客户端作为视频接收。我有两个应用程序,其中一个(服务器)将通过wifi连接的套接字发送文件,如果客户端接收到发送的图像,则其他客户端将接收到该文件…目前我只是将其保存在客户端的一个位置…我能够正确接收文件…但问题是我无法始终正确发送所有文件。。。 这意味着图像文件将在某一时间被传输,而在某一时间我将无法接收,当我无法接收时,我会得到一个异常 :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):at java.nio.charset.ModifiedUtf8.decode(ModifiedUtf8.java:53) 11-18 10:38:17.359:W/System.err(1001):在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)

当我收到此异常时,文件未保存

我测试过的许多场景都是通过捕获图像、保存和发送……以及压缩图像和发送……在这些场景中,有些场景很少会发生……我无法理解

发件人代码: File myFile=新文件(sdCard+“/image/image.jpg”)
字节[]mybytearray=新字节[(int)myFile.length()]

接收器代码: File dir=新文件(sdCard.getAbsolutePath()+“/dir1/dir2”); dir.mkdirs()

感谢和问候,
Divya.K

我被困在这件事上,我结合了几天的搜索,找到了这个。。。试试看,看是否适合你

  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();
        }

除了你的bug,如果你不断地打开和关闭插座,你将无法以任何正常的方式传输视频。延迟将是无望的嗨Martin James,感谢您的回复。除此之外,问题的解决方案是通过套接字将视频从android传输到android。因为之前我在发布时尝试使用mediarecorder属性。最后我能够保存录制的视频文件。但是我无法播放视频。视频已编码。它能够使用第三方媒体播放器(如MX播放器)播放。但不是默认的媒体播放器。因此,我开始这样实施。我已经尝试了许多在谷歌找到的方法,但没有合适的解决方案。因此,请告诉我如何通过wifi通过套接字将安卓系统的在线视频流传输到安卓系统…有什么想法吗?我没有尝试像Sphydroid IP摄像头那样实施通过创建RTP数据包和al..我需要在没有任何中间服务器的情况下实现..仅通过套接字..直接流式传输..那么我如何继续实现。。。
            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();
  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();
        }