1. 程式人生 > >前言(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和其他雜誌上寫一些程式設計相關的文章。

閒暇的時候,他喜歡玩撲克、開快車。他有很多自由職業,其中一個就把他玩撲克和程式設計的愛好結合在了一起,如果你想聯絡他,可以發郵件到

[email protected]

我要感謝我的朋友 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

一個使用多種技術和語言進行開發的專業軟體工程師。儘管在過去的4年裡,他做的是 iOSOSX 應用開發,但是 C++ 陪伴他度過了早期個人遊戲專案開發的激情歲月。

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

Nicolae Ghimbovschi

一個參加各類 C++ 專案超過5年的天才個人開發者。他主要參與一些企業通訊工程的專案。作為一個狂熱的 Linux 愛好者,他喜歡利用不同的作業系統、指令碼工具和程式語言進行測試和實驗。除了程式設計,他還喜歡騎自行車、瑜伽和冥想。

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

關於譯者

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

關於avplayer

目錄

前言

第一章: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()
保持執行
總結

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

TCP 回顯服務端/客戶端
    TCP 同步客戶端
    TCP 同步服務端
    TCP 非同步客戶端
    TCP 同步服務端
    程式碼
UDP 回顯服務端/客戶端
    UDP 同步回顯客戶端
    UDP 同步回顯服務端
總結

第四章:客戶端和服務端

同步客戶端/服務端
    同步客戶端
    同步服務端
非同步客戶端/服務端
    非同步客戶端
    非同步服務端
總結

第五章:同步VS非同步

同步非同步混合程式設計
客戶端和服務端之間訊息的互相傳遞
客戶端軟體中的同步 I/O
服務端軟體中的同步 I/O
    同步服務端中的執行緒
客戶端軟體中的非同步 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 對網路程式設計做了一個極好的抽象,從而保證只需要少量的程式設計就可以實現一個優雅的客戶端/服務端軟體。在實現的過程中,它能讓你體會到極大的樂趣。而且更為有益的是:Boost.Asio 包含了一些非網路的特性,用 Boost.Asio 寫出來的程式碼緊湊、易讀,而且如果按照我在書中所講的來做,你的程式碼會無懈可擊。

這本書涵蓋了什麼?

第一章:Boost.Asio入門將告訴你 Boost.Asio 是什麼?怎麼編譯它?順帶著會有一些例子。你會發現 Boost.Asio 不僅僅是一個網路庫。同時你也會接觸到 Boost.Asio 中最核心的類 io_service

第二章:Boost.Asio基本原理包含了你必須瞭解的內容:什麼時候使用 Boost.Asio?我們將深入瞭解非同步程式設計——一種比同步更需要技巧,且更有樂趣的程式設計方式。這一章也是在開發你自己的網路應用時可以作為參考的一章。

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

第四章:客戶端和服務端會深入討論如何用 Boost.Asio 建立一個簡單的客戶端/服務端應用。我們將討論如何避免諸如記憶體洩漏和死鎖的缺陷。所有的程式都只是實現一個簡單的框架,從而使你能更方便地對它們進行擴充套件以滿足你的需求。

第五章:同步 VS 非同步會帶你瞭解在同步和非同步方式之間做選擇時需要考慮的事情。首要的事情就是不要混淆它們。在這一章,我們會發現實現、測試和除錯每個型別應用是非常容易的。

第六章: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)

專業詞彙和重要的單詞用黑體顯示

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

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

讀者反饋

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

你只需要傳送一封郵件到 [email protected] 即可進行反饋,注意在郵件的主題中註明書名。

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

使用者支援

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

下載示例程式碼

糾錯

儘管我們已經盡最大的努力去保證書中內容的準確性,但是錯誤還是不可避免的。如果你在我們的書籍中發現了錯誤——也許是文字,也許是程式碼——如果你能將它們報告給我們,我們將不勝感激。這樣的話,你不僅能幫助其他讀者,同時也能幫助我們改進這本書的下一個版本。如果你發現任何需要糾正的地方,訪問 http://www.packtpub.com/submit-errata,選擇你的書籍,點選errata submission form連結,然後輸入詳細的糾錯資訊來將錯誤報告給我們。一經確定,你的提交就會通過,然後這個糾錯就會被上傳到我們的網站,或者新增到那本書的糾錯資訊區域的糾錯列表中。所有已發現的糾錯都可以訪問 http://www.packtpub.com/support,然後通過選擇書名的方式來檢視。

答疑

如果你有關於本書任何方面的問題,你可以通過 [email protected] 聯絡我們。我們將盡我們最大的努力進行解答