Parece que boost :: asio define una clase de punto final separada para cada protocolo, lo cual es irritante si desea realizar operaciones UDP y TCP en un punto final en particular (tiene que convertir de una a la otra). Siempre había pensado en un punto final como una dirección IP (v4 o v6) y el número de puerto, independientemente de TCP o UDP. ¿Hay diferencias significativas que justifiquen clases separadas? (Es decir, podría no ambos tcp :: enchufe y toma :: UDP aceptar algo así como ip :: punto final?)¿Cuál es la diferencia entre tcp :: endpoint y udp :: endpoint en Boost :: Asio?
6
A
Respuesta
4
Las tomas se crean de forma diferente
socket(PF_INET, SOCK_STREAM)
para TCP y
socket(PF_INET, SOCK_DGRAM)
para UDP.
Sospecho que ese es el motivo de los diferentes tipos en Boost.Asio. Consulte man 7 udp
o man 7 tcp
para obtener más información, supongo que Linux ya que no etiquetó su pregunta.
Para resolver su problema, extraiga la IP y el puerto de un punto final TCP y cree una instancia de un punto final UDP.
#include <boost/asio.hpp>
#include <iostream>
int
main()
{
using namespace boost::asio;
ip::tcp::endpoint tcp(
ip::address::from_string("127.0.0.1"),
123
);
ip::udp::endpoint udp(
tcp.address(),
tcp.port()
);
std::cout << "tcp: " << tcp << std::endl;
std::cout << "udp: " << udp << std::endl;
return 0;
}
muestra de invocación:
./a.out
tcp: 127.0.0.1:123
udp: 127.0.0.1:123
2
puertos TCP y UDP son diferentes. Por ejemplo, dos programas separados pueden escuchar en un solo puerto siempre que uno use TCP y el otro use UDP. Esta es la razón por la cual las clases de puntos finales son diferentes.
Cuestiones relacionadas
- 1. impulso :: asio UDP difusión
- 2. ¿Cuál es la diferencia entre asio :: tcp :: socket async_read_some y async_receive?
- 3. Boost Asio multiproceso TCP Servidor síncrono
- 4. Google y Yahoo OpenID Endpoint
- 5. EndPoint: sintaxis en C# - ¿Qué es esto?
- 6. wcf endpoint relative address
- 7. ¿Cuál es la diferencia entre boost :: io_service poll_one y run_one?
- 8. Modifique endpoint ReaderQuotas programmatically
- 9. ¿Cuál es la diferencia entre los paquetes UDP y TCP? ¿Para qué los utiliza?
- 10. ¿cuál es la diferencia entre net.tcp y el protocolo TCP?
- 11. Cuál es la diferencia entre HTTPS y TCP sobre SSL
- 12. ¿Cuál es la diferencia fundamental entre WebSockets y TCP puro?
- 13. ServiceStack Error Cargando WebHost Endpoint
- 14. conectar en "conexión menos" boost :: asio :: ip :: udp :: socket
- 15. ¿Cuál es la diferencia entre boost :: multi_array vistas y subarrays
- 16. Boost Asio tcp :: resolver: servicio no encontrado
- 17. boost :: asio :: ip :: tcp :: socket está conectado?
- 18. boost :: asio :: ip :: multicast :: join_group no funciona
- 19. Boost :: asio: ¿cómo interrumpir un hilo del servidor tcp bloqueado?
- 20. boost :: asio: ¿Cómo uso async_accept para aceptar conexiones entrantes?
- 21. boost :: asio over SocketCAN
- 22. Publicar un WS con Jax-WS Endpoint
- 23. ¿Cómo cerrar correctamente el servidor asio tcp?
- 24. Crear un iostream usando boost asio especificando ip y puerto
- 25. ¿Qué hace "Grant Connect on Endpoint as [sa]" do?
- 26. ¿LDAP es un protocolo TCP o UDP?
- 27. boost :: Asio operaciones y recursos asíncronos
- 28. Tengo "Descriptor de archivo incorrecto" cuando uso boost :: asio y boost :: thread
- 29. Boost :: Asio operaciones de lectura/escritura
- 30. ¿Cuál es la diferencia entre Boost :: bind y Boost Phoenix :: bind?