一樱衷、網(wǎng)絡(luò)基礎(chǔ)
網(wǎng)絡(luò)編程的目的就是指直接或間接地通過網(wǎng)絡(luò)協(xié)議與其它計算機進行通訊。
要想讓處于網(wǎng)絡(luò)中的主機互相通信抱婉,只是知道通信雙方地址還是不夠的晌坤,還必須遵循一定的規(guī)則。TCP/IP參考模型(或TCP/IP協(xié)議):事實上的國際標準败京。
二兜喻、TCP 和 UDP
1、傳輸層協(xié)議中有兩個非常重要的協(xié)議:
a赡麦、傳輸控制協(xié)議TCP(Transmission Control Protocol)
傳輸控制協(xié)議TCP是面向連接的傳輸層協(xié)議朴皆。即應(yīng)用進程(或程序)在使用TCP協(xié)議之前帕识,必須先建立TCP連接,在傳輸完畢后遂铡,釋放已經(jīng)建立的連接肮疗。利用TCP協(xié)議進行通信的兩個應(yīng)用進程,一個是服務(wù)器進程扒接。另一個是客戶進程伪货。
a1、TCP程序設(shè)計
客戶端-服務(wù)器模型是最常見的網(wǎng)絡(luò)應(yīng)用程序模型钾怔。
當我們上網(wǎng)沖浪時碱呼,我們所使用的瀏覽器(例如IE)就是一個客戶端軟件
而提供網(wǎng)頁的站點必需運行一個WEB服務(wù)器。
一般而言:
主動發(fā)起通信的應(yīng)用程序?qū)儆诳蛻舳恕?/p>
服務(wù)器則是等待通信請求
當服務(wù)器收到客戶端的請求宗侦,執(zhí)行需要的運算然后向客戶端返回結(jié)果
a2愚臀、TCP程序設(shè)計
套接字(Socket)接口開發(fā)網(wǎng)絡(luò)應(yīng)用程序廣泛應(yīng)用,以至于成為事實上的標準矾利。套接字能執(zhí)行7種基本操作:
連接到遠程主機
綁定到端口
接收從遠程機器來的連接請求
監(jiān)聽到達的數(shù)據(jù)
發(fā)送數(shù)據(jù)
接收數(shù)據(jù)
關(guān)閉連接姑裂。
a3、TCP網(wǎng)絡(luò)編程:
兩個Java應(yīng)用程序可通過一個雙向的網(wǎng)絡(luò)通信連接實現(xiàn)數(shù)據(jù)交換男旗,這個雙向鏈路的一段稱為一個Socket (套接字)舶斧。
Socket通常用來實現(xiàn)Client/Server 連接。
Java語言的基于套接字編程分為服務(wù)器編程和客戶端編程察皇,其通信模型如圖所示:
a4茴厉、客戶端基于Socket的程序:
客戶端Socket的工作過程包含以下四個基本的步驟:
1>、創(chuàng)建 Socket让网。根據(jù)指定的 IP 地址或端口號構(gòu)造 Socket 類對象呀忧。如服務(wù)器端響應(yīng),則建立客戶端到服務(wù)器的通信線路溃睹。
2>而账、打開連接到 Socket 的輸入/出流。 使用 getInputStream()方法獲得輸入流因篇,使用 getOutputStream()方法獲得輸出流泞辐。
3>、按照一定的協(xié)議對 Socket? 進行讀/寫操作竞滓。通過輸入流讀取服務(wù)器放入線路的信息(但不能讀取自己放入線路的信息)咐吼,通過輸出流將信息寫入線程。
4>商佑、關(guān)閉 Socket锯茄。斷開客戶端到服務(wù)器的連接,釋放線路
b、用戶數(shù)據(jù)報協(xié)議UDP(User Datagram Protocol)肌幽。
用戶數(shù)據(jù)報協(xié)議UDP是面向無連接的傳輸層協(xié)議晚碾。即應(yīng)用進程(或程序)在使用UDP協(xié)議之前,不必先建立連接喂急。自然格嘁,發(fā)送數(shù)據(jù)結(jié)束時也沒有連接需要釋放。因此廊移,減少了開銷和發(fā)送數(shù)據(jù)之前的時延糕簿。
b1、關(guān)于 UDP
類 DatagramSocket 和 DatagramPacket 實現(xiàn)了基于 UDP 協(xié)議網(wǎng)絡(luò)程序狡孔。
DatagramPacket 對象封裝了UDP數(shù)據(jù)報
在數(shù)據(jù)報中包含了客戶端的IP地址和端口號以及服務(wù)器的IP地址和端口號懂诗。
UDP數(shù)據(jù)報通過數(shù)據(jù)報套接字 DatagramSocket 發(fā)送和接收
系統(tǒng)不保證UDP數(shù)據(jù)報一定能夠安全送到目的地,也不能確定什么時候可以抵達苗膝。