天天看點

糖兒飛教你學C++ Socket網絡程式設計——1.為什麼要學Socket程式設計

TCP/IP 網絡程式設計(俗稱Socket程式設計),是針對TCP/IP層協定(如TCP、UDP)進行的網絡程式設計。這是一種最傳統的網絡程式設計方式,許多網際網路早期誕生的網絡軟體,如QQ、Foxmail都是依賴于Socket程式設計技術開發出來的。

相對于基于應用層協定(如HTTP)的Web程式設計來說,TCP/IP 網絡程式設計由于是在更底層協定上進行程式設計,必須程式設計實作建立套接字、監聽、建立連接配接等前期步驟後才能進行網絡通信,而Web程式設計卻能依靠HTTP協定直接收發資料,是以,TCP/IP 程式設計的入門難度明顯比Web程式設計要大得多。同時,TCP/IP 網絡程式設計主要用于開發C/S結構或P2P結構的軟體,這類軟體需要開發Windows界面,很多時候還會涉及到多線程程式設計,以及線程之間參數的傳遞,是以,TCP/IP 網絡程式通常是網絡通信的代碼與Windows界面代碼及多線程處理的代碼混雜在一起,這無疑也增加了這種網絡程式設計的學習難度。

TCP/IP 網絡程式設計相對于當今的Web程式設計來說雖然屬于冷門,但其實際應用領域還是很多的,并且有些應用具有不可替代性(比如工控軟體,物聯網通信軟體等)。随着物聯網技術的普及,TCP/IP 網絡程式設計必将再次變得重要起來。以慕課網(www.imooc.com)為例,關于Socket技術的相關課程多達9門,并且指出“掌握了Socket技術,就等于掌握了推送、IM、物聯網等領域的命脈”,“學習本課程後物聯網相關通信工作不再是難題,且你有能力成為物聯網協定的制定者”。這足以說明學習TCP/IP 網絡程式設計大有可為。

目前市場上有很多網絡程式設計的教材,其定位大都是基于學習者已經很好地掌握了VC/MFC程式設計。但實際情況是,很多學生隻有C語言和面向對象程式設計的基礎知識,幾乎還不具備任何Windows程式開發的知識和經驗,程式編寫能力不足,本書正是為了幫助這類讀者快速掌握Socket程式設計技術而編寫的。在内容編排時,注重解決以下幾方面的問題。

(1)分散難點,由淺入深,問題驅動。比如:在程式類型上,按照“控制台程式→Windows API程式→MFC程式”的步驟組織案例,在開發技術上,按照“TCP一對一同步通信→TCP異步通信→TCP一對多通信→Select模型一對多通信→完成端口模型”。這樣,就将Socket程式設計的難點“WinSock五種I/O模型”分散到了不同的章節執行個體中講解。

(2)本書大部分案例程式都是Windows界面程式,這樣有利于提高學生的學習興趣,并且能讓學生掌握如何将控制台程式轉換成Windows界面程式,這是很有實用價值的。

(3)考慮到很多同學VC程式設計基礎不好,在介紹網絡程式之前,先介紹一些預備程式的編寫。Socket程式設計的另一個難點是很多程式都不可避免地涉及到多線程,本書将多線程程式設計也分散安排在後面幾章的幾個執行個體中講解。

(4)摒棄了用WinSock程式設計制作浏覽器、FTP用戶端和電子郵件用戶端等内容,因為這些軟體已經有很多現成的,完全不需要自己去開發,已沒有多少實用價值,且不能讓學生産生學習興趣。而是安排了群聊軟體、網絡使用者登入系統、線上考試系統等實用價值很大且有趣味性的案例。

雖然目前TCP/IP 網絡程式設計的語言有C++、Java、Python等,但Java、Python等語言都對網絡程式設計的核心WinSock函數進行了封裝,而C++的Win32 API可直接使用WinSock函數進行程式設計,這樣更有利于學生了解Socket程式設計的底層實作細節,是純正的Socket程式設計,學生學會後,不需要多少修改,就能适應Linux、Unix等環境的網絡程式設計,且C++語言效率更高,适合物聯網、工控軟體的開發。基于此,本書采用C++語言作為網絡程式設計的實作語言,同時為了幫助讀者融會貫通,本書在附錄中介紹了使用Python和Java制作基本的TCP通信程式。

繼續閱讀