Не в состоянии передавать изображение каждый раз через сокет 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();
}