前言(CSDN也有Markdown了,好开森)
實(shí)戰(zhàn)出精華
在具體的C++網(wǎng)絡(luò)編程中提升你的逼格
John Torjo
Boost.Asio C++ 網(wǎng)絡(luò)編程
Copyright ? 2013 Packt Publishing
關(guān)于作者
做為一名權(quán)威的C++專家,John Torjo 的編程生涯已經(jīng)超過了15年,在這15年中,除了偶爾用 C# 和 Java 敲代碼。他大部分時(shí)間都在研究 C++。
他還非常喜歡在 C++ Users Journa l和其它雜志上寫一些編程相關(guān)的文章。
閑暇的時(shí)候,他喜歡玩撲克、開快車。
他有非常多自由職業(yè),當(dāng)中一個(gè)就把他玩撲克和編程的愛好結(jié)合在了一起。假設(shè)你想聯(lián)系他。能夠發(fā)郵件到j(luò)ohn.code@torjo.com。
我要感謝我的朋友 Alexandru Chis, Aurelian Hale, Bela Tibor Bartha, Cristian Fatu, Horia Uifaleanu, Nicolae Ghimbovschi 以及 Ovidiu Deac。感謝他們對(duì)本書提出的反饋和建議。同一時(shí)候我也要感謝 Packt 公司各位對(duì)我頻繁錯(cuò)過截稿日期行為的包容。
然后最須要感謝的是 Chris Kohlhoff。Boost.Asio 的作者,是他寫出了如此偉大的庫。
把這本書獻(xiàn)給我最好的朋友 Darius。
關(guān)于評(píng)審員
Béla Tibor Bartha
一個(gè)使用多種技術(shù)和語言進(jìn)行開發(fā)的專業(yè)軟件project師。雖然在過去的4年里,他做的是 iOS 和 OSX 應(yīng)用開發(fā),可是 C++ 陪伴他度過了早期個(gè)人游戲項(xiàng)目開發(fā)的激情歲月。
我要感謝 John,由于他我才干做這本書的評(píng)審
Nicolae Ghimbovschi
一個(gè)參加各類 C++ 項(xiàng)目超過5年的天才個(gè)人開發(fā)人員。
他主要參與一些企業(yè)通信project的項(xiàng)目。作為一個(gè)狂熱的 Linux 愛好者,他喜歡利用不同的操作系統(tǒng)、腳本工具和編程語言進(jìn)行測(cè)試和實(shí)驗(yàn)。除了編程。他還喜歡騎自行車、瑜伽和冥想。
我要感謝 John 讓我來評(píng)審這本書
關(guān)于譯者
畫渣程序員mmoaay。技術(shù)非常爛。喜歡平面設(shè)計(jì)、鼠繪、交友、運(yùn)動(dòng)和翻譯,可是確作為一僅僅程序員混跡在IT行業(yè)。熱愛開源,技術(shù)爛就僅僅好做做設(shè)計(jì)和翻譯的工作。
微博:http://weibo.com/smmoaay
關(guān)于avplayer
http://avplayer.org 中國第一技術(shù)社區(qū)。
文件夾
前言
第一章:Boost.Asio 入門
什么是 Boost.Asio?歷史依賴編譯 Boost.Asio重要的宏 同步 VS 異步 異常 VS 錯(cuò)誤代碼 Boost.Asio 中的多線程 不僅僅是網(wǎng)絡(luò) 計(jì)時(shí)器 io_service 類 總結(jié)第二章:Boost.Asio 基本原理
網(wǎng)絡(luò) API Boost.Asio 命名空間 IP 地址 端點(diǎn) Sockets同步錯(cuò)誤代碼Socket 成員函數(shù)其它注意事項(xiàng) read/write/connect自由函數(shù)connect 函數(shù)read/write 函數(shù) 異步編程為什么要異步?異步 run(),run_one(),poll(),poll_one()持續(xù)執(zhí)行run_one(),poll(),poll_one() 函數(shù)異步工作異步 post() VS dispatch() VS wrap() 保持執(zhí)行 總結(jié)第三章:回顯服務(wù)端/client
TCP 回顯服務(wù)端/clientTCP 同步clientTCP 同步服務(wù)端TCP 異步clientTCP 同步服務(wù)端代碼 UDP 回顯服務(wù)端/clientUDP 同步回顯clientUDP 同步回顯服務(wù)端 總結(jié)第四章:client和服務(wù)端
同步client/服務(wù)端同步client同步服務(wù)端 異步client/服務(wù)端異步client異步服務(wù)端 總結(jié)第五章:同步VS異步
同步異步混合編程 client和服務(wù)端之間消息的互相傳遞 client軟件中的同步 I/O 服務(wù)端軟件中的同步 I/O同步服務(wù)端中的線程 client軟件中的異步 I/O 服務(wù)端軟件中的異步 I/O異步服務(wù)端中的線程 異步操作 代理實(shí)現(xiàn) 總結(jié)第六章:Boost.Asio-其它特性
std streams 和 std buffer I/O Boost.Asio 和 STL流 streambuf 類 處理 streambuf 對(duì)象的自由函數(shù) 協(xié)程 總結(jié)第七章:Boost.Asio-進(jìn)階
Asio VS Boost.Asio 調(diào)試處理程序跟蹤信息樣例處理程序跟蹤文件 SSL Boost.Asio 的 Windows特性流處理隨機(jī)存儲(chǔ)處理對(duì)象處理 Boost.Asio 的 POSIX 特性本地 sockects連接本地 socketsPOSIX 文件描寫敘述符Fork總結(jié)索引
前言
網(wǎng)絡(luò)編程由來已久。并且是一個(gè)極富挑戰(zhàn)性的任務(wù)。
Boost.Asio 對(duì)網(wǎng)絡(luò)編程做了一個(gè)極好的抽象,從而保證僅僅須要少量的編程就能夠?qū)崿F(xiàn)一個(gè)優(yōu)雅的client/服務(wù)端軟件。
在實(shí)現(xiàn)的過程中。它能讓你體會(huì)到極大的樂趣。
并且更為故意的是:Boost.Asio 包括了一些非網(wǎng)絡(luò)的特性,用 Boost.Asio 寫出來的代碼緊湊、易讀,并且假設(shè)依照我在書中所講的來做,你的代碼會(huì)無懈可擊。
這本書涵蓋了什么?
第一章:Boost.Asio入門將告訴你 Boost.Asio 是什么?怎么編譯它?順帶著會(huì)有一些樣例。你會(huì)發(fā)現(xiàn) Boost.Asio 不僅僅是一個(gè)網(wǎng)絡(luò)庫。同一時(shí)候你也會(huì)接觸到 Boost.Asio 中最核心的類 io_service。
第二章:Boost.Asio基本原理包括了你必須了解的內(nèi)容:什么時(shí)候使用 Boost.Asio?我們將深入了解異步編程——一種比同步更須要技巧,且更有樂趣的編程方式。
這一章也是在開發(fā)你自己的網(wǎng)絡(luò)應(yīng)用時(shí)能夠作為參考的一章。
第三章:回顯服務(wù)端/client將會(huì)告訴你怎樣實(shí)現(xiàn)一個(gè)小的client/服務(wù)端應(yīng)用;或許這會(huì)是你寫過的最簡(jiǎn)單的client/服務(wù)端應(yīng)用。
回顯應(yīng)用就是把client發(fā)過來的消息發(fā)送回去然后關(guān)閉client連接的服務(wù)。
我們會(huì)先實(shí)現(xiàn)一個(gè)同步的版本號(hào),然后再實(shí)現(xiàn)一個(gè)異步的版本號(hào),這樣就能夠非常easy地看到它們之間的不同。
第四章:client和服務(wù)端會(huì)深入討論怎樣用 Boost.Asio 創(chuàng)建一個(gè)簡(jiǎn)單的client/服務(wù)端應(yīng)用。
我們將討論怎樣避免諸如內(nèi)存泄漏和死鎖的缺陷。全部的程序都僅僅是實(shí)現(xiàn)一個(gè)簡(jiǎn)單的框架,從而使你能更方便地對(duì)它們進(jìn)行擴(kuò)展以滿足你的需求。
第五章:同步 VS 異步會(huì)帶你了解在同步和異步方式之間做選擇時(shí)須要考慮的事情。首要的事情就是不要混淆它們。
在這一章,我們會(huì)發(fā)現(xiàn)實(shí)現(xiàn)、測(cè)試和調(diào)試每一個(gè)類型應(yīng)用是非常easy的。
第六章:Boost.Asio 的其它特性將帶你了解 Boost.Asio 一些不為人知的特性。你會(huì)發(fā)現(xiàn)。雖然 std streams 和 streambufs 有一點(diǎn)點(diǎn)難用,可是卻表現(xiàn)出了它們得天獨(dú)厚的優(yōu)勢(shì)。最后,是姍姍來遲的 Boost.Asio 協(xié)程,它能夠讓你用一種更易讀的方式來寫異步代碼。(就好像寫同步代碼一樣)
第七章:Boost.Asio 進(jìn)階包括了一些 Boost.Asio 進(jìn)階問題的處理。
雖然在日常編程中不須要深入研究它們,可是了解它們對(duì)你故意無害(Boost.Asio 高級(jí)調(diào)試,SSL,Windows 特性。POSIX 特性等)。
讀這本書之前你須要準(zhǔn)備什么?
假設(shè)要編譯 Boost.Asio 以及執(zhí)行本書中的樣例,你須要一個(gè)現(xiàn)代編譯器。比如,Visual Studio 2008 及其以上版本號(hào)或者 g++ 4.4 及其以上版本號(hào)
這本書是為誰寫的?
這本書對(duì)于那些須要進(jìn)行網(wǎng)絡(luò)編程卻不想深入研究復(fù)雜的原始網(wǎng)絡(luò) API 的開發(fā)人員來說是一個(gè)福音。全部你須要的僅僅是 Boost.Asio 提供的一套 API 。作為著名 Boost C++ 庫的一部分,你僅僅須要額外加入幾個(gè) #include 文件就可以轉(zhuǎn)換到 Boost.Asio。
在讀這本書之前。你須要熟悉 Boost 核心庫的一些知識(shí),比如 Boost 智能指針、boost::noncopyable、Boost Functors、Boost Bind、shared_ from_this/enabled_shared_from_this 和 Boost 線程(線程和相互排斥量)。同一時(shí)候還須要了解 Boost 的 Date/Time。讀者還須要知道堵塞的概念以及“非堵塞”操作。
約定
本書使用不相同式的文字來區(qū)分不同種類的信息。
這里給出這些樣式的樣例以及它們的解釋。
文本中的代碼會(huì)這樣顯示:“通常一個(gè) 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)專業(yè)詞匯和重要的單詞用黑體顯示
[!
警告或者重要的凝視在這種一個(gè)框里面]
[?技巧在這種一個(gè)框里面]
讀者反饋
我們歡迎來自讀者的反饋。告訴我們你對(duì)這本書的看法——你喜歡哪部分,不喜歡哪部分。讀者的反饋對(duì)我們非常重要,它能讓我們寫出對(duì)讀者更有幫助的書。
你僅僅須要發(fā)送一封郵件到 feedback@packtpub.com 就可以進(jìn)行反饋。注意在郵件的主題中注明書名。
假設(shè)你有一個(gè)擅長(zhǎng)的專題,想撰寫一本書或者為某本書做貢獻(xiàn)。
請(qǐng)閱讀我們?cè)?www.packtpub.com/authors 上的作者指引。
用戶支持
如今你已經(jīng)是 Packt 書籍的擁有者。我們將告訴你一些事項(xiàng)。讓你購買本書得到的收益最大化。
下載演示樣例代碼
你能夠在 http://www.packtpub.com 登錄你的帳號(hào),然后下載你所購買的書籍的全部演示樣例代碼。同一時(shí)候。你也能夠通過訪問 http://www.packtpub.com/support 進(jìn)行注冊(cè)。然后這些演示樣例代碼文件將直接發(fā)送到你的郵箱。
糾錯(cuò)
雖然我們已經(jīng)盡最大的努力去保證書中內(nèi)容的準(zhǔn)確性,可是錯(cuò)誤還是不可避免的。
假設(shè)你在我們的書籍中發(fā)現(xiàn)了錯(cuò)誤——或許是文字,或許是代碼——假設(shè)你能將它們報(bào)告給我們,我們將不勝感激。
這種話,你不僅能幫助其它讀者。同一時(shí)候也能幫助我們改進(jìn)這本書的下一個(gè)版本號(hào)。
假設(shè)你發(fā)現(xiàn)不論什么須要糾正的地方,訪問 http://www.packtpub.com/submit-errata,選擇你的書籍,點(diǎn)擊errata submission form鏈接。然后輸入具體的糾錯(cuò)信息來將錯(cuò)誤報(bào)告給我們。一經(jīng)確定,你的提交就會(huì)通過。然后這個(gè)糾錯(cuò)就會(huì)被上傳到我們的站點(diǎn),或者加入到那本書的糾錯(cuò)信息區(qū)域的糾錯(cuò)列表中。
全部已發(fā)現(xiàn)的糾錯(cuò)都能夠訪問 http://www.packtpub.com/support。然后通過選擇書名的方式來查看。
答疑
假設(shè)你有關(guān)于本書不論什么方面的問題,你能夠通過 questions@packtpub.com 聯(lián)系我們。我們將盡我們最大的努力進(jìn)行解答
總結(jié)
以上是生活随笔為你收集整理的前言(CSDN也有Markdown了,好开森)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: easyui combobox设置只读属
- 下一篇: 二叉排序树(BST)构造与应用