## Java編程那些事兒107——網絡協議概念
陳躍峰
出自:[http://blog.csdn.net/mailbomb](http://blog.csdn.net/mailbomb)
**13.2.5 網絡協議**
對于需要從事網絡編程的程序員來說,網絡協議是一個需要深刻理解的概念。那么什么是網絡協議呢?
網絡協議是指對于網絡中傳輸的數據格式的規定。對于網絡編程初學者來說,沒有必要深入了解TCP/IP協議簇,所以對于初學者來說去讀大部頭的《TCP/IP協議》也不是一件很合適的事情,因為深入了解TCP/IP協議是網絡編程提高階段,也是深入網絡編程底層時才需要做的事情。
對于一般的網絡編程來說,更多的是關心網絡上傳輸的邏輯數據內容,也就是更多的是應用層上的網絡協議,所以后續的內容均以實際應用的數據為基礎來介紹網絡協議的概念。
那么什么是網絡協議呢,下面看一個簡單的例子。春節晚會上“小沈陽”和趙本山合作的小品《不差錢》中,小沈陽和趙本山之間就設計了一個協議,協議的內容為:
如果點的菜價錢比較貴是,就說沒有。
按照該協議的規定,就有了下面的對話:
趙本山:4斤的龍蝦
小沈陽:(經過判斷,得出價格比較高),沒有
趙本山:鮑魚
小沈陽:(經過判斷,得出價格比較高),沒有
這就是一種雙方達成的一種協議約定,其實這種約定的實質和網絡協議的實質是一樣的。網絡協議的實質也是客戶端程序和服務器端程序對于數據的一種約定,只是由于以計算機為基礎,所以更多的是使用數字來代表內容,這樣就顯得比較抽象一些。
下面再舉一個簡單的例子,介紹一些基礎的網絡協議設計的知識。例如需要設計一個簡單的網絡程序:網絡計算器。也就是在客戶端輸入需要計算的數字和運算符,在服務器端實現計算,并將計算的結果反饋給客戶端。在這個例子中,就需要約定兩個數據格式:客戶端發送給服務器端的數據格式,以及服務器端反饋給客戶端的數據格式。
可能你覺得這個比較簡單,例如客戶端輸入的數字依次是12和432,輸入的運算符是加號,可能最容易想到的數據格式是形成字符串“12+432”,這樣格式的確比較容易閱讀,但是服務器端在進行計算時,邏輯就比較麻煩,因為需要首先拆分該字符串,然后才能進行計算,所以可用的數據格式就有了一下幾種:
“12,432,+”?? ??格式為:第一個數字,第二個數字,運算符
“12,+,432”???? 格式為:第一個數字,運算符,第二個數字
其實以上兩種數據格式很接近,比較容易閱讀,在服務器端收到該數據格式以后,使用“,”為分隔符分割字符串即可。
假設對于運算符再進行一次約定,例如約定數字0代表+,1代表減,2代表乘,3代表除,整體格式遵循以上第一種格式,則上面的數字生產的協議數據為:
“12,432,0”
這就是一種基本的發送的協議約定了。
另外一個需要設計的協議格式就是服務器端反饋的數據格式,其實服務器端主要反饋計算結果,但是在實際接受數據時,有可能存在格式錯誤的情況,這樣就需要簡單的設計一下服務器端反饋的數據格式了。例如規定,如果發送的數據格式正確,則反饋結果,否則反饋字符串“錯誤”。這樣就有了以下的數據格式:
客戶端:“1,111,1”????? ???服務器端:”-110”
客戶端:“123,23,0”?? ?服務器端:“146”
客戶端:“1,2,5”?????? 服務器端:“錯誤”
這樣就設計出了一種最最基本的網絡協議格式,從該示例中可以看出,網絡協議就是一種格式上的約定,可以根據邏輯的需要約定出各種數據格式,在進行設計時一般遵循“簡單、通用、容易解析”的原則進行。
而對于復雜的網絡程序來說,需要傳輸的數據種類和數據量都比較大,這樣只需要依次設計出每種情況下的數據格式即可,例如QQ程序,在該程序中需要進行傳輸的網絡數據種類很多,那么在設計時就可以遵循:登錄格式、注冊格式、發送消息格式等等,一一進行設計即可。所以對于復雜的網絡程序來說,只是增加了更多的命令格式,在實際設計時的工作量增加不是太大。
不管怎么說,在網絡編程中,對于同一個網絡程序來說,一般都會涉及到兩個網絡協議格式:客戶端發送數據格式和服務器端反饋數據格式,在實際設計時,需要一一對應。這就是最基本的網絡協議的知識。
網絡協議設計完成以后,在進行網絡編程時,就需要根據設計好的協議格式,在程序中進行對應的編碼了,客戶端程序和服務器端程序需要進行協議處理的代碼分別如下。
客戶端程序需要完成的處理為:
1、? 客戶端發送協議格式的生成
2、? 服務器端反饋數據格式的解析
服務器端程序需要完成的處理為:
1、? 服務器端反饋協議格式的生成
2、? 客戶端發送協議格式的解析
這里的生成是指將計算好的數據,轉換成規定的數據格式,這里的解析指,從反饋的數據格式中拆分出需要的數據。在進行對應的代碼編寫時,嚴格遵循協議約定即可。
所以,對于程序員來說,在進行網絡程序編寫時,需要首先根據邏輯的需要設計網絡協議格式,然后遵循協議格式約定進行協議生成和解析代碼的編寫,最后使用網絡編程技術實現整個網絡編程的功能。
由于各種網絡程序使用不同的協議格式,所以不同網絡程序的客戶端之間無法通用。
而對于常見協議的格式,例如HTTP(Hyper Text Transfer Protocol,超文本傳輸協議)、FTP(File Transfer Protocol,文件傳輸協議),SMTP(Simple Mail Transfer Protocol,簡單郵件傳輸協議)等等,都有通用的規定,具體可以查閱相關的RFC文檔。
最后,對于一種網絡程序來說,網絡協議格式是該程序最核心的技術秘密,因為一旦協議格式泄漏,則任何一個人都可以根據該格式進行客戶端的編寫,這樣將影響服務器端的實現,也容易出現一些其它的影響。
**13.2.6小結**
關于網絡編程基本的技術就介紹這么多,該部分介紹了網絡編程的基礎知識,以及Java語言對于網絡編程的支持,網絡編程的步驟等,并詳細介紹了TCP方式網絡編程和UDP方式網絡編程在Java語言中的實現。
網絡協議也是網絡程序的核心,所以在實際開始進行網絡編程時,設計一個良好的協議格式也是必須進行的工作。
?
- 前言
- (1)序言
- (2)程序設計是什么?
- (3)你適合學習程序設計嗎?
- (4)如何學好程序設計?
- (5)程序設計介紹小結
- (6)計算機軟件基本概念
- (7)進制的概念
- (8)計算機內部的數據表達
- (9)網絡編程基礎
- (10)Java語言簡介
- (11)JDK的獲得、安裝和配置
- (12)第一個HelloWorld程序
- (13)Eclipse基本使用
- (14)Eclipse基礎使用進階
- (15)如何學好Java語法
- (16)代碼框架、關鍵字和標識符
- (17)基本數據類型
- (18)變量和常量
- (19)數據類型轉換
- (20)空白、語句結束和注釋
- (21)算術運算符
- (22)比較運算符
- (23)邏輯運算符
- (24)賦值運算符
- (25)位運算符
- (26)移位運算符
- (27)其它運算符
- (28)運算符優先級
- (29)表達式
- (30)流程控制基礎
- (31)if語句語法(1)
- (32)if語句語法(2)
- (33)if語句語法(3)
- (34)switch語句語法
- (35)while語句語法
- (36)do-while語句語法
- (37)for語句語法
- (38)break和continue語句
- (39)流程控制綜合示例1
- (40)流程控制綜合示例2
- (41)流程控制綜合示例3
- (42)流程控制綜合練習
- (43)數組概述
- (44)數組基礎語法
- (45)數組使用示例1
- (46)數組使用示例2
- (47)數組使用示例3
- (48)多維數組基礎
- (49)多維數組使用示例1
- (50)多維數組使用示例2
- (51)多維數組練習
- (52)方法聲明
- (53)方法聲明示例
- (54)方法調用
- (55)方法重載和參數傳遞
- (56)方法練習
- (57)面向對象基礎
- (58)類(一)
- (59)類(二)
- (60)對象
- (61)面向對象設計方法和面向對象特性(一)
- (62)繼承(二)
- (63)多態性
- (64)訪問控制符、修飾符和其它關鍵字
- (65)static修飾符
- (66)final修飾符
- (67)this和super
- (68)抽象類和接口(一)
- (69)抽象類和接口(二)
- (70)抽象類和接口(三)
- (71)內部類簡介
- (72)包的概念
- (73)JDK文檔使用
- (74)java.lang包介紹1
- (75)String類使用
- (76)StringBuffer類和System類
- (77)包裝類
- (78)時間和日期處理
- (79)Random隨機處理
- (80)集合框架簡述
- (81)異常處理概述
- (82)異常處理語法1
- (83)異常處理語法2
- (84)IO簡介
- (85)IO類體系
- (86)文件操作之File類使用
- (87)文件操作之讀取文件
- (88)文件操作之寫文件
- (89)讀取控制臺輸入
- (90)裝飾流使用1
- (91)裝飾流使用2
- (92)IO使用注意問題
- (93)多線程基礎
- (94)多線程實現方式1
- (95)多線程實現方式2
- (96)多線程使用示例1
- (97)多線程使用示例2
- (98)多線程問題及處理1
- (99)多線程問題及處理2
- (100)多線程問題及處理3
- (101)網絡編程概述
- (102)網絡編程技術1
- (103)網絡編程技術2
- (104)網絡編程技術3
- (105)網絡編程技術4
- (106)網絡編程技術5
- (107)網絡協議概念
- (108)網絡編程示例1
- (109)網絡編程示例2
- (110)網絡編程小結