Buenas, estoy desarrollando una aplicación para comunicar una máquina de
expedición con un PC. La conexión es un diálogo a base de peticiones y
recepciones UDP. Utilizo la clase System.Net.Sockets haciendo uso de
UDPClient e IPEndPoint. A cada petición o recepción de datos, a la máquina
hay que enviarle confirmación mediante un <ACK>. Me ha surgido un problema
que paso a detallar gracias a la herramienta WireShark para ver paquetes de
red.
La máquina para que os hagáis una idea se utiliza para expedir artículos en
un almacén de expedición, se pide nº pedido, artículo, lote, unidades,
Todo esto se pide a través de un flujo continuo de instrucciones, siempre
igual lógicamente.
Si el diálogo es fluido, es decir, no hay tiempos de espera porque el
usuario de la máquina está constantemente introduciendo datos no tengo
ningún problema, pero si en alguna ocasión se detiene durante algunos
minutos la comunicación se pierde porque la máquina necesita siempre el
<ACK> de confirmación y me he encontrado con que en determinadas ocasiones
no se envía ese paquete.
Curiosamente cada vez que mi programa envía ese paquete y yo no lo veo
enviado (con wireshark se ve perfectamente) es porque justo detrás de la
recepción de un paquete de datos desde la máquina al PC, hay un paquete de
ARP en el que el PC pregunta quién es 192.168.0.84 (la máquina) y ésta le
responde, pero ya no veo el envío del <ACK> desde el PC a la máquina para
confirmarle el dato anterior. Pasando por el mismo punto del programa pero
con diálogo fluido si que se ven todos los paquetes enviados y recibidos
correctamente y el programa no se rompe.
Al principio del desarrollo sucedía algo parecido pero me di cuenta de que
si el firewall de Windows estaba activado, al pasar unos dos minutos sin
comunicación a a través del puerto UDP del PC (este puerto no lo escojo yo,
lo escoje siempre Windows), cerraba el puerto a la comunicación y la máquina
ya no encontraba el PC. Desactivando el firewall o poniendo una excepción al
ejecutable el problema se solucionó.
Muchas gracias y espero haberme explicado suficientemente claro para que
alguien sepa darme una idea de por donde van los tiros, o si podría utilizar
otra clase para programar la comunicación, o cómo lo haríais vosotros, en
fin, como véis estoy un poco desesperadillo, porque así no puedo entregar el
trabajo.
Leer las respuestas