none
Ayuda con comunicacion en red

    Question

  • Buenas noches:

    Disculpen las molestias pero pues no sé si me pudieran ayudar a resolver mi problema que tengo. El escenario es el siguiente tengo 2 programas ejecutándose  los cuales deben de compartir información sobre la temperatura en que están operando, si son temperaturas distintas se debe tomar la menor siempre se debe operar a la menor temperatura, comparto la información con el uso de sockets.  Para lo cual tengo de manera general los siguientes programas.

    Programa 1;

    //Funciones

    Int Servidor( ){

    1.- creación del socket.

    2.-ponerlos a escuchar peticiones

    3.- Aceptar peticiones

    4. Enviar la Temperatura del programa actual

    5.-Recibir la Temperatura del otro programa

    //Retorna 0 si todo sale bien en caso contrario me retorna un -1

    }

    Int  Cliente( ){

    1.- creación del socket.

    3.- conectar con el Servidor

    4. Enviar la Temperatura del programa actual

    5.-Recibir la Temperatura del otro programa

    //Retorna 0 si todo sale bien en caso contrario me retorna un -1

    }

    Doublé obtenertemperatura(){

    //cálculos para obtener la temperatura

    }

    Int main(){

    double temperaturapuedeoperar= obtenertemperatura();

    doublé temperaturanterior =0;

    doublé temFinal;

    if (temperaturanterior  ¡= temperaturapuedeoperar)//verificamos si ha cambiado la temperatura

    {

    If (cliente()==0)

    {

    If(temperaturapuedeoperar < otraTempratura)

    { // otraTempratura es la que nos devuelve cuando nos conectamos con el servidor para conocer su temperatura.

    temFinal= temperaturapuedeoperar;

    }

    Else

    {                                      

    temFinal= otraTempratura;

    }

    }

    Else

    {

    If (servidor()==0)

    {

    If(temperaturapuedeoperar < otraTempratura)

    { // otraTempratura es la que nos devuelve cuando nos conectamos con el servidor para conocer su temperatura.

    temFinal= temperaturactual;

    }

    Else

    {                                      

    temFinal= otraTempratura;

    }

    }

    Else

    {

    temFinal= temperaturapuedeoperar;

     

    }

     

    }

     

    }

     

    }

    Tanto el programa 1 como el programa 2 hacen lo mismo lo único que cambia es el método obtenertemperatura .

    Bueno pues lo que hace mi programa principal es  que cuando detecta un cambio temperatura se intenta comunicar con el otro para informarle que hubo un cambio de temperatura inicio siempre el cliente por si es que el otro programa ya está como servidor y si no está como servidor entonces este pasa a ser el servidor y espera a que el otro programa se conecte para comprar las temperaturas y es acá donde tengo el problema porque no se puede esperar hasta que el otro programa cambie de temperatura si no lo que debe hacer es comprar con la temperatura que a la que se pudiera operar ya pudiera ser que tenga que incrementarse la temperatura en ambos programas o disminuir el chiste es siempre mantener la temperatura menor de ambos programas.

    Porque si por ejemplo el primer programa tiene una temperatura de 25 y después cambia a 30 entonces  y el otro programa pudiera llevar una temperatura de 28 el primer programa se va a quedar pausado hasta que el segundo cambie de temperatura  para que el segundo se conecte con el primero y puedan comparar las temperaturas.

    Y es ahí donde está el problema porque lo que yo necesito es que si un programa cambia de temperatura  inicialice el socket  del servidor o cliente para que comparen de temperatura no importa que el otro programa no cambie por que lleva una temperatura en la que ambos pueden ir la menor pero como ya hubo un cambio de temperatura en el primer programa entonces pudiera ser que abría un aumento o disminución de temperatura.

    Por lo que yo pensaba en estas soluciones:

    1.- Pensaba yo que los socktes continuamente estuvieran conectándose para conocer las temperaturas de ambos pero esto implicaría mucho tráfico en la red ya que se calcula la temperatura cada 30 segundos y pues no precisamente cada 30 segundo va a cambiar la temperatura.

    2.- pensaba también es algo así como un tipo de evento que se lance cuando cambie la temperatura para que le avise al otro programa que se conecte para comprar velocidades ¿Pero esto no sé si sea posible? Si me pudieran ayudar con una posible solución o si esta es posible me pasaran unos link de cómo emplear eventos.

    3.- inicializar un hilo  en cada programa en donde este  continuamente se intente conectar un socket cliente  hacia el servidor y cuando lo logre ya ha hacer la comparaciones de temperaturas pero este caso parecería al primero abría siempre tráfico en la red.

    Para Esto se utiliza una aplicación de tipo consola, No se si me di a explicar o si existe la necesitan de poner el código completamente para un mayor entendimiento.

    De antemano gracias por su ayuda y si me pudieran ayudar a encontrar la repuesta mas idónea.

    Saludos

     

     

    Tuesday, September 14, 2010 9:35 AM

All replies

  • Hola a todos:

    Nose por que no puedo ver tu repuesta en la  pagina pero ya la vi en mi correo con lo de windows live alert.

    lo que yo llamo cliente es mi funcion que hace que se conecte con el servidor(mediante el uso de socket) y si no esta disponible la conexion hacia el servidor llamo a mi funcion servidor que es la encargada de esperar peticiones para asi poder comparar las temperaturas:

    voy a tratar de poner un ejemplo mas claro asi si me doy a explicar esta vez.

    Imaginemos que tenemos 2  hornos para hacer pan y en cada horno  puede trabaja a una cierta temperatura máxima  dependiendo el material que se use (gas ,leña, carbón)

     Por ejemplo para el horno 1 está funcionando   a  con leña  la temperatura máxima es de 30 pero el otro horno está funcionando con carbón y su temperatura máxima es de 20 por lo que se tendrá que regular el primer horno para que funcione a la temperatura del otro es decir de 20.

    Y si al segundo horno  ahora lo ocuparan con gas su máxima temperatura es de 35 por lo que abría que ajustar los hornos para que trabaje a 30 esto es porque el primero está ocupando leña

    Esto de tomar la temperatura menor  es debido a que el pan debe salir al mismo tiempo de los 2 hornos.

    Es por ello que había pensado en la propuesta que puse anteriormente   no sé si ahora ya quede más claro lo que pretendo hacer.

    Saludos

     

    Tuesday, September 14, 2010 8:21 PM
  • Sopita suele poner respuestas que luego borra si nadie responde en un período de tiempo, por eso no la ves en el foro pero sí en el mensaje.

    En lo que te afecta, tienes que poner uno siempre como cliente y el otro como servidor, y mantener la comunicación abierta y que el cliente le haga "polling" periódicamente, enviándolole su temperatura aunque no haya cambiado, y el servidor recibirá esa temperatura, la comparará con la suya, y devolverá la adecuada.

    Otra forma es que ambos actuen como servidores y clientes. Cada uno hace de servidor por un puerto y de cliente por el otro, y cada vez que cambie la temperatura de su horno, enviará al servidor (al otro) el cambio. Entonces el servidor hará los ajustes, y cuando cambie su temperatura, enviará a su servidor (el primero) su cambio de temperatura.


    MVP Visual C++ - Visita mi blog sobre desarrollo: http://geeks.ms/blogs/rfog/
    Thursday, September 16, 2010 3:03 PM
    Moderator