Pregunta

UDP no devuelve ningún reconocimiento, pero ¿enviará alguna respuesta?

He configurado el programa UDP del servidor del cliente. Si le doy al cliente que envíe datos a un servidor inexistente, ¿recibirá el cliente alguna respuesta?

Mi suposición es como;

Cliente - > Dirección del servidor de transmisión (ARP) Servidor - > Responda al cliente con su dirección MAC (ARP) El cliente envía datos al servidor (UDP)

En cualquier caso, el Cliente solo recibirá una respuesta ARP. Si el servidor existe o no, ¿no recibirá ninguna respuesta UDP?

El cliente está utilizando la función sendto para enviar datos. Podemos obtener información de error después de enviar a la llamada.

Entonces mi pregunta es cómo está disponible esta información cuando el cliente no recibe ninguna respuesta. El código de error se puede obtener de WSAGetLastError.

Traté de enviar datos al host inexistente y enviar a la llamada tuvo éxito. Según la documentación, debería fallar con el valor de retorno SOCKET_ERROR.

¿Alguna idea?

¿Fue útil?

Solución

Nunca puede recibir un error o aviso de un paquete UDP que no llegó a destino.

Otros consejos

La llamada sendto no falló. El datagrama fue enviado al destino.

El destinatario del datagrama o algún enrutador en el camino podría devolver una respuesta de error (host inaccesible, puerto inalcanzable, TTL excedido). Pero la llamada sendto será historia para cuando su sistema la reciba. Algunos sistemas operativos proporcionan una manera de descubrir que esto ocurrió, a menudo con una llamada getsockopt . Pero como no puede confiar en obtener una respuesta de error de todos modos, ya que depende de las condiciones de red sobre las que no tiene control, generalmente es mejor ignorarlo.

Los protocolos sensibles en capas sobre las respuestas de uso UDP. Si no recibe una respuesta, entonces el otro extremo no recibió su datagrama o la respuesta no se la devolvió.

  

" UDP es un protocolo sin conexión basado en mensajes más simple. En los protocolos sin conexión, no se hace ningún esfuerzo para configurar una conexión dedicada de extremo a extremo. La comunicación se logra transmitiendo información en una dirección , desde el origen hasta el destino sin verificar si el destino todavía está allí, o si está preparado para recibir la información. & Quot;

La máquina a la que está enviando paquetes puede responder con un mensaje ICMP UDP no accesible.

El protocolo UDP se implementa sobre IP. Envía paquetes UDP a hosts identificados por direcciones IP, no por direcciones MAC.

Y como se señaló, UDP no enviará una respuesta, tendrá que agregar código para hacerlo usted mismo. Luego, deberá agregar código para esperar la respuesta y tomar las medidas adecuadas si la respuesta se pierde (normalmente se reenvía en un temporizador, hasta que decida que el otro extremo está "muerto"), y así sucesivamente.

Si necesita un UDP confiable como en el pedido o la verificación, tal como TCP / IP le dará un vistazo a RUDP o UDP confiable. A veces es necesario verificar, pero se puede retrasar una mezcla de UDP y TCP en la confiabilidad de TCP que causa un cuello de botella.

Para la mayoría de los MMO a gran escala para isntance UDP y Reliablity UDP son los medios de comunicación y confiabilidad. Todo lo que RUDP hace es agregar una porción más pequeña de TCP / IP para validar y ordenar ciertos mensajes, pero no todos.

Una biblioteca de redes de desarrollo de juegos común es Raknet, que tiene esto incorporado.

RUDP http://www.javvin.com/protocolRUDP.html

Un ejemplo de RUDP usando Raknet y Python http://pyraknet.slowchop.com/

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top