Discussion:
Programar servidor que hace de pasarela de mensajes
(demasiado antiguo para responder)
s***@hotmail.com
2005-07-05 09:48:48 UTC
Permalink
Estoy programando un servidor en C para UNIX que haga de "pasarela
mensajes" entre los clientes que toman servicio por un puerto y los que
que reciben servicio por un puerto distinto.


La cuestión es que para ello , creo dos procesos : uno que escucha
peticiones de clientes por el puerto A y otro que escucha por el
puerto B. En cada proceso, según se van solicitando conexiones se crea
un conjunto de descriptores de sockets que se van guardando y
chequeando para quedar a la escucha de la recepción de algún mensaje.

El problema es que en ambos procesos , los valores de los descriptores
coinciden , es decir, el cliente número 1 que solicita conexión por
el puerto A recibe el mismo valor de descriptor de socket que el primer
cliente que se conecta por el puerto B. De esta forma, si quiero
escribir en un socket, resulta que se recibe el mensaje en dos
clientes. Esto me supone un problema , porque no identifico de manera
única a los clientes de mi servidor.

Para crear cada proceso, utilizo forK() y en cada pid mando ejecutar
una función la cual realiza la apertura de sockets y la escuha de los
mismos. Creo que por el uso del fork() vienen los problemas,pero no he
sabido como hacerlo de otra forma.

Resumiendo: si alguien sabe como plantear la programación de un
servidor que atiende peticiones por dos puertos y que comunique los
clientes conectados a uno con los que reciben servicio por el otro, que
me eche una mano por fa.

Graaacias.
Oscar Garcia
2005-07-05 12:07:51 UTC
Permalink
Post by s***@hotmail.com
Resumiendo: si alguien sabe como plantear la programación de un
servidor que atiende peticiones por dos puertos y que comunique los
clientes conectados a uno con los que reciben servicio por el otro, que
me eche una mano por fa.
Haz el fork tras aceptar la petición (y no tras recibir la conexión) y
el descriptor del socket debería ser diferente para cada cliente.
Post by s***@hotmail.com
Graaacias.
De nada.
--
Óscar Javier García Baudet
LinaresDigital
http://redstar.linaresdigital.com/
Oscar Garcia
2005-07-14 15:38:11 UTC
Permalink
Post by s***@hotmail.com
Estoy programando un servidor en C para UNIX que haga de "pasarela
mensajes" entre los clientes que toman servicio por un puerto y los que
que reciben servicio por un puerto distinto.
[etc]...
Aprovecho que veo que has creado un nuevo hilo para decirte que es de
buena educación (o de buena netiqueta :) comentar en un hilo si lo que
te han recomendado ha arreglado tu problema o no, y si lo has hecho de
otra manera distinta es bueno comentarlo igualmente para que los
futuros lectores puedan encontrar en internet la solución a sus
problemas.

Gracias por colaborar.
--
Óscar Javier García Baudet
LinaresDigital
http://redstar.linaresdigital.com/
Loading...