Ando perdido

Quiero programar una aplicación en c (que creo que seria el mejor lenguaje para mi propósito) que funcione de la siguiente manera:
Supongamos cinco personas conectadas a internet con la aplicación instalada. Una de las personas escribe, ''hola a todos'' y el ''hola a todos'' les llega a los otros cuatro (que tienen la aplicación en marcha, si hubiese más usuarios no debe llegarles a no ser que también tengan la aplicación en marcha). Los que quieran contestarle podrán hacerlo y en la pantalla del que escribió ''hola a todos'' le saldrán tantas consolas como personas hayan querido establecer la conexión con el (hasta un máximo por ejemplo de dos). Si los cuatro quieren hablar con el, le saldrán dos consolas (el numero máximo) y las otras dos personas escribirán mensajes pero no le llegaran directamente sino que se almacenaran en un servidor para que posteriormente el que escribió ''hola a todos'' pueda recuperar lo que le han dicho.
Se que es un poco liosillo (más cuando yo quiero hacerlo con un numero bastante grande de usuarios) pero no se por donde empezar. He leído mucha información sobre sockets etc... Pero ando un poco perdidillo a ver si alguien puede echarme un cable y me puede guiar un poco sobre como empezar etc... O bien si existe código fuente parecido que yp pueda modificar para mi propósito.
Muchas gracias a tod@s por vuestra atención.
S@lu2.

1 respuesta

Respuesta
1
Tu problema es el típico caso de Cliente/Servidor. Lo que yo te propongo es lo siguiente:
Existirá un único servidor que escuchará a través de un puerto dedicado (socket). Su dirección será conocida. Este servidor mantendrá una lista con todos los clientes que están conectados a él en un momento determinado. Cuando un cliente lanza la aplicación, mandará un paquete al servidor. El servidor recogerá el paquete y anotará la dir. IP del cliente. A partir de aquí, todo se hará a través del servidor. Cuando un cliente escriba "Hola todos", este mensaje llegará al servidor y lo difundirá al resto de clientes registrados. La respuesta de los otros usuarios también pasará por el servidor.
Como ves, el esquema es sencillo. Lo único un poco lioso pueden ser los sockets, pero en realidad son sencillos cuando los entiendes un poco. Si usas sockets UDP, el servidor puede ser así:
fd = socket(...); /* Creamos el socket (faltan los parametros) */
bind(fd, puerto,...) /*Asociamos el socket a un puerto */
while(1) {
recvfrom(....); /*Recibimos mensajes */
TratarMensaje();
}
Para conocer más sobre sockets, consulta www.linuxsockets.org

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas