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:
-
accept()
es para TCP. No tiene nada que ver con UDP. -
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. -
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 usassendto()
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 desendto().
Noconnect()
involucrado en cualquier lugar, ergo tampoco es posible usarsend()
orecv().
-
Solo es necesario
bind()
un servidor, porque los clientes necesitan un número de puerto fijo para enviar. Un cliente no necesitabind()
en absoluto: un bind() automático se llevará a cabo en el primersend()/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.