最近正在开发一个网络打印服务器程序,使用Boost::asio库来实现服务端。下面详细介子绍asio库的使用方法,仅用来总结学习经验。如有不对的地方请大家指正.废话少说,直接进入主题。
对于一个网络程序的服务器端我们需要提供的是服务器的address,和服务开放的端口号port。
在asio库中首先我们必须使用一个io_service类来支持所有的IO功能。需要注意到是我们必须调用io_service_my.run()函数来开启IO服务的事件循环以使功能都能被正常使用。
boost::asio::io_service io_service_my;
现在我们可以基于这个io_service_my来关联构建一下几个类:
1. boost::asio::ip::tcp::acceptor acceptor_my(io_service_my);
因为LPD的实现是基于TCP传输协议,所以也使用了TCP的acceptor来接收client发来的连接。
2. boost::asio::ip::tcp::resolver resolver_my(io_service_my);
boost::asio::ip::tcp::resolver::query query_my(address,port);
boost::asio::ip::tcp::endpoint endpoint_my = *resolver.resolve(query_my);
这几个类主要是用来实现对地址的解析和绑定终端节点到相应的开放端口号上。首先构造一个关联到io_service_my的解析器resolver_my。然后让解析器resolver_my执行resolve
()函数来解析query_my指定的address和port到一个终端节点endpoint_my上。我们会看到这个endpoint_my终端节点会被绑定到这个acceptor_my接收器上。
3. boost::asio::ip::tcp::socket socke