Foros del Web » Programación para mayores de 30 ;) » Java »

Envio de archivos y duda de interface.

Estas en el tema de Envio de archivos y duda de interface. en el foro de Java en Foros del Web. Bueno, primero os pongo al dia. Estoy haciendo un chat, intentando implementar el patron MVC. 1 duda: El chat debe enviar archivos. para ello, he ...
  #1 (permalink)  
Antiguo 05/05/2011, 05:13
 
Fecha de Ingreso: abril-2011
Mensajes: 12
Antigüedad: 13 años
Puntos: 1
Envio de archivos y duda de interface.

Bueno, primero os pongo al dia.

Estoy haciendo un chat, intentando implementar el patron MVC.

1 duda:

El chat debe enviar archivos. para ello, he pensado que debe crear un hilo adicional para que no quede ocupado el que envia los mensajes y pueda seguir enviandolos.

¿Hay alguna forma de que los archivos no tengan que pasar por el servidor sin tener que abrir algun puerto en el cliente?

si creo un hilo server en un cliente para que reciba el archivo exclusivamente necesito abrir el puerto que va a usar ¿no?

2 duda:

JTextField campo; ---------------------------> en la vista , tiene un evento cuando pulsa enter que tiene que utilizar el metodo del modelo enviarMEnsaje.


enviarMensaje(String Mensaje); --------> en el Modelo, es el que envia el mensaje al servidor.


En el primero que hice, lo que hacia es pasarle a la vista el objeto cliente en si cuando la creaba, asi que solo tenia que hacer cliente.enviarMensaje() en el evento.

Pero segun he estado leyendo por ahi. todo el mundo dice que deberia implementar una interfaz que haria de "modelo observador" entre la vista y el modelo para captar los cambios.

pero no tengo ni zorra de como implementarlo.

un saludito.
  #2 (permalink)  
Antiguo 05/05/2011, 07:26
 
Fecha de Ingreso: junio-2009
Ubicación: cali
Mensajes: 20
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: Envio de archivos y duda de interface.

Te voy a contestar por lo poco que se:

1. Es correcto el uso del Hilo. El archivo se envia a una direccion IP y a un puerto, asi que o lo envias al servidor, o lo envias directamente al cliente; aunque deberias hacerlo por la primera opcion, ahi deberia haber un hilo que se encargue de redireccionarlo.

2. Siempre he hecho los metodos de enviar los archivos y ese tipo de cosas en el control; se captura el evento y se llama el metodo de envio.
  #3 (permalink)  
Antiguo 05/05/2011, 20:22
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 2 meses
Puntos: 260
Sonrisa Respuesta: Envio de archivos y duda de interface.

Cita:
Iniciado por yashauo Ver Mensaje
El chat debe enviar archivos. para ello, he pensado que debe crear un hilo adicional para que no quede ocupado el que envia los mensajes y pueda seguir enviandolos.

¿Hay alguna forma de que los archivos no tengan que pasar por el servidor sin tener que abrir algun puerto en el cliente?

si creo un hilo server en un cliente para que reciba el archivo exclusivamente necesito abrir el puerto que va a usar ¿no?
Depende, ¿el chat es público?, si el chat es público estás exponiendo la IP de todos los usuarios a todos los demás usuarios que acepten enviar archivos. Lo cual puede ser o no problema, porque lo mismo sucede con las redes P2P, el hecho es que un usuario mal intencionado puede causar molestias a los demás. Pero si lo deseas busca información sobre DCC en IRC.

Lo que hacen los servidores de mensajería es usar varios (muchos) servidores secundarios donde se abre una segunda conexión del cliente y es por esta donde se envían los archivos, lógicamente es lo mas lento y tedioso que existe, dependiendo del ancho de banda y la cantidad de usuarios.

Otra opción es usar un protocolo inventado donde dividas los 'paquetes' que envías en 'datos' y 'mensaje', de alguna forma divides la información en un solo 'flujo' y la separas al llegar al destino; lo cual es muy complicado de implementar.

Y por último, sino usa un hilo que envíe la información a un cliente que abrió un socket de tipo servidor, y efectivamente solamente usas un puerto.

Cita:
Iniciado por yashauo Ver Mensaje
JTextField campo; ---------------------------> en la vista , tiene un evento cuando pulsa enter que tiene que utilizar el metodo del modelo enviarMEnsaje.

enviarMensaje(String Mensaje); --------> en el Modelo, es el que envia el mensaje al servidor.

...

Pero segun he estado leyendo por ahi. todo el mundo dice que deberia implementar una interfaz que haria de "modelo observador" entre la vista y el modelo para captar los cambios.
¿Whut?

Primero que todo 'enviarMensaje' va en el controlador, es este el encargado de seleccionar el método y la forma de envío, pudiendo seleccionar entre varios o diferentes métodos dependiendo de la implementación final, por el principio de desacoplamiento. (Mas adelante pudes crear otro método de envío y solamente reemplazas el modelo).

Segundo, el que manda el mensaje es un modelo, no una interfaz intermedia entre nada, es un modelo porque estás usando 'datos' modelando información, que está venga de un socket a través de la red no tiene nada que ver, y por el mismo principio de desacoplamiento debe ser un modelo.

Al final cuando presionas el botón, este llama al método 'enviarMensaje' en el controlador y es este último el que decide como lo manda, por mail, por socket, por osmosis, por saltos o lo que le venga en gana en ese momento, seleccionando un modelo de datos para realizar esa actividad.

El modelo debe generar eventos, 'actualizarBytesRecibidos', 'finalizadaLaTransferencia', etc. Estos eventos los recibe cualquiera que esté escuchando (addXXXListener), es decir, pueden haber dos o mas vistas observando dichos eventos u otros modelos, todo a través de interfaces.

Para implementar eso busca información sobre la clase 'EventListenerList' y su uso. El controlador, la vista, y el modelo pueden generar eventos y escuchar los eventos que sean convenientes.

Saludos,
  #4 (permalink)  
Antiguo 06/05/2011, 02:04
 
Fecha de Ingreso: junio-2008
Ubicación: España
Mensajes: 13
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: Envio de archivos y duda de interface.

Muchisimas gracias a ambos por las respuestas, es que estoy verdisimo.

En cuanto a los archivos, he decidido que lo redireccione el servidor el archivo aunque sea lo mas lento...

HackManC

Me has aclarado bastante, me cuesta diferenciar el modelo del controlador.

una ultima pregunta, ¿Como interactua la vista con el controlador?

¿Le paso una referencia al crearla?

Ahora voy a investigar la clase EventListenerList para ver de que va, por que mi problema es que no se como capturar los eventos del hilo que escucha los mensajes, para que la vista se entere. para eso es para lo que me dijeron que usara interfaces, pero no tengo ni idea del tema.

Gracias por tu tiempo e informacion, amigo.

Saludos

Edit: Buag.. Crei que habia perdido este usuario. y me cree yashauo. bueno, sigo con este.

Última edición por yurabita; 06/05/2011 a las 02:21
  #5 (permalink)  
Antiguo 06/05/2011, 16:22
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 2 meses
Puntos: 260
Sonrisa Respuesta: Envio de archivos y duda de interface.

Hola,

Cita:
Iniciado por yurabita Ver Mensaje
una ultima pregunta, ¿Como interactua la vista con el controlador?

¿Le paso una referencia al crearla?

Ahora voy a investigar la clase EventListenerList para ver de que va, ...
Todo funciona a través de eventos e intefaces, esa es la forma como funciona AWT y Swing, cuando presionas un botón todos los objetos que estén escuchando a través de un listener obtienen el mensaje.

El ejemplo mas claro es el JTable y DefaultTableModel, cuando cambia un dato desde la vista (JTable), este llama a un método en el DefaultTableModel para colocar el valor setValueAt(). Y cuando cambian los datos en el modelo esté llama a un método que dispara un evento fireTableChanged(), para avisarle a la vista o vistas (JTable) que los datos han cambiado.

En otras palabras es una comunicación de dos vías en tiempo real entre todos los componentes.

Saludos,

ps:
Cuando comprendas como funciona EventListenerList vas a tener todo mas claro.

Etiquetas: envio, interface
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:55.