设为首页 加入收藏

TOP

boost------asio库的使用2(Boost程序库完全开发指南)读书笔记 (三)
2015-11-21 01:30:57 来源: 作者: 【 】 浏览:34
Tags:boost------asio 使用 Boost 程序 完全 开发指南 读书 笔记
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地址值的限制,以更直观更灵活的域名来连接服务器。

?

首页 上一页 1 2 3 4 5 6 下一页 尾页 3/6/6
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇HDU1009 FatMouse' Trade 下一篇UVa 10905: Children's Game

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: