網絡編程是初學者嚮往卻常因門檻放棄的技能。其實並不複雜:你會打手機嗎?按號碼撥打即可。網絡編程本質就是在兩個或多個設備(如計算機)間傳輸數據。程序員要做的就是把數據發送到指定位置,或接收指定數據。大多數語言提供封裝好 API,調用即可。基礎網絡編程可以像打電話一樣簡單。
隨著聯網趨勢增強,網絡編程成主流技術。本章以淺顯案例帶領入門,進階需閱讀專書與大量實踐。
網絡編程實質是設備間數據傳輸。物理層面:計算機、路由器、交換機經光纖/網線連接成巨大網絡。軟件視角無需深諳物理設備,但深入底層時需補齊。網絡核心優勢在共享:設備共享(如打印機)、數據共享(網站、銀行服務器)。硬件基礎可讀《計算機網絡》教材,非入門必須但進階必修。
首要問題:如何找到網絡上的計算機?引入 IP 地址。IPv4 規定每 IP 由 4 個 0-255 數字組成(如 10.0.120.34)。每台聯網計算機擁有唯一 IP,可能固定(服務器)或動態(ADSL 撥號)。如手機號碼般唯一。
IP 難記憶,引入 域名(如 sohu.com)。一 IP 可對應多域名,一域名只對應一 IP。類比手機通訊錄:姓名對應號碼。傳輸前需域名解析為 IP,由 DNS 服務器完成。瀏覽器輸入域名 → 請求 DNS → 獲取 IP → 實際傳輸。DNS 正常時域名 IP 通用;DNS 故障時僅 IP 可用,IP 更通用。
為讓一台計算機同時運行多個網絡程序,引入 端口。類比:公司總機(IP)+ 分機(端口)。同一計算機上每程序對應唯一端口,數據經 IP 找到機器,再按端口分發給程序。端口號 0-65535,每端口唯一對應一程序,一程序可用多端口。網絡程序運行至少佔用一端口。接收數據:先發到對應機器,再按端口轉發給程序。
有 IP 與端口,即可進行數據交換。但尚不夠,需軟件基礎知識。
網絡編程是運行在不同計算機上的程序間數據交換。最大不同:程序分佈在不同機器,導致交換復雜。雖有 IP/端口定位程序,仍需了解通訊過程。
通訊基於「請求-響應」。如審訊:警官問一句,嫌疑犯答一句,警官不問則沉默。網絡通訊一端發送,另一端回饋,均基於此模型。
主動發起通訊程序稱 客戶端,被動等待稱 服務端。通訊建立後兩者無本質區別。例:QQ 用戶裝客戶端,騰訊機房跑服務端。此結構稱 C/S 結構。優勢:客戶端專門開發表現力豐;不足:通用性差、維護壓力大。
另一結構 B/S 結構:瀏覽器作客戶端。優勢:開發壓力小、無需維護客戶端;不足:瀏覽器限制大、表現力弱、無法系統級操作。B/S 是特殊 C/S。
P2P:如 BT、電驢。程序同時含客戶端與服務端部分。客戶端部分連接種子(服務端),服務端部分向其他客戶端傳輸。類比手機:撥打電話時是客戶端,待機接聽時是服務端。P2P 實現雙向同時工作。
最重要、最複雜概念。為讓接收端理解數據,需規定數據格式,即協議。如電影《永不消逝的電波》:發報前轉電報編碼,收報端按密碼本解碼。密碼本即規定數據格式。編寫協議格式隨意,只需能唯一編碼並唯一解析還原。因協議不同,導致客戶端專用。實際編程中,最麻煩不是收發(API 封裝好),而是協議設計與生成解析——這是核心。
兩種主要方式:
基礎知識至此,深入請讀專書。下文開始 Java 網絡編程技術實現。