"Boost.Asio C ++ рдиреЗрдЯрд╡рд░реНрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧред" рдЕрдзреНрдпрд╛рдп 2: Boost.Asio рдХреА рдореВрд▓ рдмрд╛рддреЗрдВ рднрд╛рдЧ 1

рд╕рднреА рдХреЛ рдирдорд╕реНрдХрд╛рд░!
рдореИрдВ рдЬреЙрди рдЯреЛрд░рдЬреЛ рдХреА рдкреБрд╕реНрддрдХ Boost.Asio C ++ рдиреЗрдЯрд╡рд░реНрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрддрд╛ рд╣реВрдВред рджреВрд╕рд░рд╛ рдЕрдзреНрдпрд╛рдп рдмрдбрд╝рд╛ рдирд┐рдХрд▓рд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕реЗ рджреЛ рднрд╛рдЧреЛрдВ рдореЗрдВ рддреЛрдбрд╝реВрдВрдЧрд╛ред рдЗрд╕ рднрд╛рдЧ рдореЗрдВ, рд╣рдо рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ Boost.Asio рдХреА рдореВрд▓ рдмрд╛рддреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗ, рдФрд░ рджреВрд╕рд░реЗ рднрд╛рдЧ рдореЗрдВ рд╣рдо рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗред

рд╕рд╛рдордЧреНрд░реА:


рдЗрд╕ рдЕрдзреНрдпрд╛рдп рдореЗрдВ, рд╣рдо Boost.Asio рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдкрдХреЛ рдЬреЛ рдХреБрдЫ рднреА рдЬрд╛рдирдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдЙрд╕реЗ рдХрд╡рд░ рдХрд░реЗрдВрдЧреЗред рд╣рдо рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЗрдВ рддрд▓реНрд▓реАрди рдХрд░реЗрдВрдЧреЗ, рдЬреЛ рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИ рдФрд░ рдмрд╣реБрдд рдЕрдзрд┐рдХ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИред


рдиреЗрдЯрд╡рд░реНрдХ рдПрдкреАрдЖрдИ


рдпрд╣ рдЕрдиреБрднрд╛рдЧ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ Boost.Asio рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдиреЗрдЯрд╡рд░реНрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдХреНрдпрд╛ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рд┐рдПред

рдмреВрд╕реНрдЯ.рдЕрд╕рд┐рдпреЛ рдиреЗрдорд╕реНрдкреЗрд╕

Boost.Asio рдореЗрдВ рд╕рдм рдХреБрдЫ рдмрдврд╝ рд░рд╣рд╛ рд╣реИ boost::asio рдирд╛рдо рд╕реНрдерд╛рди рдпрд╛ рдЙрд╕рдХреЗ рдЙрдк-рд╕реНрдерд╛рди, рдЙрди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:


рдЖрдИрдкреА тАЛтАЛрдкрддреЗ

рдЖрдИрдкреА тАЛтАЛрдкрддреЗ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, Boost.Asio рдХрдХреНрд╖рд╛рдУрдВ рдХреЛ ip::address, ip::address_v4 рдФрд░ ip::address_v6 рдкрддрд╛_v6 рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
рд╡реЗ рдХрдИ рд╕реБрд╡рд┐рдзрд╛рдПрдБ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред рдпрд╣рд╛рдБ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИрдВ:

рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдЖрдк рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ ip::address::from_string рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ ip::address::from_string :

 ip::address addr = ip::address::from_string("127.0.0.1"); 

рдпрджрд┐ рдЖрдкрдХреЛ рд╣реЛрд╕реНрдЯ рдирд╛рдо рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдкрдврд╝реЗрдВред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛:

 // throws an exception ip::address addr = ip::address::from_string("www.yahoo.com"); 


рдЕрдВрддрд┐рдо рдмрд┐рдВрджреБ (рдЕрдВрддрд┐рдо рдмрд┐рдВрджреБ)

рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рдмрдВрджрд░рдЧрд╛рд╣ рдХреЗ рд╕рд╛рде рдХрдиреЗрдХреНрд╢рди рдХрд╛ рдкрддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рд╕реЙрдХреЗрдЯ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЕрдкрдирд╛ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рд╡рд░реНрдЧ рд╣реЛрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, ip::tcp::endpoint, ip::udp::endpoint , рдФрд░ ip::icmp::endpoint ред
рдпрджрд┐ рдЖрдк рдкреЛрд░реНрдЯ 80 рдкрд░ localhost рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛:

 ip::tcp::endpoint ep( ip::address::from_string("127.0.0.1"), 80); 

рдЖрдк рддреАрди рддрд░реАрдХреЛрдВ рд╕реЗ рдПрдХ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ:

рдпрд╣рд╛рдБ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ:

 ip::tcp::endpoint ep1; ip::tcp::endpoint ep2(ip::tcp::v4(), 80); ip::tcp::endpoint ep3( ip::address::from_string("127.0.0.1), 80); 

рдпрджрд┐ рдЖрдк рд╣реЛрд╕реНрдЯ (рдЖрдИрдкреА рдкрддреЗ рд╕реЗ рдирд╣реАрдВ) рд╕реЗ рдЬреБрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░реНрдп рдХрд░рдиреЗ рд╣реЛрдВрдЧреЗ:

  // outputs "87.248.122.122" io_service service; ip::tcp::resolver resolver(service); ip::tcp::resolver::query query("www.yahoo.com", "80"); ip::tcp::resolver::iterator iter = resolver.resolve( query); ip::tcp::endpoint ep = *iter; std::cout << ep.address().to_string() << std::endl; 

рдЖрдк tcp рдХреЛ рдЕрдкрдиреА рдЬрд░реВрд░рдд рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕реЙрдХреЗрдЯ рд╕реЗ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЙрд╕ рдирд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ рдХреНрд╡реЗрд░реА рдмрдирд╛рдПрдВ рдЬрд┐рд╕реЗ рдЖрдк рдХрдиреЗрдХреНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЗрд╕реЗ resolve() рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╕рдлрд▓ рд╣реЛрдиреЗ рдкрд░, рдХрдо рд╕реЗ рдХрдо рдПрдХ рд░рд┐рдХреЙрд░реНрдб рд╡рд╛рдкрд╕ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк рдЗрд╕рдХрд╛ рдкрддрд╛, рдкреЛрд░реНрдЯ рдФрд░ IP рдкреНрд░реЛрдЯреЛрдХреЙрд▓ (v4 рдпрд╛ v6) рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 std::cout << ep.address().to_string() << ":" << ep.port() << "/" << ep.protocol() << std::endl; 


рд╕реЙрдХреЗрдЯ

Boost.Asio рдореЗрдВ рддреАрди рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕реЙрдХреЗрдЯ рд╡рд░реНрдЧ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ: ip::tcp, ip::udp , рдФрд░ ip::icmp , рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рд╣реЛрддрд╛ рд╣реИред рдЖрдк рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рд╕реЙрдХреЗрдЯ рдХреНрд▓рд╛рд╕ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдБрдХрд┐ рдпрд╣ рдЬрдЯрд┐рд▓ рд╣реИред рдпрджрд┐ рдЖрдк рдЕрднреА рднреА рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗрддреЗ рд╣реИрдВ, рддреЛ boost/ asio/ip/tcp.hpp , boost/asio/ip/udp.hpp , рдФрд░ boost/asio/ip/icmp.hpp ред рдЙрдирдореЗрдВ рд╕реЗ рд╕рднреА рдЖрдВрддрд░рд┐рдХ typedef рдЦреЛрдЬрд╢рдмреНрджреЛрдВ рдХреЗ рдмрдЬрд╛рдп рдЫреЛрдЯреЗ рд╡рд░реНрдЧ рд╣реИрдВред
рдЖрдк рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░ рдХреЗ рд░реВрдк рдореЗрдВ ip::tcp, ip::udp, ip::icmp рдХреНрд▓рд╛рд╕реЗрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪ рд╕рдХрддреЗ рд╣реИрдВ; рд╡реЗ рдЕрдиреНрдп рд╡рд░реНрдЧреЛрдВ / рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рддреЗ рд╣реИрдВ, рдЬрд┐рдиреНрд╣реЗрдВ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

socket рдХреНрд▓рд╛рд╕ рд╕рдВрдмрдВрдзрд┐рдд рд╕реЙрдХреЗрдЯ рдмрдирд╛рддрд╛ рд╣реИред рдЖрдк рд╣рдореЗрд╢рд╛ io_service рдХреЛ io_service рдЙрджрд╛рд╣рд░рдг рджреЗрддреЗ рд╣реИрдВ:

 io_service service; ip::udp::socket sock(service) sock.set_option(ip::udp::socket::reuse_address(true)); 

рдкреНрд░рддреНрдпреЗрдХ рд╕реЙрдХреЗрдЯ рдирд╛рдо рдореЗрдВ рдПрдХ typedef :

Source: https://habr.com/ru/post/In193038/


All Articles