Il semble boost :: asio définit une classe de point de terminaison distincte pour chaque protocole, ce qui est irritant si vous voulez effectuer des opérations UDP et TCP sur un point de terminaison particulier (doivent passer de l'un à l'autre). Je pensais toujours à un point de terminaison comme une adresse IP (v4 ou v6) et le numéro de port, indépendamment de TCP ou UDP. Y a-t-il des différences significatives qui justifient des classes séparées? (C.-à-ne pouvait pas à la fois tcp :: prise et la prise udp :: accepter quelque chose comme ip :: point final?)Quelle est la différence entre tcp :: endpoint et udp :: endpoint dans Boost :: Asio?
6
A
Répondre
4
Les sockets sont créés différemment
socket(PF_INET, SOCK_STREAM)
pour TCP et
socket(PF_INET, SOCK_DGRAM)
pour UDP.
Je soupçonne que c'est la raison pour les différents types de Boost.Asio. Voir man 7 udp
ou man 7 tcp
pour plus d'informations, je suppose Linux puisque vous n'avez pas tagué votre question. Pour résoudre votre problème, extrayez l'adresse IP et le port d'un point de terminaison TCP et instanciez un point de terminaison 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;
}
invocation exemple:
./a.out
tcp: 127.0.0.1:123
udp: 127.0.0.1:123
2
ports TCP et UDP sont différents. Par exemple, deux programmes distincts peuvent écouter sur un seul port tant que l'un utilise TCP et l'autre utilise UDP. C'est pourquoi les classes de points de terminaison sont différentes.
Questions connexes
- 1. Boost asio ip tcp iostream Détection d'erreur
- 2. Boost asio udp waitForReadyRead
- 3. boost :: asio tcp async_read ne retourne jamais
- 4. Google et Yahoo OpenID Endpoint
- 5. Sharepoint et serveur SQL Endpoint
- 6. Ressource temporairement indisponible dans Boost ASIO
- 7. WebService Error Endpoint
- 8. Segmentation fault sur boost :: asio :: :: ip tcp :: accepteur
- 9. Faire un client asynchrone avec boost :: asio
- 10. boost :: propriété asio et socket
- 11. Boost ASIO async_accept compilation échoue
- 12. boost :: asio :: ip :: tcp :: le socket est connecté?
- 13. quelle est la différence entre:.! et: r !?
- 14. Quelle est la différence entre = et: =
- 15. boost :: asio: Comment utiliser async_accept pour accepter les connexions entrantes?
- 16. Quelle est la différence entre dict() et {}?
- 17. Quelle est la différence entre "$^N" et "$ +"?
- 18. Quelle est la différence entre ~ et! opérateur?
- 19. Comment passer le paramètre Endpoint à Endpoint défini comme le haricot au printemps Conext
- 20. Boost asio async vs blocage des lectures, udp vitesse/qualité
- 21. BizTalk - Catch EndPoint Non trouvé Exception
- 22. Mieux boost asio deadline_timer exemple
- 23. WCF http & https endpoint un contrat
- 24. Différence entre boost :: ref et références régulières
- 25. Publication d'un WS avec Jax-WS Endpoint
- 26. Adresse déjà utilisée avec boost asio acceptor
- 27. POSTing JSON à WCF REST Endpoint
- 28. Comment ajouter WCF IncludeExceptionDetailInFaults aux comportements Endpoint?
- 29. Appel du service Web SQL Server Endpoint
- 30. Quelle est la différence entre le fonctionnement duplex intégral, semi-duplex et TCP/IP simplex?