Hola a todos!!! (cuanto tpo...) Bueno, estoy haciendo una pequeña aplicación comunicandome con UDP. Uso UDP en vez de TCP porque la comunicación la realizo con uno aparatejos que sólo tienen implementado este protocolo y no TCP. Entonces mi problema (a ver si me explico bien) es el siguiente. Yo tengo implementado en ambos extremos (servidor y aparatejo) una máquina de estados que controla la comunicación entre ambos. Si los paquetes NUNCA se perdieran iria perfecto (de hecho al probarlo en LOCAL va) pero me temo que cuando este funcionando realmente no será así. Entonces mi pregunta es ¿conoceis algoritmos o paginas o cualquier info referente al control de flujo en UDP? Como ya sabeis en UDP cada vez que se envia un paquete se confirma su recepción pero, de vez en cuando se me ocurren ciertas circunstancias que harian colgarse a alguna de las máquinas de estado en espera de un paquete que no llega o un ACK retrasado.
No se si me explicado bien.... Pues eso, a ver si podeis echarme una mano que me estoy volviendo locoooo!!!. Saludillos
--plugin
El modelo mas proximo q tienes para mirar es TCP, sino puedes mirate los fuentes del quake2 o del quakeworld ara saber como implementan ellos el control de errores. De todas maneras en funcion del sistema q estes haciendo quizas te puedas permitir perdidas.
Para saber como va este sistema te recomiendo q te mires cosas como el "protocolo de ventana deslizante" etc
Citar
Como ya sabeis en UDP cada vez que se envia un paquete se confirma su recepción pero...
Supongo q querras decir TCP, en UDP no se confirma nada, tu envias y como mucho puedes recibir un icmp, para informarte por ejemplo de q has enviado un paquete a un puerto q la maquina remota no tiene "escuchando".
Saludos
_________________
main(int i,char **p){
int b;char *a=0;while( a[b=(int)"rvbolsf`Coz`lp-fp#.#pbovglp#"] ? printf("%c",a++
^i): 0);
}
[ Este Mensaje fue editado por: ethernet el 2002-10-01 05:56 ]
Quizas usando Timers (TimeOut) para cada paquete que envias(en el cliente) puedas controlar un poco el tema.
Un saludo
Prueba a usar la vieja tecnica del boton hombre muerto.
Es la tipica que tu sistema manda un mensaje que es un timestamp cada x tiempo, algo asi como "estoy vivo", "estoy vivo", "estoy vivo". Si en el otro punto no recibe un "estoy vivo" en xxx tiempo da como que el otro lado esta muerto
mICrO
Holas!! pos ya esta esto mas o menos. Al final lo he implementado con el algoritmo cutre de "llamada y espera". Vamos, básicamente, que a la hora de enviar mando los paquetes hasta recibir una confirmación para dicho paquete. Digo básicamente porque también controlo que se pierdan paquetes o ACKS, o que el emisor/receptor se desincronice, etc.
Vamos, que ya parece estar todo correcto. Cuando la semana que viene hga las pruebas ya veré si explota o no, jeje.
Gracias y saludillos!!
--plugin
Puedes optimizar (si te hiciera falta...) el algoritmo utilizando una técnica similar al algoritmo de ventana deslizante que utiliza TCP. Eso te permitiría simultanear el envío/confirmación de varios paquetes a la vez, controlar el orden y, aunque creo que no es tu caso, combinar el envio de paquetes UDP fiables y no fiables dentro de una misma secuencia ordenada.
Si no necesitas "tiempo real" en tu aplicación creo que tu solución es más que buena.
Un saludo.
Milinko.
El algoritmo de la ventana deslizante (corregidme si me equivoco, que hace tpo no lo veo) se implementaba para recibir paquetes en trozos desordenados, y despues con todos ordenados formas la información. Lo bueno que tengo es que mis paquetes son muy pequeños y no necesito trocearlos. Además tanto el emisor como el receptor basan su comunicación en una máquina de estados y van actuando teniendo en cuenta el paquete ACTUAL; vamos, que no puedo recibir primero la trama 3 y despues la 2 porque de ser así la máquina de estados no sabría que hacer y seguramente se colgaría en espera de algo que no llega..... Espero que mi solución furule..... Al menos por ahora lo hace
Gracias de nuevo a todos y saludos
--plugin