《Linux C/C++伺服器開發實踐》簡介

brucexia發表於2022-07-07

# 好書推薦 ## 好書奇遇季 #Linux 網路伺服器程式設計入門書《 Linux C/C++ 伺服器開發實踐》,京東噹噹天貓都有發售。 416 頁厚書,定價 99 元,打折一下更便宜。

 

本書從五大伺服器程式設計基礎技術開始,逐步深入到四大專案案例進行融合開發,融合網路程式設計和一些資料庫、跨平臺介面程式設計知識,使得案例講解系統完整,甚至稍微修改一下就可以上升為商用軟體,比如最後一章的併發遊戲伺服器。

 

通常網路程式設計書中,只會分析一個綜合案例,而本書乾貨頗多,提供了 HTTP 伺服器、 FTP 伺服器、併發聊天伺服器與併發遊戲伺服器四大綜合案例,可以作為課程設計以及畢業設計的素材。

 

本書較為全面地介紹了基於 Linux 網路程式設計的基礎知識和程式設計技術,章節安排貼近企業專案需求,對基於 Linux C/C++ 語言的多執行緒程式設計和 Linux 作業系統支援的網路庫函式等進行講解,由易到難,逐層遞進。

 

本書內容

 

本書共分 12 章,內容包括網路概述、網路基礎概念、套接字、 TCP 程式設計、 UDP 程式設計、原始套接字程式設計、網路 I/O 模型、伺服器設計,以及四大綜合實踐專案( HTTP 伺服器、 FTP 伺服器、併發聊天伺服器與 C/S P2P 聯合架構的併發遊戲伺服器),透過專案練習幫助讀者鞏固所學的程式設計技術。

 

本書讀者

 

本書適合具有 Linux C/C++ 程式設計基礎、需要掌握 Linux 伺服器程式設計的開發人員閱讀,也適合高等院校和培訓學校計算機軟體開發相關專業的師生作為參考用書。

 

本書作者

 

朱文偉,名校計算機專業統招碩士, 20 C\C++ Java 開發經驗。主導開發過密碼、圖形、人工智慧等產品。精通 Linux Windows 系統開發及資料庫開發技術。著有圖書《 Windows C/C++ 加密解密實戰》《密碼學原理與 Java 實現》《 Linux C C++ 一線開發實踐》《 Visual C++2017 從入門到精通》《 OpenCV 4.5 計算機視覺開發實戰(基於 VC++ )》《 OpenCV 4.5 計算機視覺開發實戰:基於 Python 》。

 

本書目錄


第1章  TCP/IP基礎 1


1.1  TCP/IP協議的分層結構 1


1.2  應用層 5


1.2.1  DNS 5


1.2.2  埠 6


1.3  傳輸層 6


1.3.1  TCP協議 6


1.3.2  UDP協議 7


1.4  網路層 7


1.4.1  IP協議 7


1.4.2  ARP協議 13


1.4.3  RARP協議 15


1.4.4  ICMP協議 16


1.5  資料鏈路層 24


1.5.1  資料鏈路層的基本概念 24


1.5.2  資料鏈路層主要功能 24


第2章  搭建Linux開發環境 26


2.1  準備虛擬機器環境 26


2.1.1  在VMware下安裝Linux 26


2.1.2  開啟root賬戶 29


2.1.3  關閉防火牆 30


2.1.4  安裝網路工具包 30


2.1.5  啟用SSH 31


2.1.6  拍攝快照 32


2.1.7  連線虛擬機器Linux 32


2.1.8  和虛擬機器互傳檔案 43


2.2  搭建Linux下C/C++開發環境 44


2.3  搭建Windows下Linux C/C++開發環境 45


2.3.1  Windows下非整合式的Linux C/C++開發環境 45


2.3.2  Windows下整合式的Linux C/C++開發環境 48


第3章  多執行緒基本程式設計 52


3.1  使用多執行緒的好處 52


3.2  多執行緒程式設計的基本概念 53


3.2.1  作業系統和多執行緒 53


3.2.2  執行緒的基本概念 54


3.2.3  執行緒的狀態 54


3.2.4  執行緒函式 55


3.2.5  執行緒標識 55


3.2.6  C++多執行緒開發的兩種方式 55


3.3  利用POSIX多執行緒API函式進行多執行緒開發 56


3.3.1  執行緒的建立 56


3.3.2  執行緒的屬性 61


3.3.3  執行緒的結束 72


3.3.4  執行緒退出時的清理機會 79


3.4  C++11中的執行緒類 85


3.4.1  執行緒的建立 86


3.4.2  執行緒的識別符號 93


3.4.3  當前執行緒this_thread 94


3.5  執行緒同步 97


3.5.1  同步的基本概念 98


3.5.2  臨界資源和臨界區 102


3.6  基於POSIX進行執行緒同步 102


3.6.1  互斥鎖 102


3.6.2  讀寫鎖 108


3.6.3  條件變數 115


3.7  C++11/14中的執行緒同步 121


3.7.1  基本互斥鎖std::mutex 122


3.7.2  定時互斥鎖std::time_mutex 123


3.8  執行緒池 125


3.8.1  執行緒池的定義 125


3.8.2  使用執行緒池的原因 125


3.8.3  基於POSIX實現執行緒池 126


3.8.4  基於C++11實現執行緒池 131


第4章  TCP伺服器程式設計 136


4.1  套接字的基本概念 136


4.2  網路程式的架構 137


4.3  IP地址的格式轉換 138


4.4  套接字的型別 139


4.5  套接字地址 140


4.5.1  通用socket地址 140


4.5.2  專用socket地址 141


4.5.3  獲取套接字地址 142


4.6  主機位元組序和網路位元組序 144


4.7  協議族和地址族 146


4.8  TCP套接字程式設計的基本步驟 149


4.9  TCP套接字程式設計的相關函式 149


4.9.1  BSD socket的標頭檔案 149


4.9.2  socket函式 150


4.9.3  bind函式 151


4.9.4  listen函式 154


4.9.5  accept函式 154


4.9.6  connect函式 155


4.9.7  send函式 155


4.9.8  recv函式 156


4.9.9  close函式 157


4.10  簡單的TCP套接字程式設計 157


4.11  深入理解TCP程式設計 161


4.11.1  資料傳送和接收涉及的緩衝區 161


4.11.2  TCP資料傳輸的特點 162


4.11.3  資料傳送的六種情形 162


4.11.4  資料接收時的情形 163


4.11.5  一次請求響應的資料接收 164


4.11.6  多次請求響應的資料接收 168


4.12  I/O控制命令 179


4.13  套接字選項 182


4.13.1  基本概念 182


4.13.2  選項的級別 182


4.13.3  獲取套接字選項 183


4.13.4  設定套接字選項 187


第5章  UDP伺服器程式設計 190


5.1  UDP套接字程式設計的基本步驟 190


5.2  UDP套接字程式設計的相關函式 191


5.2.1  sendto函式 192


5.2.2  recvfrom函式 192


5.3  實戰UDP套接字 192


5.4  UDP丟包及無序問題 198


第6章  原始套接字程式設計 199


6.1  原始套接字的強大功能 199


6.2  建立原始套接字的方式 201


6.3  原始套接字的基本程式設計步驟 201


6.3.1  建立原始套接字函式socket 202


6.3.2  接收函式recvfrom 203


6.3.3  傳送函式sendto 205


6.4  AF_INET方式捕獲報文 205


6.5  PF_PACKET方式捕獲報文 212


第7章  伺服器模型設計 219


7.1  I/O模型 220


7.1.1  基本概念 220


7.1.2  同步和非同步 220


7.1.3  阻塞和非阻塞 222


7.1.4  同步與非同步和阻塞與非阻塞的關係 224


7.1.5  採用socket I/O模型的原因 224


7.1.6  (同步)阻塞I/O模型 225


7.1.7  (同步)非阻塞式I/O模型 226


7.1.8  (同步)I/O多路複用模型 227


7.1.9  (同步)訊號驅動式I/O模型 228


7.1.10  非同步I/O模型 228


7.1.11  五種I/O模型比較 229


7.2  (分時)迴圈伺服器 230


7.2.1  UDP迴圈伺服器 230


7.2.2  TCP迴圈伺服器 234


7.3  多程式併發伺服器 237


7.4  多執行緒併發伺服器 243


7.5  I/O多路複用的伺服器 246


7.5.1  使用場景 247


7.5.2  基於select的伺服器 247


7.5.3  基於poll的伺服器 255


7.5.4  基於epoll的伺服器 262


第8章  網路效能工具Iperf 271


8.1  Iperf的特點 271


8.2  Iperf的工作原理 271


8.3  Iperf的主要功能 272


8.4  Iperf在Linux下的使用 273


8.4.1  在Linux下安裝Iperf 273


8.4.2  Iperf的簡單使用 274


8.5  Iperf在Windows下的使用 275


8.5.1  命令列版本 275


8.5.2  圖形化版本 276


第9章  HTTP伺服器程式設計 277


9.1  CGI程式的工作方式 277


9.2  架設Web伺服器Apache 278


9.3  HTTP的工作原理 281


9.4  HTTP的特點 281


9.5  HTTP的訊息結構 282


9.6  客戶端請求訊息 282


9.7  伺服器響應訊息 283


9.8  HTTP狀態碼 284


9.9  HTTP狀態碼分類 284


9.10  實現HTTP伺服器 285


9.10.1  邏輯架構 285


9.10.2  程式工作流程 286


9.10.3  主要功能函式 286


9.10.4  工程實現 287


第10章  基於Libevent的FTP伺服器 299


10.1  Reactor模式 299


10.1.1  Reactor模式的優點 300


10.1.2  Reactor模式的框架 300


10.1.3  Reactor事件處理流程 302


10.2  使用Libevnet的基本流程 302


10.3  下載和編譯Libevent 304


10.4  FTP概述 305


10.4.1  FTP的工作原理 306


10.4.2  FTP的傳輸方式 306


10.4.3  FTP的工作方式 307


10.4.4  FTP命令 308


10.4.5  FTP應答碼 311


10.5  開發FTP伺服器 312


10.6  開發FTP客戶端 318


10.6.1  客戶端需求分析 319


10.6.2  概要設計 319


10.6.3  客戶端工作流程設計 319


10.6.4  實現主介面 319


10.6.5  實現登入介面 323


10.6.6  實現登入後的操作介面 323


10.6.7  執行結果 328


第11章  併發聊天伺服器 331


11.1  系統平臺的選擇 331


11.1.1  應用系統平臺模式的選擇 331


11.1.2  C/S模式介紹 332


11.1.3  資料庫系統的選擇 333


11.2  系統需求分析 333


11.2.1  即時訊息的一般需求 333


11.2.2  即時訊息的協議需求 333


11.2.3  即時訊息的安全需求 334


11.2.4  即時訊息的加密和鑑別 334


11.2.5  即時訊息的註冊需求 334


11.2.6  即時訊息的通訊需求 334


11.3  系統總體設計 334


11.4  即時通訊系統的實施原理 335


11.4.1  IM的工作方式 336


11.4.2  IM的基本技術原理 336


11.4.3  IM的通訊方式 336


11.5  功能模組劃分 337


11.5.1  模組劃分 337


11.5.2  伺服器端功能 338


11.5.3  客戶端功能 338


11.5.4  伺服器端多執行緒 338


11.5.5  客戶端多執行緒 339


11.6  資料庫設計 339


11.6.1  資料庫的選擇 339


11.6.2  準備MySQL環境 340


11.6.3  Linux下的MySQL的C程式設計 344


11.6.4  聊天系統資料庫設計 350


11.6.5  伺服器端設計 351


11.6.6  客戶端設計 359


第12章  C/S和P2P聯合架構的遊戲伺服器 366


12.1  網路遊戲伺服器發展現狀 367


12.2  現有網路遊戲伺服器結構 368


12.2.1  C/S結構 368


12.2.2  遊戲大廳代理結構 369


12.2.3  P2P結構 369


12.3  P2P網路遊戲技術分析 370


12.4  網路遊戲的同步機制 372


12.4.1  事件一致性 372


12.4.2  時間同步 372


12.5  總體設計 373


12.5.1  伺服器系統架構模型 373


12.5.2  傳輸層協議的選擇 376


12.5.3  協議包設計 376


12.6  資料庫設計 378


12.7  伺服器端詳細設計和實現 378


12.8  客戶端詳細設計和實現 388


12.8.1  五子棋簡介 388


12.8.2  棋盤類CTable 389


12.8.3  遊戲模式類CGame 391


12.8.4  訊息機制 393


12.8.5  遊戲演算法 396



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/18841117/viewspace-2904692/,如需轉載,請註明出處,否則將追究法律責任。

相關文章