## Java編程那些事兒9——網絡編程基礎
作者:陳躍峰
出自:[http://blog.csdn.net/mailbomb](http://blog.csdn.net/mailbomb)
### 1.4 網絡編程基礎
對于初學者,或者沒有接觸過網絡編程的程序員,會覺得網絡編程涉及的知識很高深,很難,其實這是一種誤解,當你的語法熟悉以后,其實基本的網絡編程現在已經被實現的異常簡單了。
#### 1.4.1 網絡編程是什么?
網絡編程的本質是兩個設備之間的數據交換,當然,在計算機網絡中,設備主要指計算機。數據傳遞本身沒有多大的難度,不就是把一個設備中的數據發送給另外一個設備,然后接受另外一個設備反饋的數據。
現在的網絡編程基本上都是基于請求/響應方式的,也就是一個設備發送請求數據給另外一個,然后接收另一個設備的反饋。
在網絡編程中,發起連接程序,也就是發送第一次請求的程序,被稱作客戶端(Client),等待其他程序連接的程序被稱作服務器(Server)。客戶端程序可以在需要的時候啟動,而服務器為了能夠時刻相應連接,則需要一直啟動。例如以打電話為例,首先撥號的人類似于客戶端,接聽電話的人必須保持電話暢通類似于服務器。
連接一旦建立以后,就客戶端和服務器端就可以進行數據傳遞了,而且兩者的身份是等價的。
在一些程序中,程序既有客戶端功能也有服務器端功能,最常見的軟件就是BT、emule這類軟件了。
下面來談一下如何建立連接以及如何發送數據。
#### 1.4.2 IP地址和域名
在現實生活中,如果要打電話則需要知道對應人的電話號碼,如果要寄信則需要知道收信人的地址。在網絡中也是這樣,需要知道一個設備的位置,則需要使用該設備的IP地址,具體的連接過程由硬件實現,程序員不需要過多的關心。
IP地址是一個規定,現在使用的是IPv4,既由4個0-255之間的數字組成,在計算機內部存儲時只需要4個字節即可。在計算機中,IP地址是分配給網卡的,每個網卡有一個唯一的IP地址,如果一個計算機有多個網卡,則該臺計算機則擁有多個不同的IP地址,在同一個網絡內部,IP地址不能相同。IP地址的概念類似于電話號碼、身份證這樣的概念。
由于IP地址不方便記憶,所以有專門創造了域名(Domain Name)的概念,其實就是給IP取一個字符的名字,例如163.com、sina.com等。IP和域名之間存在一定的對應關系。如果把IP地址類比成身份證號的話,那么域名就是你的姓名。
其實在網絡中只能使用IP地址進行數據傳輸,所以在傳輸以前,需要把域名轉換為IP,這個由稱作DNS的服務器專門來完成。
所以在網絡編程中,可以使用IP或域名來標識網絡上的一臺設備。
#### 1.4.3 端口的概念
為了在一臺設備上可以運行多個程序,人為的設計了端口(Port)的概念,類似的例子是公司內部的分機號碼。
規定一個設備有216個,也就是65536個端口,每個端口對應一個唯一的程序。每個網絡程序,無論是客戶端還是服務器端,都對應一個或多個特定的端口號。由于0-1024之間多被操作系統占用,所以實際編程時一般采用1024以后的端口號。
使用端口號,可以找到一臺設備上唯一的一個程序。
所以如果需要和某臺計算機建立連接的話,只需要知道IP地址或域名即可,但是如果想和該臺計算機上的某個程序交換數據的話,還必須知道該程序使用的端口號。
#### 1.4.4 數據傳輸方式
知道了如何建立連接,下面就是如何傳輸數據了,先來看一下數據傳輸的方式。
在網絡上,不管是有線傳輸還是無線傳輸,數據傳輸的方式有兩種:
1.?TCP(Transfer Control Protocol)
傳輸控制協議方式,該傳輸方式是一種穩定可靠的傳送方式,類似于顯示中的打電話。只需要建立一次連接,就可以多次傳輸數據。就像電話只需要撥一次號,就可以實現一直通話一樣,如果你說的話不清楚,對方會要求你重復,保證傳輸的數據可靠。
使用該種方式的優點是穩定可靠,缺點是建立連接和維持連接的代價高,傳輸速度不快。
2.?UDP(User Datagram Protocol)
用戶數據報協議方式,該傳輸方式不建立穩定的連接,類似于發短信息。每次發送數據都直接發送。發送多條短信,就需要多次輸入對方的號碼。該傳輸方式不可靠,數據有可能收不到,系統只保證盡力發送。
使用該種方式的優點是開銷小,傳輸速度快,缺點是數據有可能會丟失。
在實際的網絡編程中,大家可以根據需要選擇任何一種傳輸方式,或組合使用這兩種方式實現數據的傳遞。
#### 1.4.5 協議的概念
協議(Protocol)是網絡編程中一個非常重要的概念,指的是傳輸數據的格式。因為大家在網絡中需要傳輸各種各樣的信息,在程序中獲得到的都是一組數值,如何閱讀這些數值呢,就需要提前規定好這組數據的格式,在客戶端按照該格式生成發送數據,服務器端按照該格式閱讀該數據,然后在按照一定的格式生成數據反饋給客戶端,客戶端再按照該格式閱讀數據。現實中類似的例子就是電報編碼,每個數字都是用特定的數據表達。
一般程序的協議都分成客戶端發送的數據格式,以及服務器端反饋的數據格式,客戶端和服務器端都遵循該格式生成或處理數據,實現兩者之間的復雜數據交換。
#### 1.4.6 小結
網絡編程就是使用IP地址,或域名,和端口連接到另一臺計算機上對應的程序,按照規定的協議(數據格式)來交換數據,實際編程中建立連接和發送、接收數據在語言級已經實現,做的更多的工作是設計協議,以及編寫生成和解析數據的代碼罷了,然后把數據轉換成邏輯的結構顯示或控制邏輯即可。
需要了解更多的網絡編程的知識,建議閱讀《JAVA2網絡協議內幕》一書。
- 前言
- (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)網絡編程小結