Título: programar un chat rudimentario en c Publicado por: pelos22 en 21 Junio 2011, 20:17 pm este es el enunciado, alguien me puede exar una mano.
Código 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. Título: Re: programar un chat rudimentario en c Publicado por: _Enko 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 Título: Re: programar un chat rudimentario en c Publicado por: dakomt 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.
|