Java - Socket | Programa chat

 
Vista:
Imágen de perfil de Sebastian

Socket | Programa chat

Publicado por Sebastian (8 intervenciones) el 13/10/2015 02:22:57
Hola muy buenas, estoy haciendo un programa en Java utilizando sockets y tengo algunas dudas al respecto.

1.- ¿Cual es la mejor forma de obtener la cantidad de clientes conectados a tu servidor?

- Para controlar los hilos generados por las conexiones entrantes en mi servidor, los voy metiendo en un arraylist. Con esto he intentado eliminar los hilos de los clientes que se han desconectado, pero no he sabido como hacerlo. Y de aquí nacen otras de mis dudas.

2.- ¿Como puede el servidor identificar una conexión que se ha cerrado?
Ej: Un cliente se conecta, crea un hilo en el servidor, luego se desconecta pero el hilo sigue ahí.

3.- ¿Esto de utilizar un arraylist para gestionar conexiones es una buena forma de hacerlo, hay alguna mejor?


De ante mano, muchas gracias por su tiempo.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Socket | Programa chat

Publicado por Tom (1831 intervenciones) el 13/10/2015 11:09:34
1.- Llevando la cuenta :)

2.- El hilo debe poder reconocer el cierre del socket. Si se produce IOException al leer o escribir de un socket es que se ha cerrado.

3.- ¿? Una lista es una lista ... usa la más apropiada para el manejo que necesites ...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Sebastian

Socket | Programa chat

Publicado por Sebastian (8 intervenciones) el 13/10/2015 17:24:22
Sobre la pregunta tres, he visto que algunos programadores lanzan hilos uno tras otro sin almacenarlos en ningún lado, tipo:

while(1){
socket s = serversocket.accept();
Thread th = new Thread(s);
th.start();
}

Pero como sea, tengo otra duda. He estado buscando sobre maneras de reconocer des conexiones del cliente y he encontrado una que utiliza la función .setKeepAlive(). ¿Sabes como funciona, podrías explicármela con un ejemplo o algo?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Socket | Programa chat

Publicado por Tom (1831 intervenciones) el 13/10/2015 18:30:23
Pues sí, si no necesitas guardar el objeto thread ¿ para qué vas a hacerlo ?.

setKeepAlive() no tiene mucha utillidad si no sabes qué es. En realidad lo que hace es configurar el "stack TCP" del SO a bajo nivel (mira la opción SO_KEEPALIVE para los sockets en Linux -por ejemplo-) y se usa, mayormente, para que otros elementos intermedios en la red (routers por ejemplo) no cierren una conexión por inactividad.

Ya te he comentado que lo normal es detectar el IOException al leer o al escribir. Muchas aplicaciones usan su propio timeout (igual que el keepalive, pero a nivel de aplicación) enviando mensajes "heartbeat" periódicamente, y considerando que el cliente se ha desconectado cuando no se reciben esos mismos mensajes.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Sebastian

Socket | Programa chat

Publicado por Sebastian (8 intervenciones) el 14/10/2015 04:21:00
Ya casi tengo el programa listo, me estas siendo de mucha ayuda, pero ahora me encuentro con que no se como hacer para que mi servidor interactué con los clientes (los hilos). La cuestión es que necesito que cuando un cliente envié un mensaje al servidor este devuelva el mensaje a todos los clientes. ¿Alguna sugerencia?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar