Giriş
Bu sınıf şöyle kullanılabilir.
İmzası şöyle
Sanırım bu metod deleted. Şöyle yaparsak
Örnek
Şöyle yaparız.
async_resolve metodu çağrıldığında resolver nesnesinin yaşıyor olması gerekiyor. Yani stack'te yaratılmamalıdır. Heap'te yaratılan resolver nesnesini lambda ile capture ederek yaşamasını sağlayabiliriz. Şöyle yaparız,
Şöyle yaparız
Bir iterator döner çünkü resolve işlemi birden fazla sonuç döndürebilir.
Örnek
Şöyle yaparız.
Port yerine servis ismi verilebilir. Şöyle yaparız.
Şöyle yaparız.
Bu sınıf şöyle kullanılabilir.
tcp::socket socket = ...;
asio::connect (socket, it);
Şöyle kullanılabilir.socket.async_connect (it->endpoint(),handler);
Constructorİmzası şöyle
basic_resolver(boost::asio::io_service& io_service);
Şöyle yaparızasio::io_service ios;
tcp::resolver r (ios);
Move ConstructorSanırım bu metod deleted. Şöyle yaparsak
m_resolver(tcp::resolver(m_io_service))
Şu hatayı verir.error: use of deleted function
‘boost::asio::ip::basic_resolver<boost::asio::ip::tcp>::basic_resolver
(boost::asio::ip::basic_resolver<boost::asio::ip::tcp>&&)’
async_resolve metodu - queryÖrnek
Şöyle yaparız.
std::string url = "www.stackoverflow.com";
tcp::resolver::query q {url, "80"};
r.async_resolve (q, std::bind(resolve_handler, _1, _2, url));
handler şöyledir. Handler'a verilen itereator her zaman valid kalıyor.void resolve_handler (const boost::system::error_code &ec,
tcp::resolver::iterator it,const std::string &url) {
...
}
Örnekasync_resolve metodu çağrıldığında resolver nesnesinin yaşıyor olması gerekiyor. Yani stack'te yaratılmamalıdır. Heap'te yaratılan resolver nesnesini lambda ile capture ederek yaşamasını sağlayabiliriz. Şöyle yaparız,
boost::asio::io_service ios = ...;
tcp::resolver::query query("www.google.com", "http");
auto r = std::make_shared<tcp::resolver>(ios);
r->async_resolve(
query,
[r](auto ec, auto it) { resolver_handler(ec, it); }
);
resolve metodu - endpointŞöyle yaparız
asio::ip::address_v4 ipa = asio::ip::address_v4::from_string ("8.8.8.8");
asio::ip::tcp::endpoint ep;
ep.address(ipa);
ep.port (80);
asio::io_service ios;
asio::ip::tcp::resolver resolver (ios);
asio::ip::tcp::resolver::iterator destination = resolver.resolve (ep);
resolve metodu - queryBir iterator döner çünkü resolve işlemi birden fazla sonuç döndürebilir.
Örnek
Şöyle yaparız.
std::string url = "www.stackoverflow.com";
int port = 80;
tcp::resolver::query q (url,port);
tcp::resolver::iterator it = r.resolve (q);
ÖrnekPort yerine servis ismi verilebilir. Şöyle yaparız.
std::string url = "www.stackoverflow.com";
tcp::resolver::query q (url,"daytime");
tcp::resolver::iterator it = r.resolve (q);
ÖrnekŞöyle yaparız.
boost::asio::ip::tcp::resolver::query q ("www.baidu.com", "http");
boost::asio::ip::tcp::resolver::iterator iter = resolver.resolve(q);
boost::asio::ip::tcp::resolver::iterator end;
while (iter != end)
{
boost::asio::ip::tcp::endpoint endpoint = *iter++;
std::cout << endpoint << std::endl;
}
Çıktı olarak şunu alırız.180.97.33.108:80
180.97.33.107:80
Hiç yorum yok:
Yorum Gönder