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

Funciones Blqueates, Socket C

Estas en el tema de Funciones Blqueates, Socket C en el foro de C/C++ en Foros del Web. Muy buenos días a todos he hecho un programilla en C que recibe mensajes enviados por los clientes el tema es que para que entre ...
  #1 (permalink)  
Antiguo 18/04/2010, 05:54
 
Fecha de Ingreso: febrero-2009
Mensajes: 147
Antigüedad: 15 años, 2 meses
Puntos: 1
Pregunta Funciones Blqueates, Socket C

Muy buenos días a todos he hecho un programilla en C que recibe mensajes enviados por los clientes el tema es que para que entre un nuevo cliente debo de ejecutar la función accept() que se queda a la escucha de un cliente nuevo para meterlo "en la conversación" pero el problema es que hasta que no se conecta un nuevo cliente el programa se queda parado...
os pongo el codigo para que veais un poco a lo que me refiero:
Código:
while(1)
{
	for(i=0;i<conex;i++)
   {
   	datos[i]=RecivirDatos(comunicacion,len,Buffer, i);
      if (datos[i]>0)  //si seguimos conectados
     	{
      	Buffer[datos[i]]=0; //le ponemos el final de cadena
         printf("%s(%d):%s",inet_ntoa(local.sin_addr),i,Buffer); //imprimimos la cadena recibida
      }
      else
      {
      	printf("Cliente Numero %d Desconectado\n",i);
        // printf("I %d, conex %d\n",i,conex);
         /*while(i<conex)
         {
         comunicacion[i]=comunicacion[i+1];
          i++;
          }
          conex--; */
         }

 
      	AceptarConexiones(&len,&sock,local,comunicacion,i+1,&conex);


	}
}


//Funciones

void AceptarConexiones(int *len,SOCKET *sock,struct sockaddr_in local,SOCKET *comunicacion,int i,int *conex)
{
    int len2;

   *len=sizeof(struct sockaddr);
   len2=*len;
   comunicacion[i]=accept(*sock,(sockaddr*)&local,&len2);
   *len=len2;
   if(comunicacion[i]==INVALID_SOCKET)
   	printf("No puedo aceptar\n");
   else
   	(*conex)++;

}
entiendo que esto se solucionaría con varios hilos de ejecución lo que llamamos thread pero no se nada de la sintaxis en c en windows

Espero que me puedan ayudar o iluminarme con un solución mas fácil
Un cordial saludo a todos
  #2 (permalink)  
Antiguo 18/04/2010, 07:48
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: Funciones Blqueates, Socket C

Tambien podes usar la Funcion Select. Sirve para selecionar en cual socket se puede leer y asi evitar quedar bloqueado.
Aca tenes una muy buena pagina que explica su funcionamiento:

http://www.chuidiang.com/clinux/sockets/socketselect.php
  #3 (permalink)  
Antiguo 18/04/2010, 15:17
 
Fecha de Ingreso: febrero-2009
Mensajes: 147
Antigüedad: 15 años, 2 meses
Puntos: 1
Respuesta: Funciones Blqueates, Socket C

Muchas Gracias, me has ayudado un montón, antes no contemplaba la opción de la función select() pero creo que es la mejor manera para evitar la programación concurrente

Etiquetas: funciones, socket
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 21:23.