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