Enviar archivos usando sockets

Hola gente !!

Estoy desarrollando una app en java q usa Sockets, pero adicional tengo que enviar archivos por medio de los canales que se abran entre el cliente y el servidor, la canalizacion y envio de archivos es fullduplex, entonces como puedo hacer esto ??? Tengo q usar un thread ?? o swingWorker ?? Si es asi como actualizo mi interfaz si pulso un boton y al momento q lo pulse pos este no se quede pulsado ??

Gracias

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de ezamudio

opciones

Para empezar, si tienes una app Swing, sí debes usar SwingWorker para que no se quede trabada la GUI mientras se envían los archivos.

Puedes usar Sockets de java.io o los SocketChannels de java.nio. Hace tiempo escribí en mi blog al respecto. Si estás implementando ambos lados de la comunicación y sabes qué vas a transferir, puedes hacerte un protocolo muy sencillo, donde mandes bloques de datos de algunos KB de tamaño, y luego esperes a que el receptor te confirme que le llegaron (la confirmación podría ser un MD5 del último paquete que enviaste, y así sabes que se envió bien). Al final envias un paquete especial donde indicas que ya se terminó la transmisión (o al principio envías un encabezado indicando el tamaño del archivo que vas a enviar, el nombre, tal vez un md5 de todo el archivo, etc).

Que es fullduplex?

Que es fullduplex?

Full Duplex

Cuando dos equipos se comunican en una LAN, la información viaja normalmente en una sola dirección a la vez, dado que las redes en base usadas por las redes LAN admiten solo una señal. Esto de denomina comunicación half-duplex. En cambio dos sistemas que se pueden comunicar simultaneamente en dos direcciónes están operando en modo full-duplex.

Ah vaya. Quiere decir que

Ah vaya. Quiere decir que mientras escribes un archivo puedes al mismo tiempo estar leyendo otro.

Pues si, necesitas threads y una forma de monitorear el progreso. SwingWorker es la opción.