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
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".
ResponderEliminarHey, 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"
ResponderEliminarString 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;
Disculpa cual es la ip del cliente???
ResponderEliminarPara probar en el mismo computador coloca al servidor y cliente la ip: 127.0.0.1.
EliminarPara 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.
Hola aunque a cliente y servidor le ponga 127.0.0.1 me dice que no se encontró servidor
EliminarHola 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.
Eliminarpresenta errores el programa.... si ejecuta pero no detecta la ip del seridor
EliminarEl 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.
EliminarSaludos
Amigo como funciona tu programa para poder conectar dos computadoras?
ResponderEliminarcuales son los pasos?
tengo que correr el programa en NetBens o desde el ejecutable?
dime porfavor
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.
ResponderEliminarLa 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.
Y como haría para que cada usuario conectado pueda enviar a parte de texto, también imágenes en el chat
ResponderEliminarEste comentario ha sido eliminado por el autor.
ResponderEliminarhola buenas noche me puedes ayudar con el codigo no lo puedo descargar.
ResponderEliminaralemannathy@hotmail.com
gracias
Hola, ahora actualice el enlace, perdón por el inconveniente, son cambios de 4Shared.
EliminarCon todo te compartí el enlace del dropbox.
Saludos.
No se puede descargar amigo :/
EliminarEnvíame tu mail para compartirte el enlace del dropbox.
Eliminarbuenas tardes camarada, me podria enviar el enlace de dopbox porfavor ya que el link que tiene me descarga otro archivo
ResponderEliminarsilman0490@gmail.com
Ya te lo mande amigo, avísanos cualquier novedad y si te sirve ayúdanos con un +
EliminarHola, 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...
ResponderEliminarGracias por compartir.
ResponderEliminarcomo descargo el codigo fuente??
ResponderEliminarEn la parte donde dice CODIGO FUENTE como hipervinculo te puedes descargar todo el proyecto
EliminarSaludos
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
ResponderEliminarSaludos puedes pasar el codigo no lo puedo descargar : a tusolutionweb@gmail.com
ResponderEliminarDisculpa la contraseña para abrir el zip por favor :D
ResponderEliminarHola, no tiene contraseña ya lo revise, Saludos!!
EliminarMe pueden compartir el enlace por favor.
ResponderEliminarhttps://www.4shared.com/zip/j-D0STYI/chat_ks.html
Eliminarhola disculpa ya cree la cuenta pero n o descarga nada solo redirecciiona me lo podrias enviar a mi correo pitafenix75@gmail.com por favor
ResponderEliminarYa te lo envie, revise el link esta correcto
Eliminarcrees que lo puedas enviar?
ResponderEliminarcarlosalbertozamora222@hotmail.com