1.1 網絡程式設計概述
- 計算機網絡:是指将地理位置不同的具有獨立功能的多台計算機及其外部裝置,通過通信線路連接配接起來,在網絡作業系統,網絡管理軟體及網絡通信協定的管理和協調下,實作資源共享和資訊傳遞的計算機系統
- 網絡程式設計:在網絡通信協定下,實作網絡互連的不同計算機上運作的程式間可以進行資料交換
1.2 網絡程式設計三要素
- IP位址:要想讓網絡中的計算機能夠互相通信,必須為每台計算機指定一個辨別号,通過這個辨別号來指定要接收資料的計算機和識别發送的計算機,而IP位址就是這個辨別号。也就是裝置的辨別
- 端口:網絡的通信,本質上是兩個應用程式的通信。每台計算機都有很多的應用程式,那麼在網絡通信時,如何區分這些應用程式呢?如果說IP位址可以唯一辨別網絡中的裝置,那麼端口号就可以唯一辨別裝置中的應用程式了。也就是應用程式的辨別
- 協定:通過計算機網絡可以使多台計算機實作連接配接,位于同一個網絡中的計算機在進行連接配接和通信時需要遵守一定的規則,這就好比在道路中行駛的汽車一定要遵守交通規則一樣。在計算機網絡中,這些連接配接和通信的規則被稱為網絡通信協定,它對資料的傳輸格式、傳輸速率、傳輸步驟等做了統一規定,通信雙方必須同時遵守才能完成資料交換。常見的協定有UDP協定和TCP協定
1.3 IP位址
IP位址:是網絡中裝置的唯一辨別
● IP位址分為兩大類
● IPv4:是給每個連接配接在網絡上的主機配置設定一個32bit位址。按照TCP/IP規定,IP位址用二進制來表示,每個IP位址長32bit,也就是4個位元組。例如一個采用二進制形式的IP位址是“11000000 1010100000000001 01000010”,這麼長的位址,處理起來也太費勁了。為了友善使用,IP位址經常被寫成十進制的形式,中間使用符号“.”分隔不同的位元組。于是,上面的IP位址可以表示為“192.168.1.66”。IP位址的這種表示法叫做“點分十進制表示法”,這顯然比1和0容易記憶得多
● IPv6:由于網際網路的蓬勃發展,IP位址的需求量愈來愈大,但是網絡位址資源有限,使得IP的配置設定越發緊張。為了擴大位址空間,通過IPv6重新定義位址空間,采用128位位址長度,每16個位元組一組,分成8組十六進制數,這樣就解決了網絡位址資源數量不夠的問題
● DOS常用指令:
● ipconfig:檢視本機IP位址
● ping IP位址:檢查網絡是否連通
● 特殊IP位址:127.0.0.1:是回送位址,可以代表本機位址,一般用來測試使用
1.4 InetAddress
InetAddress:此類表示Internet協定(IP)位址
● 相關方法
方法名 | 說明 |
static InetAddress getByName(Stringhost) | 确定主機名稱的IP位址。主機名稱可以是機器名稱,也可以是IP位址 |
String getHostName() | 擷取此IP位址的主機名 |
String getHostAddress() | 傳回文本顯示中的IP位址字元串 |
● 代碼示範
package InetAddressDemo;
import java.net.InetAddress;
import java.net.UnknownHostException;
/*
InetAddress: 此類表示Internet協定(IP)位址
public static InetAddress getByName (String host): 确定主機名稱的IP位址。主機名稱可以是機器名稱,也可以是IP位址
public String getHostName (): 擷取此IP位址的主機名
public String getHostAddress (): 傳回文本顯示中的IP位址字元串
*/
public class InetAddressDemo {
public static void main(String[] args) throws UnknownHostException {
//public static InetAddress getByName (String host): 确定主機名稱的IP位址。主機名稱可以是機器名稱,也可以是IP位址
//InetAddress address = InetAddress.getByName("LYQ");
InetAddress address = InetAddress.getByName("192.168.96.88");
//public String getHostName (): 擷取此IP位址的主機名
String name = address.getHostName();
//public String getHostAddress (): 傳回文本顯示中的IP位址字元串
String ip = address.getHostAddress();
System.out.println("主機名:" + name);
System.out.println("Ip位址:" + ip);
}
}
● 運作效果圖

1.5 端口和協定
● 端口
● 裝置上應用程式的唯一辨別
● 端口号
● 用兩個位元組表示的整數,它的取值範圍是0~65535。其中,0~1023之間的端口号用于一些知名的網絡服務和應用,普通的應用程式需要使用1024以上的端口号。如果端口号被另外一個服務或應用所占用,會導緻目前程式啟動失敗
● 協定
● 計算機網絡中,連接配接和通信的規則被稱為網絡通信協定
● UDP協定
● 使用者資料報協定(User Datagram Protocol)
● UDP是無連接配接通信協定,即在資料傳輸時,資料的發送端和接收端不建立邏輯連接配接。簡單來說,當一台計算機向另外一台計算機發送資料時,發送端不會确認接收端是否存在,就會發出資料,同樣接收端在收到資料時,也不會向發送端回報是否收到資料。
● 由于使用UDP協定消耗資源小,通信效率高,是以通常都會用于音頻、視訊和普通資料的傳輸
● 例如視訊會議通常采用UDP協定,因為這種情況即使偶爾丢失一兩個資料包,也不會對接收結果産生太大影響。但是在使用UDP協定傳送資料時,由于UDP的面向無連接配接性,不能保證資料的完整性,是以在傳輸重要資料時不建議使用UDP協定
● TCP協定
● 傳輸控制協定 (Transmission Control Protocol)
● TCP協定是面向連接配接的通信協定,即傳輸資料之前,在發送端和接收端建立邏輯連接配接,然後再傳輸資料,它提供了兩台計算機之間可靠無差錯的資料傳輸。在TCP連接配接中必須要明确用戶端與伺服器端,由用戶端向服務端發出連接配接請求,每次連接配接的建立都需要經過“三次握手”
● 三次握手:TCP協定中,在發送資料的準備階段,用戶端與伺服器之間的三次互動,以保證連接配接的可靠
● 第一次握手,用戶端向伺服器端發出連接配接請求,等待伺服器确認
● 第二次握手,伺服器端向用戶端回送一個響應,通知用戶端收到了連接配接請求
● 第三次握手,用戶端再次向伺服器端發送确認資訊,确認連接配接
● 完成三次握手,連接配接建立後,用戶端和伺服器就可以開始進行資料傳輸了。由于這種面向連接配接的特性,TCP協定可以保證傳輸資料的安全,是以應用十分廣泛。例如上傳檔案、下載下傳檔案、浏覽網頁等