boost asio 翻译(一)

http://www.gamedev.net/blog/950/entry-2249317-a-guide-to-getting-started-with-boostasio/

编译环境 boost1.59  vs2015

A guide to getting started with boost::asio
boost asio 学习指南

boost::asio是一个使用现代C++方法为开发者提供异步模型的跨平台的c++网络和

底层IO库.目前已经拥有大量用户并成为boost库的一部分

在开始之前,我们将浏览下boost::asio综述。它包括了很多我们必须知道的基本

信息。指南不会涉及整个boost库的复杂细节,他将指导我们学习如何在我们的程

序中使用ASIO。

本指南不会教授任何编程语言。读者必须熟悉C++并且熟练使用boost库,尤其是ASIO库。指南也不会教授网络编程。换句话说,本指南的目标是指导读者使用asio,但是依旧需要读者花费时间读取官方文档。

本指南示例是在windows下编译。如果代码需要移植,可能需要做一些逻辑上的改变。所有代码已经压缩并上传,没有包含工程文件,仅包含源码文件。代码依赖BOOST库。

1 io_service的基础
boost::asio的核心对象就是io_service.此对象类似于库的大脑和心脏。我们使用一个简单的示例来熟悉它,调用run成员函数。如果查看函数的文档说明,run函数将阻塞直到所有任务完成并且没有任何处理器被分发,或者直到io_service被停止。

代码示例1a

#include <boost/asio.hpp>
#include <iostream>

int main( int argc, char * argv[] )
{
	boost::asio::io_service io_service;

	io_service.run();

	std::cout << "Do you reckon this line displays?" << std::endl;

	return 0;
}

  

基于文档描述,我们期望文本会被打印。当我们运行程序时,我们得到了预期的效果,我们看见了这行文本。

我们将创建一个任务类,任务类在有任务运行时通知io_service。换句话说,当io_service有一个任务对象与其关联,它将不会停止运行。下个示例验证这个说法。

代码示例1b

#include <boost/asio.hpp>
#include <iostream>

int main( int argc, char * argv[] )
{
	boost::asio::io_service io_service;
	boost::asio::io_service::work work( io_service );

	io_service.run();

	std::cout << "Do you reckon this line displays?" << std::endl;

	return 0;
}

  

时间: 2024-12-20 11:05:03

boost asio 翻译(一)的相关文章

Boost.Asio C++ Network Programming翻译的校对稿

Boost.Asio C++ Network Programming翻译的校对稿将发布在gitbook上: 大家有兴趣可以一起来校对 目前校对稿仍然在持续不断的添加中,预计明天会全部校对完毕,届时我会将校对稿以pdf的形式发布到csdn的下载频道中,以方便大家更好的阅读全书. 附上链接地址: https://www.gitbook.com/book/mmoaay/boost-asio-cpp-network-programming-chinese

Boost.Asio c++ 网络编程翻译(30)[完结]

PS:至此终于完成了Boost.Asio C++ network programming一书的翻译,这是我人生第一本完整翻译的书,从开始的磕磕绊绊,到最后小有心得,我收获很多.我将把这个系列的博客进行整理和校对,希望有兴趣的人可以帮我一起,来给大家提供更好更专业的阅读体验. 句柄追踪信息到文件 默认情况下,句柄的追踪信息被输出到标准错误流(相当于std::cerr).你想把输出重定向到其他地方的可能性是非常高的.对于控制台应用,输出和错误输出都被默认输出到相同的地方,也就是控制台.但是对于一个w

Boost.Asio c++ 网络编程翻译(1)

第一次翻译,希望大家多多指正 实战出精华 Boost.Asio C++ 网络编程 用具体的C++网络编程例子来提升你的技能 John Torjan 用具体的C++网络编程例子来提升你的技能 Copyright ? 2013 Packt Publishing 版权所有,除了在鉴定文章或者评论中进行简单引用,如果没有经过出版者事先的书面授权,该书的任何部分都不能被转载.存储在检索系统中.或者以任何形式和方式传阅. 在这本书准备发行之前,我们已经尽我们最大的努力去保证书中信息的准确性.但是,这本书中包

Boost.Asio c++ 网络编程翻译(4)

同步VS异步 首先,异步编程和同步编程是有极大的不同的.在同步编程中,你所有的操作都是顺序执行的,比如从一个socket中读取(请求),然后写入(回应)到socket中.每一个操作操作都是阻塞的.因为操作是阻塞的,所以为了不影响主程序,当读写一个socket时,通常创建一个或多个线程来处理socket的输入/输出.因此,同步的服务端/客户端通常是多线程的. 相反的,异步编程是事件驱动的.你启动了一个操作,但是你不知道它何时会结束:你只是提供一个回调,当操作结束时,它会调用这个API,并返回操作结

Boost.Asio c++ 网络编程翻译(23)

客户端应用中的异步I/O 主流程和同步客户端应用有点类似,不同的是Boost.Asio每次都位于async_read和async_write请求中间. 第一种情况是我在第四章 客户端和服务端 中实现过的.你应该还记得在每个异步操作结束的时候,我都启动另外一个异步操作,这样service.run()方法才不会结束. 为了适应第二种情况,你需要使用下面的代码片段: void on_connect() { do_read(); } void do_read() { async_read(sock_,

Boost.Asio c++ 网络编程翻译(14)

保持活动 假如,你需要做下面的操作: io_service service; ip::tcp::socket sock(service); char buff[512]; ... read(sock, buffer(buff)); 在这个例子中,sock和buff的存在时间都必须比read()调用的时间要长.也就是说,在调用read()返回之前,它们都必须有效.这就是你期望的:你传给一个方法的所有参数在参数内部都必须有效.当我们采用异步方式时,事情会变得越复杂. io_service servi

Boost.Asio c++ 网络编程翻译(28)

协程 Boost.Asio的作者在2009-2010年间实现了非常酷的一个部分,协程,它能让你更简单地设计你的异步应用. 它们可以让你同时享受同步和异步两个世界中最好的部分,这就是:异步编程但是很简单就能遵循流程控制,就好像应用是按流程实现的. 正常的流程已经在情形1种展示了,如果使用协程,你会尽可能的接近情形2. 简单来说,就是协程允许在一个方法中的指定位置存在入口来暂停和恢复运行. 如果你要使用协程,你需要只能在boost/libs/asio/example/http/server4目录下找

Boost.Asio c++ 网络编程翻译(16)

TCP异步服务端 核心功能和同步服务端的功能类似,如下: class talk_to_client : public boost::enable_shared_from_this<talk_to_ client> , boost::noncopyable { typedef talk_to_client self_type; talk_to_client() : sock_(service), started_(false) {} public: typedef boost::system::

Boost.Asio c++ 网络编程翻译(13)

异步工作 异步工作不仅仅指用异步地方式接受客户端到服务端的连接,异步从一个socket读取或者写入到socket.它包含了所有可以异步执行的操作. 默认情况下,你是不知道每个异步handler的调用顺序的.除了通常的异步调用(来自异步socket的读取/写入/接受).你可以使用service.post()来使你的自定义方法被异步地调用.例如: #include <boost/thread.hpp> #include <boost/bind.hpp> #include <boo