基于Boost::asio库的网络编程实现基础
来源:互联网 发布:兄弟连java培训多少钱 编辑:程序博客网 时间:2024/06/01 07:25
拷贝来自http://blog.sina.com.cn/s/blog_6c909b8d0100memn.html
示例程序:http://blog.chinaunix.net/uid-1720597-id-85507.html
其它参考:http://www.cppblog.com/janvy/archive/2010/03/24/110478.html
最近正在开发一个网络打印服务器程序,使用Boost::asio库来实现服务端。下面详细介子绍asio库的使用方法,仅用来总结学习经验。如有不对的地方请大家指正.废话少说,直接进入主题。
对于一个网络程序的服务器端我们需要提供的是服务器的address,和服务开放的端口号port。
在asio库中首先我们必须使用一个io_service类来支持所有的IO功能。需要注意到是我们必须调用io_service_my.run()函数来开启IO服务的事件循环以使功能都能被正常使用。
现在我们可以基于这个io_service_my来关联构建一下几个类:
1. boost::asio::ip::tcp::acceptor acceptor_my(io_service_my);
因为LPD的实现是基于TCP传输协议,所以也使用了TCP的acceptor来接收client发来的连接。
2.
这几个类主要是用来实现对地址的解析和绑定终端节点到相应的开放端口号上。首先构造一个关联到io_service_my的解析器resolver_my。然后让解析器resolver_my执行resolve
()函数来解析query_my指定的address和port到一个终端节点endpoint_my上。我们会看到这个endpoint_my终端节点会被绑定到这个acceptor_my接收器上。
3. boost::asio::ip::tcp::socket socket_my(io_service_my);
定义一个基于TCP协议的socket关联到io_service_my对象上。
在这些准备工作做完后我们开始一些实际的动作:
其中异步的侦听函数原型是:
template<
void async_accept(
handler所对应的函数在新连接接收完成后会被调用。这种异步方式实现回调的方法也类似于使用boost::asio::io_service::post(boost::bind(&handle_accept));
注意到bind函数中的&handle_accept,这是函数handle_accept的入口地址,也就是在接收完成后会调用的函数在这里我们可以继续进行下一步的处理,从socket_my中读取或者写
入数据。
void handle_accept(boost::system::error_code error)
{
}
类似的写程序如下
最后在所有连接完成之后或是服务器停止的时候别忘记关掉连接。例如
socket_my.close();
acceptor_my.close();
至此一个基于boost::asio库的网络程序的框架就出来了,至于具体的设计类实现可以视需求而定。
- 基于Boost::asio库的网络编程实现基础
- 基于Boost::asio库的网络编程实现基础
- 基于Boost::asio库的网络编程实现基础
- 基于Boost::asio库的网络编程实现基础
- 基于Boost::asio库的网络编程实现基础
- 基于boost::asio的客户端网络库
- boost asio网络编程
- boost的网络库asio
- Boost::asio库的网络编程学习(转)
- 网络编程 - boost::asio优雅的退出
- BOOST网络库-ASIO
- Boost asio之网络编程
- [Boost基础]并发编程——asio网络库——定时器deadline_timer
- [Boost基础]并发编程——asio网络库——同步socket处理
- [Boost基础]并发编程——asio网络库——异步socket处理
- [转]自己开发的基于boost::asio的网络引擎
- 自己开发的基于boost asio的网络引擎
- [转]自己开发的基于boost::asio的网络引擎
- 数据结构中排序和查找各种时间复杂度
- dom4j之创建xml、读取xml、修改xml
- 【C语言】01-概述
- POSIX 线程详解
- 《大数据时代》书评及书摘
- 基于Boost::asio库的网络编程实现基础
- 适配器模式
- js实现段落分页
- python--调用系统命令
- 自定义磁铁特效View
- UVa 409 Excuses, Excuses! (字符串匹配)
- 查看JDK版本是32位还是64位
- FusionChart实现漏斗图
- vc++ 6.0 堆栈