Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Aceptar más clientes usando sockets

Estas en el tema de Aceptar más clientes usando sockets en el foro de C/C++ en Foros del Web. Hola a todos, estoy experimentando un poco sobre el sistema de sockets en C y he optado por la creación de un sistema de chat ...
  #1 (permalink)  
Antiguo 29/08/2009, 17:39
 
Fecha de Ingreso: enero-2008
Mensajes: 24
Antigüedad: 16 años, 3 meses
Puntos: 0
Aceptar más clientes usando sockets

Hola a todos, estoy experimentando un poco sobre el sistema de sockets en C y he optado por la creación de un sistema de chat (por llamarlo de alguna forma)

Quiero crear un servidor que acepte mensajes de varios clientes y que luego el mensaje que le haya llegado sea enviado al resto de clientes.

Por ahora el código lo único que hace es aceptar un cliente y mandarle una respuesta (Hasta ahí he podido llegar), pero.. ¿y el resto? ¿Hay que asignar una ID a cada cliente y guardarlo en un array posteriormente? Cualquier ayuda es bien aceptada.

Ahí va la parte del código correspondiente (Estoy usando Dev-C++)

Código:
void conexion()
{
     int conm; 
     conm=sizeof(struct sockaddr);
     locsock=accept(locsock,(sockaddr*)&conexloc,&conm); // Conexion establecida
     /* Aceptamos la conexión con la funcion "accept" utilizando el descriptor de fichero "locsock" para transmitir los datos entre ambas computadoras
        mediante nuestra estructura "SOCKADDR_IN" definida anteriormente en "conexloc"
     */
     printf("Stablishing connection... OK");
          
         while (conm!=0)
          {
                conm=recv(locsock,Buffer,sizeof(Buffer),0); //recibir datos
 
                if (conm>0) 
                 {  //si seguimos conectados al cliente
                  printf("Datos recibidos: %s",Buffer);
                
                  char msj[] = Buffer;
                  send(locsock,msj,sizeof(msj),0); // Aquí debería enviar el mensaje de alguna forma al resto de clientes conectados
                 }
          }
}
  #2 (permalink)  
Antiguo 01/09/2009, 06:25
 
Fecha de Ingreso: agosto-2009
Mensajes: 67
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: Aceptar más clientes usando sockets

Hola...

Un manejo de chat se resuelve utilizando el patrón publicador-subscriptor (publisher-subscriber). Búscalo en google para aclararte un poco más.


Básicamente, es algo así como una pizarra:

En el servidor tienes la pizarra (publicador) y una lista de personas (efectivamente, como dices, tendrás que guardar un ID o algo, algo que identifique el socket, o algo parecido).

Cuando alguien llega, entra en el chat (se suscribe) y el servidor lo mete en la lista.

Cada vez que alguien escriba algo, el publicador lo publica y se lo envía a los demás por el socket que tiene guardado de cada uno (o les indica que tienen información actualizada y los clientes van a por ella).



Espero que te sirva.

Un saludo.
  #3 (permalink)  
Antiguo 03/09/2009, 08:13
 
Fecha de Ingreso: enero-2008
Mensajes: 24
Antigüedad: 16 años, 3 meses
Puntos: 0
Respuesta: Aceptar más clientes usando sockets

Hola tistklehoff, gracias por la respuesta. Si no voy mal encaminado para evitar el lag que provocaría en los usuarios y además los recursos que necesitaría en el PC servidor, tendría que hacer uso de un servidor IOCP (suponiendo que haya entendido bien tus palabras)

En fin.. iré a ver si consigo solucionar este dilema. Aunque si alguien puede contribuir con algo de código para ver como funciona este sistema lo agradeceré igualmente.

Saludos.
  #4 (permalink)  
Antiguo 03/09/2009, 14:44
 
Fecha de Ingreso: septiembre-2009
Mensajes: 38
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: Aceptar más clientes usando sockets

Tienes que utilizar select. Busca por el google por select, fd_set, fd_isset,......


Espero que te sirva
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:52.