# 实战出精华

在具体的 C++ 网络编程中提升逼格

John Torjo


Boost.Asio C++ 网络编程

Copyright © 2013 Packt Publishing


关于作者

做为一个权威的 C++ 专家,除了偶尔写写 C# 和 Java,John Torjo 把他超过 15 年编程生涯中的大部分时间都贡献给了 C++。

他很喜欢在 C++ Users Journal 和其它杂志上写一些编程相关的文章。

闲暇的时候,他也喜欢玩扑克、开快车。他有很多自由职业,其中有一个甚至把他玩扑克和编程的爱好结合在一起。如果你想联系他,可以发邮件到 john.code@torjo.com


我要感谢我的朋友 Alexandru Chis、Aurelian Hale、Bela Tibor Bartha、Cristian Fatu、Horia Uifaleanu、Nicolae Ghimbovschi 以及 Ovidiu Deac。感谢他们对本书的反馈和意见。同时我也要感谢 Packt 公司对我频繁错过截稿日期行为的包容。然后最需要感谢的是 Chris Kohlhoff,Boost.Asio 的作者,因为他,才有了 Boost.Asio 如此伟大的库。

把这本书送给我最好的朋友 Darius。


关于评审员

Béla Tibor Bartha

一个使用多种技术和语言做开发的专业软件工程师。尽管在过去的 4 年里,他做的是 iOS 和 OSX 应用开发,但是 C++ 陪伴他度过了早期个人游戏项目开发的激情岁月。


我要感谢John,因为他我才能做这本书的评审


Nicolae Ghimbovschi

一个参加各类 C++ 项目超过 5 年的天才个人开发者。他主要参与一些企业通信工程的项目。作为一个狂热的 Linux 爱好者,他喜欢利用不同的操作系统、脚本工具和编程语言进行测试和实验。除了编程,他还喜欢骑自行车、瑜伽和冥想。


我要感谢 John 让我来评审这本书


关于译者

非主流程序猿 mmoaay,技术很烂,喜欢平面设计、鼠绘、交友、运动和翻译,但是确作为一只程序猿混迹在IT行业。热爱开源,技术烂就只好做做设计和翻译的工作。

微博:http://weibo.com/smmoaay


关于avplayer

http://avplayer.org 中国第一技术社区。


目录


前言


第一章:Boost.Asio 入门

什么是 Boost.Asio?
历史
依赖
编译 Boost.Asio
重要的宏
同步 VS 异步
异常 VS 错误代码
Boost.Asio 中的多线程
不仅仅是网络请求
计时器
io_service 类
总结

第二章:Boost.Asio 基本原理

网络 API
Boost.Asio 命名空间
IP 地址
端点
Sockets
同步错误代码
Socket 成员函数
其他注意事项
read/write/connect 自由函数
connect 函数
read/write 函数
异步编程
为什么要异步?
异步 run(),run_one(),poll(),poll_one()
持续运行
run_one(),poll(),poll_one() 函数
异步工作
异步 post() VS dispatch() VS wrap()
保持运行
总结

第三章:回显服务端/客户端

TCP 回显服务端/客户端
TCP 同步客户端
TCP 同步服务端
TCP 异步客户端
TCP 同步服务端
代码
UDP回显服务端/客户端
UDP 同步回显客户端
UDP 同步回显服务端
总结

第四章:客户端和服务端

同步客户端/服务端
同步客户端
同步服务端
异步客户端/服务端
异步客户端
异步服务端
总结

第五章:同步 VS 异步

同步异步混合编程
客户端和服务端之间消息的互相传递
客户端软件中的同步 I/O
服务端软件中的同步 I/O
同步服务端中的线程
客户端软件中的异步 I/O
服务端软件中的异步 I/O
异步服务端中的线程
异步操作
代理实现
总结

第六章:Boost.Asio - 其他特性

std streams 和 std buffer I/O
Boost.Asio 和 STL 流
streambuf 类
处理 streambuf 对象的自由函数
协程
总结

第七章:Boost.Asio - 进阶

Asio VS Boost.Asio
调试
处理程序跟踪信息
例子
处理程序跟踪文件
SSL
Boost.Asio 的 Windows 特性
流处理
随机存储处理
对象处理
Boost.Asio 的 POSIX 特性
本地 sockects
连接本地 sockets
POSIX 文件描述符
Fork
总结

索引


前言

网络编程由来已久,并且极富挑战性。Boost.Asio 对网络编程做了一个极好的抽象,从而保证只需要少量的代码就可以实现一个优雅的客户端/服务端软件。在实现的过程中,它能让你体会到极大的乐趣。而且更为有益的是:Boost.Asio 还包含了一些非网络的特性,用 Boost.Asio 写出来的代码紧凑、易读,而且如果按照我在书中所说的来做,你的代码将无懈可击。

这本书讲了什么?

第一章:Boost.Asio入门将告诉你什么是 Boost.Asio?怎么编译它?然后还有一些例子。通过本章你会发现 Boost.Asio 不仅仅是一个网络库。另外你还会接触到 Boost.Asio 中最核心的类 io_service。

第二章:Boost.Asio基本原理包含了你必须了解的内容:什么时候用Boost.Asio?我们将深入了解异步编程——一种比同步更需要技巧,且更有乐趣的编程方式。这一章也是在开发你自己的网络应用时做为参考的一章。

第三章:回显服务端/客户端将告诉你如何实现一个小的客户端/服务端应用;也许这会是你写过的最简单的客户端/服务端应用。回显应用就是把客户端发过来的消息发送回去然后关闭客户端连接的服务。我们会先实现一个同步的版本,然后再实现一个异步的版本,这样就可以非常容易地看到它们之间的不同。

第四章:客户端和服务端会深入讨论如何用 Boost.Asio 创建一个简单的客户端/服务端应用。我们将讨论如何避免内存泄漏和死锁等问题。为了让你能更方便地对它们进行扩展以满足自己的需求,所有的程序都只实现一个简单的框架。

第五章:同步VS异步会带你了解在同步和异步方式之间做选择时需要考虑的事情。首要的事情就是不要混淆它们。在这一章,我们会发现:实现、测试和调试每个类型应用都是非常容易的。

第六章:Boost.Asio 的其他特性将带你了解 Boost.Asio 一些不为人知的特性。你会发现,虽然 std streams 和 streambufs 有一点点难用,但是却表现出了它们得天独厚的优势。最后,是姗姗来迟的 Boost.Asio 协程,它可以让你用一种更容易读懂的方式来写异步代码。(就好像写同步代码一样)

第七章:Boost.Asio 进阶包含了对 Boost.Asio 进阶问题的处理。虽然不需要在日常编程中深入研究它们,但是了解它们对你有益无害(Boost.Asio 高级调试,SSL,Windows 特性,POSIX 特性等)。

读这本书你需要准备什么?

如果需要编译 Boost.Asio 以及运行本书中的例子,你需要一个现代编译器。例如,Visual Studio 2008 及其以上版本或者 g++ 4.4 及其以上版本

这本书是为谁准备的?

这本书对于那些需要做网络编程却不想深入研究复杂原始网络 API 的开发者来说是一个福音。所有你需要的只是 Boost.Asio 提供的一套 API。作为著名 Boost C++ 库的一部分,你只需要额外添加几个 #include 文件即可转换到 Boost.Asio。

在读这本书之前,你需要熟悉 Boost 核心库的一些知识,例如 Boost 智能指针、boost::noncopyable、Boost Functors、Boost Bind、shared_ from_this/enabled_shared_from_this 和 Boost 线程(线程和互斥量)。同时还需要了解 Boost 的 Date/Time。另外读者还需要知道阻塞的概念以及“非阻塞”操作。

约定

本书使用不同样式的文字来区分不同种类的信息。这里给出这些样式的例子以及它们的解释。

文本中的代码会这样显示:“通常一个io_service的例子就足够了”。

一段代码是下面这个样子的:

read(stream, buffer [, extra options])

async_read(stream, buffer [, extra options], handler)

write(stream, buffer [, extra options])

async_write(stream, buffer [, extra options], handler)

专业词汇和重要的单词用黑体显示

[!警告或者重要的注释在这样的一个框里面]

[?技巧在这样的一个框里面]

读者反馈

我们欢迎来自读者的反馈。告诉我们你对这本书的看法——你喜欢哪部分,不喜欢哪部分。读者的反馈对我们非常重要,它能让我们写出对读者帮助更大的书。

你只需要发送一封邮件到 feedback@packtpub.com 即可进行反馈,注意在邮件的主题中注明书名。

如果你有一个擅长的专题,想撰写一本书或者为某本书做贡献。请阅读我们在 www.packtpub.com/authors 上的作者指引。

用户支持

现在你已经是 Packt 书籍的拥有者,我们将告诉你一些注意事项,让你购买本书得到的收益最大化。

下载示例代码

你可以在 http://www.packtpub.com 登录你的帐号,然后下载你所购买书籍的全部示例代码。同时,你也可以通过访问 http://www.packtpub.com/support 进行注册,这些示例代码文件将直接发送到你的邮箱。

纠错

尽管我们已经尽最大的努力去保证书中内容的准确性,但是错误还是存在的。如果你在我们的书籍中发现了错误——也许是文字,也许是代码——如果你能将它们报告给我们,我们将不胜感激。这样的话,你不仅能帮助其他读者,同时也能帮助我们改进这本书的下一个版本。如果你发现任何需要纠正的地方,访问 http://www.packtpub.com/submit-errata,选择你的书籍,点击 errata submission form 链接,然后输入详细的纠错信息并将错误报告给我们。一旦审核通过,这个纠错就会被上传到我们的网站,或者添加到那本书的纠错列表中。所有已发现的纠错都可以访问 http://www.packtpub.com/support,然后通过选择书名的方式来查看。

答疑

如果有任何关于本书的问题,你可以通过 questions@packtpub.com 联系我们。我们将尽我们最大的努力进行解答。

results matching ""

    No results matching ""