學號20145332 《Java程式設計》第十週學習總結
網路程式設計
網路程式設計就是在兩個或兩個以上的裝置(例如計算機)之間傳輸資料。程式設計師所作的事情就是把資料傳送到指定的位置,或者接收到指定的資料,這個就是狹義的網路程式設計範疇。在傳送和接收資料時,大部分的程式設計語言都設計了專門的API實現這些功能,程式設計師只需要呼叫即可。
網路概述
網路程式設計技術是當前一種主流的程式設計技術,隨著聯網趨勢的逐步增強以及網路應用程式的大量出現,所以在實際的開發中網路程式設計技術獲得了大量的使用。
一、計算機網路概述
按照計算機網路的定義,通過一定的物理裝置將處於不同位置的計算機連線起來組成的網路,這個網路中包含的裝置有:計算機、路由器、交換機等等。路由器和交換機組成了核心的計算機網路,網路最主要的優勢在於共享:共享裝置和資料,共享資料就是將大量的資料儲存在一組機器中,其它的計算機通過網路訪問這些資料。
為了能夠方便的識別網路上的每個裝置,網路中的每個裝置都會有一個唯一的數字標識,這個就是IP地址。但是由於IP地址不容易記憶,所以為了方便記憶,有創造了另外一個概念——域名。為了讓一個計算機可以同時執行多個網路程式,就引入了另外一個概念——埠(port)。有了IP地址和埠的概念以後,在進行網路通訊交換時,就可以通過IP地址查詢到該臺計算機,然後通過埠標識這臺計算機上的一個唯一的程式。這樣就可以進行網路資料的交換了。
二、網路程式設計概述
網路程式設計就是兩個或多個程式之間的資料交換,和普通的單機程式相比,網路程式最大的不同就是需要交換資料的程式執行在不同的計算機上,這樣就造成了資料交換的複雜。在網路通訊中,第一次主動發起通訊的程式被稱作客戶端(Client)程式,簡稱客戶端,而在第一次通訊中等待連線的程式被稱作伺服器端(Server)程式,簡稱伺服器。結構有C/S結構、B/S結構。P2P程式是一種特殊的程式,應該一個P2P程式中既包含客戶端程式,也包含伺服器端程式。在實際進行資料交換時,為了讓接收端理解該資料,計算機比較笨,什麼都不懂的,那麼就需要規定該資料的格式,這個資料的格式就是協議。
三、網路通訊方式
在現有的網路中,網路通訊的方式主要有兩種:
1、 TCP(傳輸控制協議)方式
2、 UDP(使用者資料包協議)方式
網路程式設計技術
一、網路程式設計步驟
1、客戶端網路程式設計步驟:
①建立網路連線:客戶端網路程式設計的第一步都是建立網路連線。在建立網路連線時需要指定連線到的伺服器的IP地址和埠號,建立完成以後,會形成一條虛擬的連線,後續的操作就可以通過該連線實現資料交換了。
②交換資料:連線建立以後,就可以通過這個連線交換資料了。交換資料嚴格按照請求響應模型進行,由客戶端傳送一個請求資料到伺服器,伺服器反饋一個響應資料給客戶端,如果客戶端不傳送請求則伺服器端就不響應。
③關閉網路連線:在資料交換完成以後,關閉網路連線,釋放程式佔用的埠、記憶體等系統資源,結束網路程式設計。
2、伺服器端網路程式設計步驟:
①監聽埠:伺服器端屬於被動等待連線,所以伺服器端啟動以後,不需要發起連線,而只需要監聽本地計算機的某個固定埠即可。
②獲得連線:當客戶端連線到伺服器端時,伺服器端就可以獲得一個連線,這個連線包含客戶端的資訊,例如客戶端IP地址等等,伺服器端和客戶端也通過該連線進行資料交換。
③交換資料:伺服器端通過獲得的連線進行資料交換。伺服器端的資料交換步驟是首先接收客戶端傳送過來的資料,然後進行邏輯處理,再把處理以後的結果資料傳送給客戶端。簡單來說,就是先接收再傳送,這個和客戶端的資料交換數序不同。
④關閉連線:當伺服器程式關閉時,需要關閉伺服器端,通過關閉伺服器端使得伺服器監聽的埠以及佔用的記憶體可以釋放出來,實現了連線的關閉。
3、小結
二、Java網路程式設計技術
Java語言雖然不能說是對於網路程式設計的支援最好的語言,但是必須說是一種對於網路程式設計提供良好支援的語言
三、TCP程式設計
在Java語言中,對於TCP方式的網路程式設計提供了良好的支援,在實際實現時,以java.net.Socket類代表客戶端連線,以java.net.ServerSocket類代表伺服器端連線。在進行網路程式設計時,底層網路通訊的細節已經實現了比較高的封裝,所以在程式設計師實際程式設計時,只需要指定IP地址和埠號碼就可以建立連線了。
Java語言中客戶端的實現步驟:
①建立連線:
Socket socket1 = new Socket(“192.168.1.103”,10000);
Socket socket2 = new Socket(“www.sohu.com”,80);
②資料交換:
OutputStream os = socket1.getOutputStream();
InputStream is = socket1.getInputStream();
③關閉網路連線:
socket1.close();
Java語言中伺服器端的實現步驟:
①監聽埠:
ServerSocket ss = new ServerSocket(10000);
②獲得連線:
Socket socket = ss.accept();
③資料交換:
socket = serverSocket.accept();
is = socket.getInputStream();
④關閉網路連線:
ss.close();
四、UDP程式設計
UDP方式的網路程式設計也在Java語言中獲得了良好的支援,由於其在傳輸資料的過程中不需要建立專用的連線等特點,所以在Java API中設計的實現結構和TCP方式不太一樣。當然,需要使用的類還是包含在java.net包中。
Java語言中客戶端的實現步驟:
①建立連線:
DatagramSocket ds = new DatagramSocket();
②資料交換:
String s = “Hello”;
String host = “127.0.0.1”;
int port = 10001;
byte[] b = s.getBytes();
InetAddress server = InetAddress.getByName(host);
DatagramPacket sendDp = new DatagramPacket(b,b.length,server,port);
ds.send(sendDp);
byte[] data = new byte[1024];
DatagramPacket received = new DatagramPacket(data,data.length);
ds.receive(receiveDp);
byte[] b = receiveDp.getData();
int len = receiveDp.getLength();
String s = new String(b,0,len);
System.out.println(s);
③關閉網路連線:
ds.close();
Java語言中伺服器端的實現步驟:
①監聽埠:
DatagramSocket ds = new DatagramSocket(10010);
②資料交換:同客戶端,傳送時需要埠號
InetAddress clientIP = receiveDp.getAddress();
Int clientPort = receiveDp.getPort();
③關閉網路連線:
ds.close();
網路協議
網路協議是指對於網路中傳輸的資料格式的規定。網路協議的實質也是客戶端程式和伺服器端程式對於資料的一種約定,只是由於以計算機為基礎,所以更多的是使用數字來代表內容,這樣就顯得比較抽象一些。
在網路程式設計中,對於同一個網路程式來說,一般都會涉及到兩個網路協議格式:客戶端傳送資料格式和伺服器端反饋資料格式。
客戶端程式需要完成的處理為:
1、 客戶端傳送協議格式的生成
2、 伺服器端反饋資料格式的解析
伺服器端程式需要完成的處理為:
1、 伺服器端反饋協議格式的生成
2、 客戶端傳送協議格式的解析
小結:網路協議也是網路程式的核心,所以在實際開始進行網路程式設計時,設計一個良好的協議格式也是必須進行的工作。