tor end;?
?
??? boost::system::error_code ec = boost::asio::error::host_not_found;?
??? for (; ec && iter != end; ++iter)?
??? {?
??????? sock.close();?
??????? sock.connect(*iter, ec);?
??? }?
?
??? if (ec)?
??? {?
??????? cout << "can't connect." << endl;?
??????? throw boost::system::error_code(ec);?
??? }?
?
??? cout << "connet suceessd." << endl;?
}?
?
?
int _tmain(int argc, _TCHAR* argv[])?
{?
??? try?
??? {?
??????? boost::asio::io_service ios;?
??????? boost::asio::ip::tcp::socket sock(ios);?
?
??????? resolv_connect(sock, "www.boost.org", 80);?
?
??????? ios.run();?
??? }?
??? catch (std::exception& e)?
??? {?
??????? cout << e.what() << endl;?
??? }?
?????
??? return 0;?
}?
#include "stdafx.h"
#include "boost/asio.hpp"
#include "boost/date_time/posix_time/posix_time.hpp"
#include "boost/bind.hpp"
#include "boost/function.hpp"
#include "boost/lexical_cast.hpp"
#include "boost/asio/error.hpp"
#include "iostream"
using namespace std;
void resolv_connect(boost::asio::ip::tcp::socket& sock, const char* name, int port)
{
?boost::asio::ip::tcp::resolver rlv(sock.get_io_service());
?boost::asio::ip::tcp::resolver::query qry(name, boost::lexical_cast(port));
?boost::asio::ip::tcp::resolver::iterator iter = rlv.resolve(qry);
?boost::asio::ip::tcp::resolver::iterator end;
?boost::system::error_code ec = boost::asio::error::host_not_found;
?for (; ec && iter != end; ++iter)
?{
??sock.close();
??sock.connect(*iter, ec);
?}
?if (ec)
?{
??cout << "can't connect." << endl;
??throw boost::system::error_code(ec);
?}
?cout << "connet suceessd." << endl;
}
int _tmain(int argc, _TCHAR* argv[])
{
?try
?{
??boost::asio::io_service ios;
??boost::asio::ip::tcp::socket sock(ios);
??resolv_connect(sock, "www.boost.org", 80);
??ios.run();
?}
?catch (std::exception& e)
?{
??cout << e.what() << endl;
?}
?
?return 0;
}
resolv_connect()函数中使用lexical_cast,这是因为query对象只接受字符串参数,所以我们需要把端口号由整数转换为字符串。
?
当开始resolver的迭代时,需要使用error_code和逾尾迭代器两个条件来控制循环,因为有可能迭代完所有解析到的端点都无法连接,只有当error_code为0才表示连接成功。
?
有了resolv_connect()函数,就可以不受具体ip地址值的限制,以更直观更灵活的域名来连接服务器。
?