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)
| | |-+  Sockets y Hilos ?? !!! AYUDA
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Sockets y Hilos ?? !!! AYUDA  (Leído 6,189 veces)
<<<-Basura->>>


Desconectado Desconectado

Mensajes: 388



Ver Perfil
Sockets y Hilos ?? !!! AYUDA
« en: 8 Diciembre 2011, 04:01 am »

hola tengo una pequeñisima duda, estoy programando sockets, y quiero juntar lo con hilos...
se cuando creer el hilo pero no se donde meter el código.

Bueno:

Código
  1. struct sockaddr_in SERVER =  TCP_SOCK(&SERVER); // sockaddr_in
  2. int SOCKET = socket(AF_INET,SOCK_STREAM,0); // socket
  3. TAMSK TAMSOCK = sizeof(sockaddr); // socklen_t
  4. int ACEPTAR;
  5.  
  6. bind(SOCKET,(sockaddr*)&SERVER,TAMSOCK);
  7. listen(SOCKET,10);
  8.  
  9. if((ACEPTAR = accept(SOCKET, (sockaddr*)&SERVER , &TAMSOCK)) < 0 )//acceptar la conexcion entrante
  10. printf("Servidor Error\n");
  11.  
  12. ZOMBIES(&SERVER,TAMSOCK,ACEPTAR,SOCKET);
  13. close( SOCKET );
  14. close( ACEPTAR );
  15.  

El código esta perfecto, lo que necesito es atender a los clientes por separado metiendo hilos, se lo básico de estos, pero lo que no se es cuando llega un cliente, tengo que cerrar los sockets del padre y aceptar el otro, o como le hago!!! ayuda porfavor


En línea

<<<--Basura-->>>
BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: Sockets y Hilos ?? !!! AYUDA
« Respuesta #1 en: 10 Diciembre 2011, 07:22 am »

El hilo lo puedes crear DESPUES de crear la conexion (aceptarla), es decir, depsues de este if

Código
  1.  
  2. if((ACEPTAR = accept(SOCKET, (sockaddr*)&SERVER , &TAMSOCK)) < 0 )
  3. printf("Servidor Error\n");
  4.  
  5.  

Dulces Lunas!¡.


En línea

The Dark Shadow is my passion.
yovaninu


Desconectado Desconectado

Mensajes: 349



Ver Perfil
Re: Sockets y Hilos ?? !!! AYUDA
« Respuesta #2 en: 10 Diciembre 2011, 17:24 pm »

Hace un tiempo estaba intentando hacer casi lo mismo, avance un poco pero le deje ahi por falta de tiempo, a ver si te ayuda en algo

http://foro.elhacker.net/programacion_cc/iquestque_esta_mal_con_esta_creacion_de_hilo_thread-t339322.0.html;msg1664556#msg1664556
En línea

<<<-Basura->>>


Desconectado Desconectado

Mensajes: 388



Ver Perfil
Re: Sockets y Hilos ?? !!! AYUDA
« Respuesta #3 en: 10 Diciembre 2011, 21:25 pm »

Le hice unos cambios la código:
Código
  1. int ACEPTAR,PID;
  2.  
  3. bind(SOCKET,(sockaddr*)&SERVER,TAMSOCK);
  4. listen(SOCKET,10);
  5.  
  6. if((ACEPTAR = accept(SOCKET, (sockaddr*)&SERVER , &TAMSOCK)) < 0 )
  7. printf("Servidor Error\n");
  8.  
  9. if((PID = fork()) == -1){
  10. printf("Error Creando hilo...");
  11. }else if (PID == 0){
  12. PROCE_HIJO(&SERVER,TAMSOCK,ACEPTAR,SOCKET);
  13. }else{
  14. PROCE_PADRE(&SERVER,TAMSOCK,ACEPTAR,SOCKET);
  15. }
  16.  
  17. //ZOMBIES(&SERVER,TAMSOCK,ACEPTAR,SOCKET); //proce_hijo.hpp
  18.  

Código Padre:
No tiene nada pues lo que quiero es que las conexiones sean atendidas por los hijos del padre :/
Código
  1. void PROCE_PADRE(struct sockaddr_in *SERVER,TAMSK TAMSOCK, int ACEPTAR, int SOCKET){
  2. close( SOCKET );
  3. close( ACEPTAR );
  4. printf("FIN _ padre\n");
  5. exit(0);
  6. }
  7.  

Código Hijo:
Código
  1. void ZOMBIES(struct sockaddr_in *SERVER,TAMSK TAMSOCK, int ACEPTAR, int SOCKET){
  2.  
  3. }
  4. void PROCE_HIJO(struct sockaddr_in *SERVER,TAMSK TAMSOCK, int ACEPTAR, int SOCKET){
  5. char BIENVENIDO[] = "Bienvenido Zombie\n",BUFFER[tBUFFER];
  6. send( ACEPTAR, BIENVENIDO, sizeof(BIENVENIDO), 0);
  7.  
  8. while((strcmp(BUFFER,"FIN"))){
  9. int bytes;
  10. if((bytes = recv(ACEPTAR , BUFFER , TAMSOCK , 0 )) == -1){
  11. printf("Error al resivir datos...\n");
  12. }else{
  13. /****************************************
  14. *
  15. * Aqui van el codigo para resivir datos
  16. *
  17. * **************************************/
  18. printf("%s\n",BUFFER);
  19. }
  20. //if(!(strcmp(BUFFER,"FIN"))) break; //Si Resive la palabra FIN termina el bucle
  21. }
  22. printf("FIN _ Hijo\n");
  23. exit(0);
  24. }
  25.  

La función ZOMBIE la eliminare después cuando no tenga mas utilidad todavía no lo se...
ahora solo con el cambio que hice se me combierte en bucle infinito,
Código
  1. while((strcmp(BUFFER,"FIN"))){
  2. }
  3.  

Antes de crear el hijo ese código estaba en la función zombie, y me funcionaba perfectamente,

lo que yo quiero hacer es que exista un padre que lo que haga sea aceptar clientes

digamos:

PADRE-----------HIJO
           \\         \\
       HIJO     HIJO
En línea

<<<--Basura-->>>
BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: Sockets y Hilos ?? !!! AYUDA
« Respuesta #4 en: 11 Diciembre 2011, 03:37 am »

@<<<-Underwar->>>
Decide en que momento vas a crear el hilo, Antes o despues de aceptar la conexion en mi criterio es DESPUES de aceptarla por otro lado, nada ganas con ponernos mas codigo que no tiene nada que ver (con respecto a tu duda)... almenos que quieras el codigo hecho.

Dulces Lunas!¡.
En línea

The Dark Shadow is my passion.
<<<-Basura->>>


Desconectado Desconectado

Mensajes: 388



Ver Perfil
Re: Sockets y Hilos ?? !!! AYUDA
« Respuesta #5 en: 11 Diciembre 2011, 06:40 am »

Antes de poner los hilos, el código servia bien jeje.. cuando hice la división paso un error en ese loop(while)... pero no se porque

tengo dudas con lo que quiero hacer, hice el cambio y agrege el hijo como tu me digistes despues del IF, pero no me sirve esa es mi duda el porque ??
En línea

<<<--Basura-->>>
BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: Sockets y Hilos ?? !!! AYUDA
« Respuesta #6 en: 11 Diciembre 2011, 07:59 am »

jajaja usas hilos en linux... Debiste aclaralo.

http://linux.die.net/man/2/fork

Dulces Lunas!¡.
En línea

The Dark Shadow is my passion.
<<<-Basura->>>


Desconectado Desconectado

Mensajes: 388



Ver Perfil
Re: Sockets y Hilos ?? !!! AYUDA
« Respuesta #7 en: 11 Diciembre 2011, 09:42 am »

Ya cree el hilo, esta en el código observarlo!, pero el hijo debería estar recv() datos verdad, si revive la cadena "FIN", tiene que terminar el bucle, pero nunca termina...

PD. antes de crear el hijo, el programa se me comportaba bien, cual puede ser el error.. ??

EI: JUNTANDO MENSAJES.

Condicion para aceptar mensajes:
Código
  1. if((bytes = recv(ACEPTAR , BUFFER , TAMSOCK , 0 )) == -1){
  2.  

Si recibe "FIN" termina el hijo...
Código
  1. while((strcmp(BUFFER,"FIN"))){
« Última modificación: 11 Diciembre 2011, 10:49 am por Eternal Idol » En línea

<<<--Basura-->>>
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Ayuda con ejercicio de Hebras/Hilos y semaforos
Programación C/C++
Lotux5 0 1,661 Último mensaje 26 Octubre 2013, 21:14 pm
por Lotux5
PHP, sockets e hilos (PHPSocketMaster 1.0)
PHP
alex171294 1 2,079 Último mensaje 16 Diciembre 2014, 10:22 am
por EFEX
AYUDA: Practicando con hilos en Windows
Programación C/C++
t4r0x 1 1,648 Último mensaje 20 Febrero 2015, 15:13 pm
por _Enko
Ayuda con hilos en C « 1 2 »
Programación C/C++
snake_linux 14 5,221 Último mensaje 28 Agosto 2015, 00:06 am
por snake_linux
Ayuda con hilos en C
Programación C/C++
codX 3 2,795 Último mensaje 15 Febrero 2020, 18:40 pm
por RayR
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines