Título: enviar un BufferedImage a travez de socket Publicado por: egyware en 22 Agosto 2007, 22:55 pm ola estoy haciendo un programa (un casi troyano) que toma screenshoot del server y los envia al client pero el problema es que no se como hacerlo y he buscado en google pero me he encontrado el mismo problema en otro idioma pero igual dejo un post aqui si alguien tiene una solucion mi problema es como un objeto BufferedImage lo paso a outputStream y lo paso por un socket y en el client de un inputStream a BufferedImage y pintarlo en pantalla
gracias de antemano adiozzzz Título: Re: enviar un BufferedImage a travez de socket Publicado por: Casidiablo en 23 Agosto 2007, 19:22 pm Lo primero a tener en cuenta es que para que un objeto pueda ser usado por sockets, es necesario que dicho objeto sea Serializable, es decir que implemente dicha clase. El problema es que la clase BufferedImage no implementa la interfaz Serializable.
De momento no se me ocurre nada, voy a echarle un vistazo a ver de que va la vaina. Un saludo! Título: Re: enviar un BufferedImage a travez de socket Publicado por: Yshua en 23 Agosto 2007, 19:40 pm yo ya eh hecho eso.
hay como en todo muchas formas. una es crear un objeto de ImageIcon, q si es serializable, y pasarlo por un socket con las clases ObjectInputStream y ObjectOutputStream, sin embargo, no recomiendo para nada este metodo pues cada imageIcon pesa unos 3 Mb, por lo q es demasiado lento. otra forma entonces es convertir el BufferedImage a un byte[] eso se hace creando un objeto de ByteArrayOutputStream , y pasarlo como parametro al metodo estatico ImageIO.write()(este metodo tiene mas parametros) luego que escribiste la imagen en el ByteArrayOutputStream esta clase tiene un metodo toByteArray y retorna un byte[], luego ese byte[] lo envias f{acilmente por sockets. es algo como eso. esa si la recomiendo. cada imagen, dependiendo de la resolucion estara entre los 50 y los 200 Kb. no explico como hacerlo explicitamente por q no lo recuerdo exacto en este momento. pero puedes mirar como hacerlo. Título: Re: enviar un BufferedImage a travez de socket Publicado por: Casidiablo en 23 Agosto 2007, 21:07 pm Inspirado en las bonitas palabras de Yshua, he intentado lo que dice y el resultado es el siguiente:
Clase Receptor.java: Se queda a la espera/escucha de conexiones en determinado puerto y recibe una imagen. En este caso he guardado la imagen en un archivo, pero las posibilidades son muchas: Código
Clase Cliente.java: Ésta clase toma una captura de la pantalla, y luego envía dicha imágen como un arreglo de bytes al servidor especificado. Código
El programa funciona!!! Pero... me sale una excepción que no he sabido depurar: Código: java.io.EOFException Eso sucede después de que la imágen ya ha sido creada, y el problema es que la imágen no queda bien al 100% o algo raro pasa, es decir, puedes ver la imagen con el Gimp o Paint (que comparación tan burda XD), pero con el visor de imágenes de Windows no. Y pues no sé como solucionar el problema :-\ Título: Re: enviar un BufferedImage a travez de socket Publicado por: Yshua en 24 Agosto 2007, 22:03 pm que bien q te haya sido de ayuda, lo q escribí.
para lo de la excepcion trata cerrando el flujo out. no se no se me ocurre nada más. Título: Re: enviar un BufferedImage a travez de socket Publicado por: egyware en 25 Agosto 2007, 17:10 pm gracias por la ayuda, ayer estuve como a las 4 de la mañana(-4 GMT) tratando de enviar el bufferedImage mejor dicho recibirlo porque lo enviava pero no lo podia recibir y incluso invente un metodo pero no funciono (guardarlo en el disco y enviar ese archivo) cuando llege a mi casa(ubicada en la punta del cerro literalmente) pruebo el codigo que me dejaron (analizarlo pero no copiarlo jamas!!) gracias por su ayuda ;) :P :o
PD: Estado anilizando el codigo (aun no lo he probado) si BufferedImage no es serialiable aqui tu lo haces serializable (:o que fantastico) hoy trabajare en eso si es que tengo tiempo gracias. EOF = end of file eso significa cierto tendra algo que ver con el problema tendre que verlo PD:Disculpame CasiDiablo no pude revisar tu codigo pero tengo uno mejor es algo asi envias el BufferedImage a traves de ImageIO.write(image,"jpg",OutputStream) ese OutputStream es del socket y en el cliente si resiviste informacion anterior para que el metodo no te haga reset uno llama al metodo InputStream.markSuport() y recibe la imagen conImageIO.read(InputStream) pero hay un problema se queda pegado en esa sentencia a menos que cierre el server Título: Re: enviar un BufferedImage a travez de socket Publicado por: passatempo en 3 Diciembre 2010, 02:04 am Reviviendo este post, la imagen no la puedes abrir por que falto un
out.close(); después de ImageIO.write(bufferedImage, "jpg", out); en la parte del receptor. Agregenlo y asi queda finalizada la imagen. BTW excelente programa ;-) |