Wygląda na to, że boost :: asio definiuje oddzielną klasę punktów końcowych dla każdego protokołu, co jest irytujące, jeśli chcesz wykonywać zarówno operacje UDP, jak i TCP na określonym punkcie końcowym (musisz dokonać konwersji z jednego do drugiego). Zawsze myślałem o punkcie końcowym jako adresie IP (v4 lub v6) i numerze portu, niezależnie od TCP lub UDP. Czy istnieją znaczne różnice, które uzasadniają oddzielne klasy? (Czyli nie mógł zarówno tcp i udp :: gniazdo gniazdo :: zaakceptować coś takiego ip :: końcowego?)Jaka jest różnica między tcp :: endpoint i udp :: endpoint w Boost :: Asio?
6
A
Odpowiedz
4
Gniazda są tworzone różnie
socket(PF_INET, SOCK_STREAM)
dla TCP i
socket(PF_INET, SOCK_DGRAM)
dla UDP.
Podejrzewam, że jest to przyczyną różnych typów w Boost.Asio. Aby uzyskać więcej informacji, zobacz man 7 udp
lub man 7 tcp
, zakładam, że system Linux nie został oznaczony tagiem.
Aby rozwiązać problem, wyodrębnij adres IP i port z punktu końcowego TCP i stwórz punkt końcowy 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;
}
przykład wezwanie:
./a.out
tcp: 127.0.0.1:123
udp: 127.0.0.1:123
2
TCP i UDP są różne. Na przykład dwa oddzielne programy mogą jednocześnie nasłuchiwać na jednym porcie, dopóki używa się TCP, a drugi używa UDP. Właśnie dlatego klasy punktów końcowych są różne.
Powiązane problemy
- 1. doładowanie :: asio emisja UDP
- 2. Jaka jest różnica między boost :: io_service poll_one i run_one?
- 3. Dynamicznie wielkości boost :: asio :: bufor
- 4. boost :: asio operacji odczytu/zapisu
- 5. Jaka jest różnica między transmisją synchroniczną i asynchroniczną w programowaniu gniazd TCP/IP?
- 6. Równoczesne czytanie i async_read_some w boost asio
- 7. connect na "connection less" boost :: asio :: ip :: udp :: socket
- 8. Jaka jest różnica między Boost :: bind a Boost Phoenix :: bind?
- 9. boost :: asio :: ip :: multicast :: join_group nie działa
- 10. boost :: asio przez SocketCAN
- 11. Jaka jest różnica między "mutex" i "lock"?
- 12. Błąd ServiceStack Ładowanie WebHost Endpoint
- 13. Jaka jest różnica między? : i ||
- 14. Jaka jest różnica między $ i $$?
- 15. Endpoint Nie znaleziono Kiedy Hosting w ASP.NET
- 16. Opis wyjątku JsonMappingException w Google Endpoint
- 17. doładowanie asio udp socket async_receive_from nie wywołuje programu obsługi
- 18. boost :: asio: Jak używać async_accept do akceptowania połączeń przychodzących?
- 19. boost :: asio :: async_write() kontra boost :: asio :: write()
- 20. Jaka jest różnica między HTTPS a TCP przez SSL
- 21. Adres, który jest już używany z akceptorem asio boost
- 22. Jak powinieneś zburzyć boost :: asio :: ip :: udp :: socket?
- 23. Jaka jest różnica między = i: = w mysql?
- 24. Jaka jest różnica między! = I =! w Javie?
- 25. Jaka jest różnica między 'i "w PHP
- 26. Jaka jest różnica między! i !! w yaml?
- 27. jaka jest różnica między @ i @@ w module?
- 28. Jaka jest różnica między * i. * W Matlab?
- 29. Jaka jest różnica między | i || w MATLAB?
- 30. Jaka jest różnica między * i * | * w CSS?