elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
29 Mayo 2012, 03:04  


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)

+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse)
| | |-+  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 643 veces)
<<<-Underwar->>>


Desconectado Desconectado

Mensajes: 300



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

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
	struct sockaddr_in SERVER =  TCP_SOCK(&SERVER);	// sockaddr_in
int SOCKET = socket(AF_INET,SOCK_STREAM,0); // socket
TAMSK TAMSOCK = sizeof(sockaddr); // socklen_t
int ACEPTAR;
 
bind(SOCKET,(sockaddr*)&SERVER,TAMSOCK);
listen(SOCKET,10);
 
if((ACEPTAR = accept(SOCKET, (sockaddr*)&SERVER , &TAMSOCK)) < 0 )//acceptar la conexcion entrante
printf("Servidor Error\n");
 
ZOMBIES(&SERVER,TAMSOCK,ACEPTAR,SOCKET);
close( SOCKET );
close( ACEPTAR );
 

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

<<<--Underwar-->>>
BlackZeroX (Astaroth)
Wiki

Desconectado Desconectado

Mensajes: 2.831


I'Love...!¡.


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

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

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

Dulces Lunas!¡.


En línea

Web Principal-->[ Blog(VB6) | Host File (Public & Private) | Scan Port | (New)MyInfraPC (Descubre mi Contraseña venefi. $) ]



The Dark Shadow is my passion.
El infierno es mi Hogar, mi novia es Lilith y el metal mi
yovaninu


Desconectado Desconectado

Mensajes: 309



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

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
<<<-Underwar->>>


Desconectado Desconectado

Mensajes: 300



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

Le hice unos cambios la código:
Código
int ACEPTAR,PID;
 
bind(SOCKET,(sockaddr*)&SERVER,TAMSOCK);
listen(SOCKET,10);
 
if((ACEPTAR = accept(SOCKET, (sockaddr*)&SERVER , &TAMSOCK)) < 0 )
printf("Servidor Error\n");
 
if((PID = fork()) == -1){
printf("Error Creando hilo...");
}else if (PID == 0){
PROCE_HIJO(&SERVER,TAMSOCK,ACEPTAR,SOCKET);
}else{
PROCE_PADRE(&SERVER,TAMSOCK,ACEPTAR,SOCKET);
}
 
//ZOMBIES(&SERVER,TAMSOCK,ACEPTAR,SOCKET); //proce_hijo.hpp
 

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

Código Hijo:
Código
void ZOMBIES(struct sockaddr_in *SERVER,TAMSK TAMSOCK, int ACEPTAR, int SOCKET){
 
}
void PROCE_HIJO(struct sockaddr_in *SERVER,TAMSK TAMSOCK, int ACEPTAR, int SOCKET){
char BIENVENIDO[] = "Bienvenido Zombie\n",BUFFER[tBUFFER];
send( ACEPTAR, BIENVENIDO, sizeof(BIENVENIDO), 0);
 
while((strcmp(BUFFER,"FIN"))){
int bytes;
if((bytes = recv(ACEPTAR , BUFFER , TAMSOCK , 0 )) == -1){
printf("Error al resivir datos...\n");
}else{
/****************************************
*
* Aqui van el codigo para resivir datos
*
* **************************************/

printf("%s\n",BUFFER);
}
//if(!(strcmp(BUFFER,"FIN"))) break; //Si Resive la palabra FIN termina el bucle
}
printf("FIN _ Hijo\n");
exit(0);
}
 

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
while((strcmp(BUFFER,"FIN"))){
}
 

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

<<<--Underwar-->>>
BlackZeroX (Astaroth)
Wiki

Desconectado Desconectado

Mensajes: 2.831


I'Love...!¡.


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

@<<<-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

Web Principal-->[ Blog(VB6) | Host File (Public & Private) | Scan Port | (New)MyInfraPC (Descubre mi Contraseña venefi. $) ]



The Dark Shadow is my passion.
El infierno es mi Hogar, mi novia es Lilith y el metal mi
<<<-Underwar->>>


Desconectado Desconectado

Mensajes: 300



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

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

<<<--Underwar-->>>
BlackZeroX (Astaroth)
Wiki

Desconectado Desconectado

Mensajes: 2.831


I'Love...!¡.


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

jajaja usas hilos en linux... Debiste aclaralo.

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

Dulces Lunas!¡.
En línea

Web Principal-->[ Blog(VB6) | Host File (Public & Private) | Scan Port | (New)MyInfraPC (Descubre mi Contraseña venefi. $) ]



The Dark Shadow is my passion.
El infierno es mi Hogar, mi novia es Lilith y el metal mi
<<<-Underwar->>>


Desconectado Desconectado

Mensajes: 300



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

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
if((bytes = recv(ACEPTAR , BUFFER , TAMSOCK , 0 )) == -1){
 

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

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

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Sobre sockets e hilos...
Programación C/C++
TRuHiD 2 946 Último mensaje 8 Marzo 2006, 17:43
por TRuHiD
Ayuda con Sockets
Programación C/C++
ella. 4 592 Último mensaje 19 Marzo 2010, 06:56
por Littlehorse
Ayuda Sockets en C
Programación C/C++
sinsombra_666 2 799 Último mensaje 25 Septiembre 2010, 14:27
por sinsombra_666
Ayuda con Sockets
Programación Visual Basic
Elemental Code 2 565 Último mensaje 25 Enero 2011, 21:06
por ::: Devil :::
Ayuda con sockets
Java
delirio 0 189 Último mensaje 24 Agosto 2011, 05:15
por delirio
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines