viernes, 2 de agosto de 2013

SISTEMAS DISTRIBUIDOS: Chat con envio de archivos Java

UN CHAT CON ENVÍO DE ARCHIVOS ADJUNTOS PROGRAMADO EN JAVA ES UN BUEN EJEMPLO DEL USO DE LA CLASE SOCKET ASÍ COMO DE SUS ATRIBUTOS OBJECTOUTPUTSETREAM Y OBJECTINPUTSTREAM. EN ESTE ARTICULO SE MUESTRA EL CÓDIGO FUENTE Y UNA EXPLICACIÓN DE LA LÓGICA USADA.

La estructura del programa es muy simple. Tanto el servidor como el cliente tienen activos en todo momento los hilos par recibir o mejor dicho están escuchando en el puerto todo el tiempo esperando por un nuevo mensaje. Así mismo tanto el cliente como el servidor disponen de un hilo para enviar mensaje, al que tienen que pesarle como parámetros el socket y la ventana del receptor, de esta manera puede manipular el texto en pantalla y escribir en el mismo socket o puerto en el que esta escuchando el receptor.

Por ultimo así como ambos(Cliente y Servidor) envían y reciben mensajes, ambos tienen hilos para enviar y recibir archivos, esto se hace primero llenando un vector de datos de tipo byte y luego enviándolo por el socket, si no se a enviado todo el archivo se llenara nuevamente el vector de datos y se enviara, hasta que se envie por completo el archivo. En el caso de mi programa el vector de tipo byte es de 8 Kb o 8192 bytes. Esto queda a su elección pero se recomienda no demasiado grande.

Una pequeña mejora que se puede hacer al programa es activar el hilo de recibir archivos solo cuando sea necesario, ya que en mi programa estos están activos todo momento en un puerto diferente. Esto se puede hacer agregando una condición de texto, por ejemplo cuando se desee enviar un archivo el emisor escribirá en pantalla "Enviar Archivo" y el receptor al leer esto activara el  hilo de recibir y luego este se dormirá.

En el siguiente link les dejo el CÓDIGO del programa en Netbeans:
CÓDIGO FUENTE




31 comentarios:

  1. Como hago para cambiar la ruta al destino del Archivo, vale decir, deseo que el cliente envíe archivos al servidor a un directorio en especifico del servidor. Por ejm: "E:\\GVC\\archivos".

    ResponderEliminar
  2. Hey, no me he dedicado al blog ni a este tema en un tiempo, pero la solución si lo que se quiere es enviar archivos siempre al mismo directorio (y este existe, no he probado bien con directorios inexistentes) del servidor se coloca en la clase "PrincipalServidor"
    String dir_recibo = "E:\\GVC\\archivos";
    Y se cambiaria la linea donde se instancia el objeto RecibirArchivo por lo siguiente
    RecibirArchivo recibirArchivo = new RecibirArchivo(dir_recibo, usuario, 35557, "localhost");,

    y en la clase "RecibirArchivo" se colocaría debajo de estas lineas

    file = dis.readUTF();
    file = file.substring(file.indexOf('/') + 1, file.length());
    lo siguiente:
    file=path+"\\"+file;

    ResponderEliminar
  3. Disculpa cual es la ip del cliente???

    ResponderEliminar
    Respuestas
    1. Para probar en el mismo computador coloca al servidor y cliente la ip: 127.0.0.1.
      Para probar en LAN coloca ipconfig en la consola de windows o ifconfig en la consola de linux(no he probado el programa en este sistema). O si no en propiedades de Red.

      Eliminar
    2. Hola aunque a cliente y servidor le ponga 127.0.0.1 me dice que no se encontró servidor

      Eliminar
    3. Hola Karen, recuerda correr el programa del servidor primero. Si lo estas haciendo así, comprueba que no te arroje errores el programa del servidor. Comunicanos cualquier novedad, Saludos.

      Eliminar
    4. presenta errores el programa.... si ejecuta pero no detecta la ip del seridor

      Eliminar
    5. El problema puede ser en el enlace que tengas, si no tienes computadoras nuevas asegúrate que el cable de red con el que las que estés conectando el servidor y cliente sea un cable cruzado. Además puedes intentar desactivando el firewall y antivirus de tus PCs. Avísanos cualquier novedad.
      Saludos

      Eliminar
  4. Amigo como funciona tu programa para poder conectar dos computadoras?
    cuales son los pasos?
    tengo que correr el programa en NetBens o desde el ejecutable?
    dime porfavor

    ResponderEliminar
  5. La fácil: Lo que necesitas es tener Netbeans en ambas computadoras y ejecutar en la una el programa servidor y en la otra el programa del cliente. Además debes conocer las Ip's de ambas computadoras para poderte conectar.
    La difícil: Compilar en una sola compu ambos programas, copiar los .jar y ejecutarlos con java desde la consola de cada computador.
    Saludos. Avísanos cualquier inquietud.

    ResponderEliminar
  6. Y como haría para que cada usuario conectado pueda enviar a parte de texto, también imágenes en el chat

    ResponderEliminar
  7. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  8. hola buenas noche me puedes ayudar con el codigo no lo puedo descargar.
    alemannathy@hotmail.com
    gracias

    ResponderEliminar
    Respuestas
    1. Hola, ahora actualice el enlace, perdón por el inconveniente, son cambios de 4Shared.
      Con todo te compartí el enlace del dropbox.
      Saludos.

      Eliminar
    2. No se puede descargar amigo :/

      Eliminar
    3. Envíame tu mail para compartirte el enlace del dropbox.

      Eliminar
  9. buenas tardes camarada, me podria enviar el enlace de dopbox porfavor ya que el link que tiene me descarga otro archivo
    silman0490@gmail.com

    ResponderEliminar
    Respuestas
    1. Ya te lo mande amigo, avísanos cualquier novedad y si te sirve ayúdanos con un +

      Eliminar
  10. Hola, tengo una pregunta cómo hago para compartir un directorio de archivos en una interfaz web, algo así como ftp pero usando sockets, osea que el cliente tenga la posibilidad de elegir qué archivo quiere descargar...

    ResponderEliminar
  11. Respuestas
    1. En la parte donde dice CODIGO FUENTE como hipervinculo te puedes descargar todo el proyecto
      Saludos

      Eliminar
  12. gracias ... lo del link es que no tenía cuenta en 4shared y no sabía cómo descargar pero ya muchas gracias :D :D :D

    ResponderEliminar
  13. Saludos puedes pasar el codigo no lo puedo descargar : a tusolutionweb@gmail.com

    ResponderEliminar
  14. Disculpa la contraseña para abrir el zip por favor :D

    ResponderEliminar
  15. Me pueden compartir el enlace por favor.

    ResponderEliminar
  16. hola disculpa ya cree la cuenta pero n o descarga nada solo redirecciiona me lo podrias enviar a mi correo pitafenix75@gmail.com por favor

    ResponderEliminar
  17. crees que lo puedas enviar?
    carlosalbertozamora222@hotmail.com

    ResponderEliminar