实战出精华

在具体的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 联系我们。我们将尽我们最大的努力进行解答

前言(CSDN也有Markdown了,好开森)的更多相关文章

  1. CSDN中的MARKDOWN编辑器如何快速复制粘贴图片?

    前言 我们在使用csdn的markdown编辑器复制其它网站图片,按住ctrl+C复制选择图片,然后按ctrl+V粘贴图片到md编辑器无任何反应!markdown编辑器每次都没法复制粘贴截图! 下面小 ...

  2. CSDN博客已经打不开了

    CSDN博客已经打不开了,移动和联通的网都一样,怀疑是辽宁节点到骨干网出现故障 tracert结果 4跳和5跳本来是国际出口,相当于出国绕了一圈再回来访问 Hop IP地址 所在地 耗时(ms) 1 ...

  3. Boost.Asio基本原理(CSDN也有Markdown了,好开森)

    Boost.Asio基本原理 这一章涵盖了使用Boost.Asio时必须知道的一些事情.我们也将深入研究比同步编程更复杂.更有乐趣的异步编程. 网络API 这一部分包含了当使用Boost.Asio编写 ...

  4. CSDN Markdown简明教程5-高速上手

    0.文件夹 文件夹 前言 CSDN Markdown特点 CSDN Markdown高速上手 1 使用快捷键 粗体斜体 引用 链接 高亮代码块 图片 标题 列表 切割线 撤销反复 2 使用离线写作 3 ...

  5. 用了 CSDN 的 markdown 编辑器吐槽下~~

    吐槽一下.. . 第一次用 CSDN 的这个 markdown 编辑器,首先感官上看起来还是非常大气相比曾经那个 HTML 编辑器实在时上了N个档次,但实际使用的体验实在是比較糟糕的.希望能改进下哦: ...

  6. Markdown 完全指南

    概述 Markdown 是一种用于网络文本书写的轻量级标记语言,广泛用于个人 blog.github.wiki 中.其实浏览器并不能识别 Markdown 的语法,但许多 blog.wiki 平台以及 ...

  7. 软工案例分析作业-CSDN

    项目 内容 这个作业属于哪个课程 2021春季计算机学院软件工程(罗杰 任健) 这个作业的要求在哪里 案例分析作业要求 我在这个课程的目标是 提升软件开发能力与团队意识 这个作业在哪个具体方面帮助我实 ...

  8. 谈谈我眼中的CSDN吧

    昨天逛博客园看到了这篇曝光率很高的文章:博客搬家——从CSDN到博客园,一篇短短的文章竟然招致这么多人的讨论,可能程序员就喜欢“Java好还是PHP好”这类型的问题吧,好无聊.由于我一直在使用CSDN ...

  9. 将markdown格式转化为bootstrap风格html

    前言:这些年markdown格式的文件很流行,像github里project说明文档都是用markdown格式编写. 一方面,我们能够通过pandoc将markdown文件转换为html,这样将htm ...

随机推荐

  1. 【Luogu】P3358最长k可重区间集问题(费用流)

    题目链接 这题费用瘤,数据貌似还是错的. 把线段抽象抽象拆成两个点,入点表示左端,出点表示右端,连上容量为1费用-长度的边. 不相交线段随便连下,源点向拆出的原点S'连费用为0容量k,然后跑费用流. ...

  2. php-超全局变量

    下表列出了您能够在 $_SERVER 中访问的最重要的元素: 元素/代码 描述 $_SERVER[' PHP_SELF '] 返回当前执行脚本的文件名. $_SERVER[' GATEWAY_INTE ...

  3. java面试题之什么是CAS

    CAS,即Compare and Switch,比较-替换,里面有三个操作数:内存值V.旧的预期值A.要修改的值B: 当预期值A和内存值V相同时,才会将内存值修改为B并返回true,否则什么都不做并返 ...

  4. bzoj[Usaco2008 Nov]mixup2 混乱的奶牛 状压dp

    [Usaco2008 Nov]mixup2 混乱的奶牛 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1204  Solved: 698[Submit ...

  5. tyvj 2002 扑克牌

    期望DP 本题递推比较麻烦,可以记忆化搜索 注意搜索的边界条件 以及每一次转移 #include <iostream> #include <cstdio> #include & ...

  6. SharePoint 2013 App 开发—App开发概述

    基于安全性的考虑,SharePoint App 不能像其它两种方式一样,直接使用安全性更高的服务端代码的API.Javascript 扮演极为重要的角色,在SharePoint App中与ShareP ...

  7. 【CF652C】Foe Pairs(线性扫描)

    题意:给你1-n的一个排列和m组数对,问有多少区间不包含任意一个数对. (1 ≤ n, m ≤ 3·105) 思路:数据范围过大,不能用容斥原理 f[i]表示以位置i上的数为左端点,右端点最小到哪里 ...

  8. c#.NET的事件与委托例子

    原文发布时间为:2008-07-25 -- 来源于本人的百度文章 [由搬家工具导入] using System;using System.Data;using System.Configuration ...

  9. HDU 4405: Aeroplane chess

    类型:概率DP 题意:一条直线下飞行棋,色子六个面等概率.同时存在一些飞机航线,到了某个点可以直接飞到后面的另一个点,可以连飞,保证一个点至多一条航线.求到达或者超过终点 所需要 掷色子的期望次数. ...

  10. mysql tinyint bit

    Java bit 对应 mysql tinyint(1)    false = 0 ,true = 1.