Foros del Web » Programando para Internet » Android »

Enviar multiples imagenes desde un servidor java a un cilente android

Estas en el tema de Enviar multiples imagenes desde un servidor java a un cilente android en el foro de Android en Foros del Web. Hola a todos, he creado un modelo servidor (Java) / cliente (Android) mediante el cual, el servidor (Java) enviara imagenes de un directorio y el ...
  #1 (permalink)  
Antiguo 11/12/2012, 10:55
 
Fecha de Ingreso: noviembre-2011
Mensajes: 12
Antigüedad: 12 años, 5 meses
Puntos: 0
Pregunta Enviar multiples imagenes desde un servidor java a un cilente android

Hola a todos, he creado un modelo servidor (Java) / cliente (Android) mediante el cual, el servidor (Java) enviara imagenes de un directorio y el cliente (Android) las recibe y las almacena en la tarjeta SD.

El problema viene cuando intento transferir mas de 1 imagen, ya que se bloquea y no consigue enviar las imagenes y no entiendo porque...

Se bloque en la parte cliente (android) en esta linea: Bitmap bitmap = BitmapFactory.decodeStream(in);


Servidor (Java)

Código:
try {
	servidor = new ServerSocket(puerto);
				
	while(true){
		try{
			esperarConexion();
					
			envioDatos = new
DataOutputStream(conexion.getOutputStream());

		        envioDatos.writeInt(Principal.getDirectorioImagen().list().length);

			System.out.println("Se van a enviar "+Principal.getDirectorioImagen().list().length+" imagenes");
						
			do{
				// Enviamos las imagenes
				System.out.println("Preparando para enviar imagen "+"detMov"+j+".jpg");
				if( j <= Principal.getDirectorioImagen().list().length){
				image = (BufferedImage) ImageIO.read(new File(Principal.getDirectorioImagen(),"detMov"+j+".jpg"));
								
				if (image != null) {
					try{
						System.out.println("Enviando imagen "+"detMov"+j+".jpg...");
						OutputStream out = conexion.getOutputStream();
						ImageIO.write(image, "JPEG", out);
						System.out.println("Se ha enviado: "+"detMov"+j+".jpg");
						out.flush();
						j++;
					} catch (IOException excepcionES ) {
						System.out.println( "\nError al escribir el objeto" );
					}
				} else {
					System.out.println("No se ha podido leer la imagen...");
				}
			}
							
			// Espero hasta que cliente almacene la imagen
			System.out.println("Esperando confirmacion del cliente...");
			reciboDatos = new DataInputStream(conexion.getInputStream());
			modo = reciboDatos.readUTF();
			System.out.println("Confirmacion recibida: "+modo);
							
			}while(modo.equals("OK"));
						
			} catch (EOFException exceptionES) {
				exceptionES.printStackTrace();
			} finally {
				cerrarConexion();
			}
		}
				
		} catch (IOException e) {
			e.printStackTrace();
		}
Cliente (Android)

Código:
try {
	cliente = new Socket(ip,puerto);
} catch (UnknownHostException e1) {
	e1.printStackTrace();
} catch (IOException e1) {
	e1.printStackTrace();
}
			
// Recibimos el numero de imagenes que van a ser recibidas.
			
try {
	reciboDatos = new DataInputStream(cliente.getInputStream());
	imgRecibidas = reciboDatos.readInt();
} catch (Exception e) {
	e.printStackTrace();
}
			
Log.e("DescargarDatos", "Se van a descargar "+imgRecibidas+" imagenes");
			
			
			do{
				try {
					InputStream in = cliente.getInputStream();
					Log.e("DescargarDatos", "Entrando en decodeStream");
					Bitmap bitmap = BitmapFactory.decodeStream(in);
					in.reset();
					Log.e("DescargarDatos", "Saliendo de decodeStream");
					
					if(bitmap==null)
						Log.e("DescargarDatos", "bitmap ha devuelto null!");
					else
						Log.e("DescargarDatos", "Bitmap no ha devuelto null!");
					
					// Carpeta dodne guardamos la captura
					// En este caso, la raiz de la SD Card
					File sd = Environment.getExternalStorageDirectory();
					dir = new File(sd + "/Videovigilancia/");
					
					// El archivo que contendra la captura
					File f = new File(dir, "deteccionMovimiento"+ dir.list().length + ".jpg");
					
					Log.e("DescargarDatos", "Recibiendo imagen...");
					f.createNewFile();
					OutputStream os = new FileOutputStream(f);
					bitmap.compress(Bitmap.CompressFormat.JPEG, 90, os);
					os.close();
					
					cuenta++;
					//in.close();
				} catch (OptionalDataException e1) {
					e1.printStackTrace();
				} catch (IOException e1) {
					e1.printStackTrace();
				}
				
				Log.e("DescargarDatos", "Imagen "+cuenta+" descargada correctamente!");
				
				
				Log.e("DescargarDatos", "Enviando confirmacion al servidor...");
				try {
					envioDatos = new DataOutputStream(cliente.getOutputStream());
					
					if(cuenta != imgRecibidas)
						envioDatos.writeUTF("OK");
					else
						envioDatos.writeUTF("cliente finaliza conexion");
				} catch (IOException e) {
					e.printStackTrace();
				}
				Log.e("DescargarDatos", "Enviada confirmacion al servidor correctamente");
				Log.e("DescargarDatos", "----------------------------------------------------------");
				
			}while(cuenta != imgRecibidas);

Etiquetas: java, sockets
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:29.