elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  programar un chat rudimentario en c
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: programar un chat rudimentario en c  (Leído 1,181 veces)
pelos22

Desconectado Desconectado

Mensajes: 2


Ver Perfil
programar un chat rudimentario en c
« en: 21 Junio 2011, 20:17 pm »

este es el enunciado, alguien me puede exar una mano.
Código
  1. [color=navy][/color]
Escribe un servidor que pueda atender hasta cuatro clientes simultáneamente y que, cuando reciba
texto de cualquiera de los clientes, envíe ese mismo texto a todos los clientes conectados.
Esta forma de funcionar permite un rudimentario “chat”, ya que cuando cualquiera de los usuarios
escribe algo, todos los demás lo leen, si bien no saben de quién proviene el mensaje (el usuario debería
poner su nombre como encabezado del mensaje).
Para poder implementar un servidor así, no es posible usar fork() ya que si tenemos cada servidor
en un proceso separado atendiendo cada uno a un cliente no hay forma de que desde uno de ellos se
pueda escribir en los sockets de los clientes de los otros.
Por tanto el servidor debe implementarse mediante select(). El algoritmo sería el siguiente:
El programa tiene un array de 4 enteros, para almacenar los descriptores de los sockets de datos
de los clientes a los que puede atender. Inicialmente estos enteros valen 0 para indicar que no
hay cliente conectado en ninguno de ellos.
Adicionalmente tendrá un socket de escucha, incializado y preparado para aceptar conexiones
en el número de puerto que se haya pasado al programa principal desde línea de comandos.
En un bucle infinito:
 Se preparará un conjunto fd_set con los descriptores de los sockets a observar. Éstos serán
el socket de escucha (que irá siempre), y los sockets de datos distintos de cero.
 select() deja el programa bloqueado hasta que ocurra algo en alguno de esos sockets.
 Si ha sido en el de escucha:
 Aceptar el cliente guardando el nuevo socket de datos en una variable auxiliar.
 Si hay sitio para un nuevo cliente (algún socket de datos es cero), copiar la variable
auxiliar al elemento libre del array de sockets de datos.
 Si no hay sitio para un nuevo cliente (todos los sockets de datos son distintos de
cero), cerrar de nuevo el socket auxiliar que acababa de crearse en accept(). El cliente
correspondiente verá que es aceptado momentáneamente, pero inmediatamente después
se cierra su conexión.
 Volver al bucle infinito.
 Si ha sido en alguno de los sockets de datos:
 Leer los datos de ese socket.
 Si la lectura retorna 0 bytes, es que el cliente correspondiente ha cerrado. En ese caso
cerrar ese socket de datos, poner a 0 su descriptor (para indicar que ya no tiene cliente
conectado), y volver al bucle infinito.
 Si la lectura retorna distinto de cero, escribir los datos recibidos en todos los demás
sockets de datos que tengan un cliente conectado.
 Volver al bucle infinito.


En línea

_Enko


Desconectado Desconectado

Mensajes: 538



Ver Perfil WWW
Re: programar un chat rudimentario en c
« Respuesta #1 en: 22 Junio 2011, 15:21 pm »

Si es para Windows, aqui está todo lo que necesitarias:
http://msdn.microsoft.com/en-us/library/ms741394(v=VS.85).aspx


En línea

dakomt

Desconectado Desconectado

Mensajes: 76


Viking Metal


Ver Perfil
Re: programar un chat rudimentario en c
« Respuesta #2 en: 23 Junio 2011, 11:28 am »

Y si es para Linux te recomiendo que le eches un vistazo al libro: "UNIX NETWORK PROGRAMMING" de W. Richard Stevens et al.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
El chat no oficial de elhacker.net (http://the-chat.tk/ )
Sugerencias y dudas sobre el Foro
YST 8 4,269 Último mensaje 3 Abril 2009, 17:29 pm
por #!drvy
Chat en Foro SMF con autentificacion ( sin ella no podran ablar en el chat )
PHP
XXXXXX 3 4,691 Último mensaje 28 Abril 2010, 02:19 am
por XXXXXX
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines