首页 > 代码库 > 前言(CSDN也有Markdown了,好开森)

前言(CSDN也有Markdown了,好开森)

实战出精华

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

John Torjo


Boost.Asio C++ 网络编程

Copyright ? 2013 Packt Publishing


关于作者

做为一名权威的C++专家,John Torjo 的编程生涯已经超过了15年,在这15年中,除了偶尔用 C#Java 敲代码。他大部分时间都在研究 C++

他还非常喜欢在 C++ Users Journa l和其它杂志上写一些编程相关的文章。

闲暇的时候,他喜欢玩扑克、开快车。

他有非常多自由职业,当中一个就把他玩扑克和编程的爱好结合在了一起。假设你想联系他。能够发邮件到john.code@torjo.com。


我要感谢我的朋友 Alexandru Chis, Aurelian Hale, Bela Tibor Bartha, Cristian Fatu, Horia Uifaleanu, Nicolae Ghimbovschi 以及 Ovidiu Deac。感谢他们对本书提出的反馈和建议。同一时候我也要感谢 Packt 公司各位对我频繁错过截稿日期行为的包容。

然后最须要感谢的是 Chris Kohlhoff。Boost.Asio 的作者,是他写出了如此伟大的库。

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


关于评审员

Béla Tibor Bartha

一个使用多种技术和语言进行开发的专业软件project师。虽然在过去的4年里,他做的是 iOSOSX 应用开发,可是 C++ 陪伴他度过了早期个人游戏项目开发的激情岁月。


我要感谢 John,由于他我才干做这本书的评审


Nicolae Ghimbovschi

一个參加各类 C++ 项目超过5年的天才个人开发人员。

他主要參与一些企业通信project的项目。作为一个狂热的 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()
保持执行
总结

第三章:回显服务端/client

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

第四章:client和服务端

同步client/服务端
    同步client
    同步服务端
异步client/服务端
    异步client
    异步服务端
总结

第五章:同步VS异步

同步异步混合编程
client和服务端之间消息的互相传递
client软件中的同步 I/O
服务端软件中的同步 I/O
    同步服务端中的线程
client软件中的异步 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 对网络编程做了一个极好的抽象,从而保证仅仅须要少量的编程就能够实现一个优雅的client/服务端软件。

在实现的过程中。它能让你体会到极大的乐趣。

并且更为故意的是:Boost.Asio 包括了一些非网络的特性,用 Boost.Asio 写出来的代码紧凑、易读,并且假设依照我在书中所讲的来做,你的代码会无懈可击。

这本书涵盖了什么?

第一章:Boost.Asio入门将告诉你 Boost.Asio 是什么?怎么编译它?顺带着会有一些样例。你会发现 Boost.Asio 不仅仅是一个网络库。同一时候你也会接触到 Boost.Asio 中最核心的类 io_service

第二章:Boost.Asio基本原理包括了你必须了解的内容:什么时候使用 Boost.Asio?我们将深入了解异步编程——一种比同步更须要技巧,且更有乐趣的编程方式。

这一章也是在开发你自己的网络应用时能够作为參考的一章。

第三章:回显服务端/client将会告诉你怎样实现一个小的client/服务端应用;或许这会是你写过的最简单的client/服务端应用。

回显应用就是把client发过来的消息发送回去然后关闭client连接的服务。

我们会先实现一个同步的版本号,然后再实现一个异步的版本号,这样就能够非常easy地看到它们之间的不同。

第四章:client和服务端会深入讨论怎样用 Boost.Asio 创建一个简单的client/服务端应用。

我们将讨论怎样避免诸如内存泄漏和死锁的缺陷。全部的程序都仅仅是实现一个简单的框架,从而使你能更方便地对它们进行扩展以满足你的需求。

第五章:同步 VS 异步会带你了解在同步和异步方式之间做选择时须要考虑的事情。首要的事情就是不要混淆它们。

在这一章,我们会发现实现、測试和调试每一个类型应用是非常easy的。

第六章: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 联系我们。我们将尽我们最大的努力进行解答

<script type="text/javascript"> $(function () { $(‘pre.prettyprint code‘).each(function () { var lines = $(this).text().split(‘\n‘).length; var $numbering = $(‘
    ‘).addClass(‘pre-numbering‘).hide(); $(this).addClass(‘has-numbering‘).parent().append($numbering); for (i = 1; i <= lines; i++) { $numbering.append($(‘
  • ‘).text(i)); }; $numbering.fadeIn(1700); }); }); </script>

前言(CSDN也有Markdown了,好开森)