sockets - que - Respuesta UDP
udp client c (6)
UDP no envía ningún ack back, pero ¿enviará alguna respuesta?
He configurado el programa UDP del servidor cliente. Si le doy al cliente que envíe datos a un servidor que no existe, ¿el cliente recibirá alguna respuesta?
Mi suposición es como;
Cliente -> Servidor de dirección del servidor de difusión (ARP) -> Responder 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 obtendrá ninguna respuesta UDP?
El cliente está utilizando la función sendto para enviar datos. Podemos obtener información de error después de la llamada a Sendto.
Entonces mi pregunta es cómo esta información está disponible cuando el cliente no recibe ninguna respuesta. El código de error se puede obtener de WSAGetLastError.
Intenté enviar datos a un host no existente y enviar a una llamada exitosa. Según la documentación, debe fallar con el valor de retorno SOCKET_ERROR.
¿¿Alguna idea??
"UDP es un protocolo sin conexión basado en mensajes más simple. En los protocolos sin conexión, no se realiza ningún esfuerzo para configurar una conexión dedicada de extremo a extremo. La comunicación se logra al transmitir información en una dirección , desde el origen hasta el destino sin verificar para ver si el destino todavía está allí, o si está preparado para recibir la información ".
El protocolo UDP se implementa sobre IP. Envía paquetes UDP a hosts identificados por direcciones IP, no direcciones MAC.
Y como se señaló, UDP no enviará una respuesta, tendrá que agregar el código para hacerlo usted mismo. Luego tendrá que agregar código para esperar la respuesta, y tomar la acción adecuada si la respuesta se pierde (por lo general, reenviar en un temporizador, hasta que decida que el otro extremo está "muerto"), y así sucesivamente.
Nunca puede recibir un error o notificación de un paquete UDP que no llegó al destino.
Si necesita un UDP confiable como en el pedido o la verificación, de modo que TCP / IP le dará un vistazo a RUDP o UDP confiable. A veces necesitas verificación, pero una combinación de UDP y TCP puede retrasarse en la confiabilidad de TCP, lo 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 hace RUDP 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/
La máquina a la que envía los paquetes puede responder con un mensaje ICMP UDP inalcanzable.
La llamada a sendto
no falló. El datagrama fue enviado al destino.
El destinatario del datagrama o de algún enrutador en el camino puede devolver una respuesta de error (host inaccesible, puerto inalcanzable, TTL excedido). Pero la llamada a sendto
será un historial cuando su sistema lo reciba. Algunos sistemas operativos proporcionan una forma de averiguar esto, a menudo con una llamada a getsockopt
. Pero dado que no puede confiar en obtener una respuesta de error de todos modos ya que depende de las condiciones de la red sobre las que no tiene control, generalmente es mejor ignorarla.
Protocolos sensatos superpuestos a las respuestas de uso de UDP. Si no obtiene una respuesta, entonces el otro extremo no obtuvo su datagrama o la respuesta no le devolvió la respuesta.