Saltar al contenido

¿Cuál es el propósito de usar sendto()/recvfrom() en lugar de connect()/send()/recv() con sockets UDP?

Esta es la solución más correcta que te podemos aportar, pero primero mírala detenidamente y valora si se puede adaptar a tu proyecto.

Solución:

  1. accept() es para TCP. No tiene nada que ver con UDP.

  2. connect() en UDP no hace nada en el otro extremo, solo condiciona la API local para saber a quién está enviando y de quién recibe.

  3. Si aún no lo sabe, o no le importa, o quiere enviar a múltiples destinos con el mismo socket, no use connect()tu usas sendto() en cambio. Del mismo modo para recibir.

    Considere un servidor UDP, por ejemplo. llamaría recvfrom(), por lo que obtendría la información de la dirección de origen, procesaría la solicitud, crearía la respuesta y la enviaría a esa dirección a través de sendto(). No connect() involucrado en cualquier lugar, ergo tampoco es posible usar send() o recv().

  4. Solo es necesario bind() un servidor, porque los clientes necesitan un número de puerto fijo para enviar. Un cliente no necesita bind() en absoluto: un bind() automático se llevará a cabo en el primer send()/sendto()/recv()/recvfrom() utilizando un número de puerto local asignado por el sistema.

Es importante comprender que TCP está orientado a la conexión, mientras que UDP es un protocolo sin conexión.

  • TCP: primero debe conectarse antes de enviar/recibir datos hacia/desde un host remoto.
  • UDP: No se requiere conexión. Puede enviar/recibir datos hacia/desde cualquier host.

Normalmente usarás sendto() en el socket UDP para especificar el destino. Del mismo modo, normalmente usaría recvfrom() para saber de dónde se recibieron los datos UDP.

Sin embargo, en realidad puedes usar connect() en socket UDP como opción. En ese caso, puede utilizar send()/recv() en el socket UDP para enviar datos a la dirección especificada con el connect() y recibir datos únicamente de la dirección. (Los connect() en el socket UDP simplemente establece la dirección de par predeterminada y puede llamar connect() en el socket UDP tantas veces como quieras, y el connect() en el socket UDP, por supuesto, no realiza ningún apretón de manos para la conexión).

Espero que esto ayude.

Si estás de acuerdo, tienes la habilidad dejar una noticia acerca de qué le añadirías a este tutorial.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *