[譯]前言

2018-06-19 15:33 更新

實戰(zhàn)出精華

在具體的C++網(wǎng)絡編程中提升你的逼格

John Torjo

Boost.Asio C++ 網(wǎng)絡編程

Copyright ? 2013 Packt Publishing

關于作者

做為一名權威的C++專家,John Torjo 的編程生涯已經(jīng)超過了15年,在這15年中,除了偶爾用 C#Java 寫程序,他大部分時間都在研究 C++。

他還很喜歡在 C++ Users Journa l和其他雜志上寫一些編程相關的文章。

閑暇的時候,他喜歡玩撲克、開快車。他有很多自由職業(yè),其中一個就把他玩撲克和編程的愛好結(jié)合在了一起,如果你想聯(lián)系他,可以發(fā)郵件到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

一個使用多種技術和語言進行開發(fā)的專業(yè)軟件工程師。盡管在過去的4年里,他做的是 iOSOSX 應用開發(fā),但是 C++ 陪伴他度過了早期個人游戲項目開發(fā)的激情歲月。

我要感謝 John,因為他我才能做這本書的評審

Nicolae Ghimbovschi

一個參加各類 C++ 項目超過5年的天才個人開發(fā)者。他主要參與一些企業(yè)通信工程的項目。作為一個狂熱的 Linux 愛好者,他喜歡利用不同的操作系統(tǒng)、腳本工具和編程語言進行測試和實驗。除了編程,他還喜歡騎自行車、瑜伽和冥想。

我要感謝 John 讓我來評審這本書

關于譯者

畫渣程序猿mmoaay,技術很爛,喜歡平面設計、鼠繪、交友、運動和翻譯,但是確作為一只程序猿混跡在IT行業(yè)。熱愛開源,技術爛就只好做做設計和翻譯的工作。

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

關于avplayer

http://avplayer.org 中國第一技術社區(qū)。

目錄

前言

第一章:Boost.Asio 入門

什么是 Boost.Asio? 歷史 依賴 編譯 Boost.Asio 重要的宏 同步 VS 異步 異常 VS 錯誤代碼 Boost.Asio 中的多線程 不僅僅是網(wǎng)絡 計時器 io_service 類 總結(jié)

第二章:Boost.Asio 基本原理

網(wǎng)絡 API Boost.Asio 命名空間 IP 地址 端點 Sockets 同步錯誤代碼 Socket 成員函數(shù) 其他注意事項 read/write/connect自由函數(shù) connect 函數(shù) read/write 函數(shù) 異步編程 為什么要異步? 異步 run(),run_one(),poll(),poll_one() 持續(xù)運行 run_one(),poll(),poll_one() 函數(shù) 異步工作 異步 post() VS dispatch() VS wrap() 保持運行 總結(jié)

第三章:回顯服務端/客戶端

TCP 回顯服務端/客戶端 TCP 同步客戶端 TCP 同步服務端 TCP 異步客戶端 TCP 同步服務端 代碼 UDP 回顯服務端/客戶端 UDP 同步回顯客戶端 UDP 同步回顯服務端 總結(jié)

第四章:客戶端和服務端

同步客戶端/服務端 同步客戶端 同步服務端 異步客戶端/服務端 異步客戶端 異步服務端 總結(jié)

第五章:同步VS異步

同步異步混合編程 客戶端和服務端之間消息的互相傳遞 客戶端軟件中的同步 I/O 服務端軟件中的同步 I/O 同步服務端中的線程 客戶端軟件中的異步 I/O 服務端軟件中的異步 I/O 異步服務端中的線程 異步操作 代理實現(xiàn) 總結(jié)

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

std streams 和 std buffer I/O Boost.Asio 和 STL流 streambuf 類 處理 streambuf 對象的自由函數(shù) 協(xié)程 總結(jié)

第七章:Boost.Asio-進階

Asio VS Boost.Asio 調(diào)試 處理程序跟蹤信息 例子 處理程序跟蹤文件 SSL Boost.Asio 的 Windows特性 流處理 隨機存儲處理 對象處理 Boost.Asio 的 POSIX 特性 本地 sockects 連接本地 sockets POSIX 文件描述符 Fork 總結(jié)

索引

前言

網(wǎng)絡編程由來已久,并且是一個極富挑戰(zhàn)性的任務。Boost.Asio 對網(wǎng)絡編程做了一個極好的抽象,從而保證只需要少量的編程就可以實現(xiàn)一個優(yōu)雅的客戶端/服務端軟件。在實現(xiàn)的過程中,它能讓你體會到極大的樂趣。而且更為有益的是:Boost.Asio 包含了一些非網(wǎng)絡的特性,用 Boost.Asio 寫出來的代碼緊湊、易讀,而且如果按照我在書中所講的來做,你的代碼會無懈可擊。

這本書涵蓋了什么?

第一章:Boost.Asio入門將告訴你 Boost.Asio 是什么?怎么編譯它?順帶著會有一些例子。你會發(fā)現(xiàn) Boost.Asio 不僅僅是一個網(wǎng)絡庫。同時你也會接觸到 Boost.Asio 中最核心的類 io_service。

第二章:Boost.Asio基本原理包含了你必須了解的內(nèi)容:什么時候使用 Boost.Asio?我們將深入了解異步編程——一種比同步更需要技巧,且更有樂趣的編程方式。這一章也是在開發(fā)你自己的網(wǎng)絡應用時可以作為參考的一章。

第三章:回顯服務端/客戶端將會告訴你如何實現(xiàn)一個小的客戶端/服務端應用;也許這會是你寫過的最簡單的客戶端/服務端應用。回顯應用就是把客戶端發(fā)過來的消息發(fā)送回去然后關閉客戶端連接的服務。我們會先實現(xiàn)一個同步的版本,然后再實現(xiàn)一個異步的版本,這樣就可以非常容易地看到它們之間的不同。

第四章:客戶端和服務端會深入討論如何用 Boost.Asio 創(chuàng)建一個簡單的客戶端/服務端應用。我們將討論如何避免諸如內(nèi)存泄漏和死鎖的缺陷。所有的程序都只是實現(xiàn)一個簡單的框架,從而使你能更方便地對它們進行擴展以滿足你的需求。

第五章:同步 VS 異步會帶你了解在同步和異步方式之間做選擇時需要考慮的事情。首要的事情就是不要混淆它們。在這一章,我們會發(fā)現(xiàn)實現(xiàn)、測試和調(diào)試每個類型應用是非常容易的。

第六章:Boost.Asio 的其他特性將帶你了解 Boost.Asio 一些不為人知的特性。你會發(fā)現(xiàn),雖然 std streams 和 streambufs 有一點點難用,但是卻表現(xiàn)出了它們得天獨厚的優(yōu)勢。最后,是姍姍來遲的 Boost.Asio 協(xié)程,它可以讓你用一種更易讀的方式來寫異步代碼。(就好像寫同步代碼一樣)

第七章:Boost.Asio 進階包含了一些 Boost.Asio 進階問題的處理。雖然在日常編程中不需要深入研究它們,但是了解它們對你有益無害(Boost.Asio 高級調(diào)試,SSL,Windows 特性,POSIX 特性等)。

讀這本書之前你需要準備什么?

如果要編譯 Boost.Asio 以及運行本書中的例子,你需要一個現(xiàn)代編譯器。例如,Visual Studio 2008 及其以上版本或者 g++ 4.4 及其以上版本

這本書是為誰寫的?

這本書對于那些需要進行網(wǎng)絡編程卻不想深入研究復雜的原始網(wǎng)絡 API 的開發(fā)者來說是一個福音。所有你需要的只是 Boost.Asio 提供的一套 API 。作為著名 Boost C++ 庫的一部分,你只需要額外添加幾個 #include 文件即可轉(zhuǎn)換到 Boost.Asio。

在讀這本書之前,你需要熟悉 Boost 核心庫的一些知識,例如 Boost 智能指針、boost::noncopyable、Boost Functors、Boost Bind、shared_ from_this/enabled_shared_from_this 和 Boost 線程(線程和互斥量)。同時還需要了解 Boost 的 Date/Time。讀者還需要知道阻塞的概念以及“非阻塞”操作。

約定

本書使用不同樣式的文字來區(qū)分不同種類的信息。這里給出這些樣式的例子以及它們的解釋。

文本中的代碼會這樣顯示:“通常一個 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è)詞匯和重要的單詞用黑體顯示

[!警告或者重要的注釋在這樣的一個框里面]

[?技巧在這樣的一個框里面]

讀者反饋

我們歡迎來自讀者的反饋。告訴我們你對這本書的看法——你喜歡哪部分,不喜歡哪部分。讀者的反饋對我們非常重要,它能讓我們寫出對讀者更有幫助的書。

你只需要發(fā)送一封郵件到 feedback@packtpub.com 即可進行反饋,注意在郵件的主題中注明書名。

如果你有一個擅長的專題,想撰寫一本書或者為某本書做貢獻。請閱讀我們在 www.packtpub.com/authors 上的作者指引。

用戶支持

現(xiàn)在你已經(jīng)是 Packt 書籍的擁有者,我們將告訴你一些事項,讓你購買本書得到的收益最大化。

下載示例代碼

你可以在 http://www.packtpub.com 登錄你的帳號,然后下載你所購買的書籍的全部示例代碼。同時,你也可以通過訪問 http://www.packtpub.com/support 進行注冊,然后這些示例代碼文件將直接發(fā)送到你的郵箱。

糾錯

盡管我們已經(jīng)盡最大的努力去保證書中內(nèi)容的準確性,但是錯誤還是不可避免的。如果你在我們的書籍中發(fā)現(xiàn)了錯誤——也許是文字,也許是代碼——如果你能將它們報告給我們,我們將不勝感激。這樣的話,你不僅能幫助其他讀者,同時也能幫助我們改進這本書的下一個版本。如果你發(fā)現(xiàn)任何需要糾正的地方,訪問 http://www.packtpub.com/submit-errata,選擇你的書籍,點擊errata submission form鏈接,然后輸入詳細的糾錯信息來將錯誤報告給我們。一經(jīng)確定,你的提交就會通過,然后這個糾錯就會被上傳到我們的網(wǎng)站,或者添加到那本書的糾錯信息區(qū)域的糾錯列表中。所有已發(fā)現(xiàn)的糾錯都可以訪問 http://www.packtpub.com/support,然后通過選擇書名的方式來查看。

答疑

如果你有關于本書任何方面的問題,你可以通過 questions@packtpub.com 聯(lián)系我們。我們將盡我們最大的努力進行解答

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號