Intento hacer un servidor en Java que envíe una imagen a mi dispositivo Android usando sockets

Estoy tratando de enviar una imagen usando un servidor Java a mi dispositivo Android pero no funciona y no sé por qué.

El código del servidor es:

public class Main {

public static void main(String argv[]) throws Exception 
{ 


  ServerSocket welcomeSocket = new ServerSocket(6789); 
  Image image = null;




  while(true) { 

       Socket connectionSocket = welcomeSocket.accept(); 

       BufferedReader inFromClient = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream())); 

       ObjectOutputStream  outToClient = new ObjectOutputStream(connectionSocket.getOutputStream()); 



       File f = new File("/resources/image.png");
       image = ImageIO.read(f);

       outToClient.writeObject( new ImageIcon(""+image) );


    } 
} 


}

Creo que el problema está en el servidor porque la aplicación de Android funciona con otro servidor.

cliente:

BufferedReader inFromUser =new BufferedReader(new InputStreamReader(System.in)); 

DataInputStream in;

BufferedInputStream buf;

DataInputStream mod ; 

Socket sc = new Socket(myIP,48000);

DataInputStream infromServer = new DataInputStream(sc.getInputStream());

mod =  infromServer;

Bitmap mPhotoPicture = BitmapFactory.decodeStream(modifiedSentence);

imagen.setImageBitmap((mPhotoPicture));

preguntado el 16 de mayo de 11 a las 19:05

¿Puedes comparar los datos enviados por los dos servidores? (el tuyo y el otro). ¿Existe alguna razón para no utilizar una capa de transporte superior? digamos, http? -

1 Respuestas

El otro servidor probablemente está enviando los datos de la imagen sin procesar (no un objeto serializado ImageIcon). Parece que BitmapFactory espera los bytes sin formato de la imagen. Intente escribir los bytes sin procesar en su socket:

FileInputStream fis = null;
int size = (int)f.length();
byte[] bytes = new byte[size];
fis = new FileInputStream( f );
int read = fis.read( bytes );

connectionSocket.getOutputStream().write( bytes );
connectionSocket.getOutputStream().flush();

Obviamente, deberá agregar algo de detección y manejo de errores para que esto sea robusto.

contestado el 16 de mayo de 11 a las 23:05

Soy nuevo en esto ... puse el código y no parece que funcione. Dgenoves

¿No funciona cómo? ¿No se compila o no funciona correctamente? - sarumont

no funciona correctamente o quizás estoy haciendo algo mal. si pudieras guiarme un poco - Dgenoves

¿Existe una excepción de algún tipo en el lado del cliente que decodifica la imagen? ¿O simplemente no está obteniendo los datos? Intente agregar un poco de depuración u olfatear los paquetes (tcpdump / wirehark) para asegurarse de que los datos lleguen del servidor al cliente. - sarumont

He estado trabajando en un nuevo servidor y cliente ... tengo el mismo problema al intentar usar su idea, pero ¿dónde coloca los datos del archivo en los bytes? - Dgenoves

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.