8.3 基于Socket(套接字)的低層次Java網(wǎng)絡(luò)編程
8.3.1 Socket通訊
網(wǎng)絡(luò)上的兩個程序通過一個雙向的通訊連接實現(xiàn)數(shù)據(jù)的交換,這個雙向鏈路的一端稱為一個Socket。Socket通常用來實現(xiàn)客戶方和服務(wù)方的連接。Socket是TCP/IP協(xié)議的一個十分流行的編程界面,一個Socket由一個IP地址和一個端口號確定。
在傳統(tǒng)的UNIX環(huán)境下可以操作TCP/IP協(xié)議的接口不止Socket一個,Socket所支持的協(xié)議種類也不光TCP/IP一種,因此兩者之間是沒有必然聯(lián)系的。在Java環(huán)境下,Socket編程主要是指基于TCP/IP協(xié)議的網(wǎng)絡(luò)編程。
說Socket編程是低層次網(wǎng)絡(luò)編程并不等于它功能不強(qiáng)大,恰恰相反,正因為層次低,Socket編程比基于URL的網(wǎng)絡(luò)編程提供了更強(qiáng)大的功能和更靈活的控制,但是卻要更復(fù)雜一些。由于Java本身的特殊性,Socket編程在Java中可能已經(jīng)是層次最低的網(wǎng)絡(luò)編程接口,在Java中要直接操作協(xié)議中更低的層次,需要使用Java的本地方法調(diào)用(JNI),在這里就不予討論了。
8.3.2 Socket通訊的一般過
前面已經(jīng)提到Socket通常用來實現(xiàn)C/S結(jié)構(gòu)。
使用Socket進(jìn)行Client/Server程序設(shè)計的一般連接過程是這樣的:Server端Listen(監(jiān)聽)某個端口是否有連接請求,Client端向Server端發(fā)出Connect(連接)請求,Server端向Client端發(fā)回Accept(接受)消息。一個連接就建立起來了。Server端和Client端都可以通過Send,Write等方法與對方通信。
如圖
對于一個功能齊全的Socket,都要包含以下基本結(jié)構(gòu),其工作過程包含以下四個基本的步驟:
(1) 創(chuàng)建Socket;
(2) 打開連接到Socket的輸入/出流;
(3) 按照一定的協(xié)議對Socket進(jìn)行讀/寫操作;
(4) 關(guān)閉Socket.
第三步是程序員用來調(diào)用Socket和實現(xiàn)程序功能的關(guān)鍵步驟,其他三步在各種程序中基本相同。
以上4個步驟是針對TCP傳輸而言的,使用UDP進(jìn)行傳輸時略有不同,在后面會有具體講解。
8.3.1 Socket通訊
網(wǎng)絡(luò)上的兩個程序通過一個雙向的通訊連接實現(xiàn)數(shù)據(jù)的交換,這個雙向鏈路的一端稱為一個Socket。Socket通常用來實現(xiàn)客戶方和服務(wù)方的連接。Socket是TCP/IP協(xié)議的一個十分流行的編程界面,一個Socket由一個IP地址和一個端口號確定。
在傳統(tǒng)的UNIX環(huán)境下可以操作TCP/IP協(xié)議的接口不止Socket一個,Socket所支持的協(xié)議種類也不光TCP/IP一種,因此兩者之間是沒有必然聯(lián)系的。在Java環(huán)境下,Socket編程主要是指基于TCP/IP協(xié)議的網(wǎng)絡(luò)編程。
說Socket編程是低層次網(wǎng)絡(luò)編程并不等于它功能不強(qiáng)大,恰恰相反,正因為層次低,Socket編程比基于URL的網(wǎng)絡(luò)編程提供了更強(qiáng)大的功能和更靈活的控制,但是卻要更復(fù)雜一些。由于Java本身的特殊性,Socket編程在Java中可能已經(jīng)是層次最低的網(wǎng)絡(luò)編程接口,在Java中要直接操作協(xié)議中更低的層次,需要使用Java的本地方法調(diào)用(JNI),在這里就不予討論了。
8.3.2 Socket通訊的一般過
前面已經(jīng)提到Socket通常用來實現(xiàn)C/S結(jié)構(gòu)。
使用Socket進(jìn)行Client/Server程序設(shè)計的一般連接過程是這樣的:Server端Listen(監(jiān)聽)某個端口是否有連接請求,Client端向Server端發(fā)出Connect(連接)請求,Server端向Client端發(fā)回Accept(接受)消息。一個連接就建立起來了。Server端和Client端都可以通過Send,Write等方法與對方通信。
如圖
對于一個功能齊全的Socket,都要包含以下基本結(jié)構(gòu),其工作過程包含以下四個基本的步驟:
(1) 創(chuàng)建Socket;
(2) 打開連接到Socket的輸入/出流;
(3) 按照一定的協(xié)議對Socket進(jìn)行讀/寫操作;
(4) 關(guān)閉Socket.
第三步是程序員用來調(diào)用Socket和實現(xiàn)程序功能的關(guān)鍵步驟,其他三步在各種程序中基本相同。
以上4個步驟是針對TCP傳輸而言的,使用UDP進(jìn)行傳輸時略有不同,在后面會有具體講解。