首頁技術文章正文

Java培訓之IO流&網絡編程(二)

更新時間:2017-05-31 來源:黑馬程序員Java培訓學院 瀏覽量:

網絡模型:|--OSI(open stystem Interconnection開放式系統(tǒng)互連)
|--特點:
是一種異構系統(tǒng)互連的分層結構;提供了控制互連系統(tǒng)交互規(guī)則的標準骨架;定義一種抽象結構,而并非具體實現(xiàn)的描述;不同系統(tǒng)中相同層的實體為同等層實體;同等層實體之間通信由該層的協(xié)議管理;相信層間的接口定義了原語操作和低層向上層提供的服務;所提供的公共服務是面向連接的或無連接的數(shù)據(jù)服務;直接的數(shù)據(jù)傳送僅在最低層實現(xiàn);每層完成所定義的功能,修改本層的功能并不影響其他層。
|--七層結構:
物理層: 提供為建立、維護和拆除物理鏈路所需要的機械的、電氣的、功能的和規(guī)程的特性;有關的物理鏈路上傳輸非結構的位流以及故障檢測指示。
數(shù)據(jù)鏈路層:在網絡層實體間提供數(shù)據(jù)發(fā)送和接收的功能和過程;提供數(shù)據(jù)鏈路的流控。
網絡層: 控制分組傳送系統(tǒng)的操作、路由選擇、擁護控制、網絡互連等功能,它的作用是將具體的物理傳送對高層透明。
傳輸層: 提供建立、維護和拆除傳送連接的功能;選擇網絡層提供最合適的服務;在系統(tǒng)之間提供可靠的透明的數(shù)據(jù)傳送,提供端到端的錯誤恢復和流量控制。TCP(傳輸控制協(xié)議)傳輸效率低,可靠性強,用于傳輸可靠性要求高,數(shù)據(jù)量大的數(shù)據(jù),UDP(用戶數(shù)據(jù)報協(xié)議,于TCP特性恰恰相反)用于傳輸可靠性要求 不高,數(shù)據(jù)量小的數(shù)據(jù),如QQ聊天數(shù)據(jù)就是通過這種方式進行傳輸。
會話層: 提供兩進程之間建立、維護和結束會話連接的功能;提供交互會話的管理功能,如三種數(shù)據(jù)流方向的控制,即一路交互、兩路交替和兩路同時會話模式 。
表示層: 代表應用進程協(xié)商數(shù)據(jù)表示;完成數(shù)據(jù)轉換、格式化和文本壓縮。
應用層: 提供OSI用戶服務,例如事務處理程序、文件傳送協(xié)議和網絡管理等。
|--TCP/IP:
|--TCP/IP的分層模型
Internet采用了TCP/IP協(xié)議,如同OSI參考模型,TCP/IP也是一種分層模型。
它是基于硬件層次上的四個概念性層次構成,即網絡接口層、IP層、傳輸層、應用層。
網絡接口層:也稱數(shù)據(jù)鏈路層,這是TCP/IP最底層。功能:負責接收IP數(shù)據(jù)報并發(fā)送至選定的網絡。
IP層:IP層處理機器之間的通信。功能:它接收來自傳輸層的請求,將帶有目的地址的分組發(fā)送出去。將分組封裝到數(shù)據(jù)報中,填入數(shù)據(jù)報頭,使用路由算法以決定是直接將數(shù)據(jù)報傳送至目的主機還是傳給路由器,然后把數(shù)據(jù)報送至相應的網絡接口來傳送。
傳輸層:是提供應用層之間的通信,即端到端的通信。功能:管理信息流,提供可靠的傳輸服務,以確保數(shù)據(jù)無差錯的地按序到達。
2、TCP/IP模型的分界線
協(xié)議地址分界線:以區(qū)分高層和低層的尋址,高層尋址使用IP地址,低層尋址使用物理地址。應用程序IP層之上的協(xié)議軟件只使用IP地址,而網絡接口層處理物理地址。
網絡通信要素|--IP地址:網絡中設備的標示
127.0.0.1本地回環(huán)地址 主機名:localhost
IP地址不能沖突,但是可以重復,在不同的網絡中的是可以重復的。
|--端口號:用于表示進程的邏輯地址,不同進程的標示,有效端口:0`65535其中0~1024系統(tǒng)使用或者保留端口,
|--物理端口:即我們看的見的端口,比如網卡端口
|--邏輯端口:就是些數(shù)字標示。
|--傳輸協(xié)議:
|--TCP:
|--特點:
建立連接,形成傳輸數(shù)據(jù)的通道在連接中進行大數(shù)據(jù)量傳輸通過三次握手完成連接,是可靠協(xié)議,一旦連接斷開數(shù)據(jù)就不存在了必須建立連接、效率會稍低|--UDP:
|--特點:
將數(shù)據(jù)以及源和目的封裝成數(shù)據(jù)包,不需要建立連接每個數(shù)據(jù)報的大小在限制的64K內因無連接,是不可靠的協(xié)議不要建立連接 ,速度快。IP地址對象:InetAddress:互聯(lián)網協(xié)議地址
getLocalHost();返回本地主機
getHostName();獲取主機名
getByName();
getAllByName();
地址解析:直接通過IP地址可以訪問新浪的主機,同時也可以通過主機名去訪問。
百度校招筆試題:URL有哪幾個部分組成?協(xié)議、主機、端口、文件
DNS域名解析:客戶端輸入主機名去查找DNS服務器,查找對應的IP地址,然后返回它客戶端在根據(jù)IP地址指向所要去訪問的主機。
擴展:怎么去進制掉上網過程中彈出的小廣告
去配置文件中一下面的格式配置即可
127.0.0.1  www.XXXX.com
eg:127.0.0.1 www.sina.com表示禁止不能上新浪網.
Socket插座 (專業(yè)術語:套接字)
就是為網絡服務提供的一種機制。
通信的兩端都有Socket
網絡通信其實就Socket間通信
數(shù)據(jù)在兩個socket間通過IO傳輸。怎么去理解?
從這個設備傳輸?shù)搅硗庖粋€設備,其實就是流的操作。
UDP傳輸:DatagramSocket和 DatagramPacket
封裝了UPD的傳輸協(xié)議,此類表示用來發(fā)送和接收數(shù)據(jù)包的套接字。
receive(DatagramPacket p)和send(DatagramPacket p);
在構造包時要注意,有些包是用來構造接收數(shù)據(jù)包,有些是構造發(fā)送數(shù)據(jù)包
怎么去區(qū)分:在構造函數(shù)中凡是帶有Address的都是構造發(fā)送數(shù)據(jù)包的。
UDP發(fā)送和接收端建立連接的思路:
啟動發(fā)送端和接收端都可以,啟動哪一個都是可以的。
實現(xiàn)代碼:
發(fā)送端:
//1、先建立UDP的socket服務。
DatagramSocket ds=new DatagramSocket();
//2、確定具體的數(shù)據(jù)。
String str="UDP,我來了!";//因為只能接受字節(jié)數(shù)組,所以下面要用字節(jié)數(shù)組封裝起來
byte[] buf=str.getBytes();
// 3、創(chuàng)建數(shù)據(jù)包對象將數(shù)據(jù)進行封裝,并明確目的地地址。
DatagramPacket dp=new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.104"),10000);
// 4、使用socket服務的send方法將數(shù)據(jù)包發(fā)送出去。
ds.send(dp);
//  5、關閉資源。
ds.close();
接收端:
System.out.println("接收端啟動.....");
// 1、建立UDP的socket服務,必須一個具體的數(shù)字標示,明確是哪個端口的數(shù)據(jù)是這個程序是可以處理的。
DatagramSocket ds=new DatagramSocket(10000);
// 2、創(chuàng)建一個數(shù)據(jù)包對象,用于存儲接收到的數(shù)據(jù)
byte[] buf=new byte[1024];
DatagramPacket dp=new DatagramPacket(buf, buf.length);
// 3、使用socket服務接收數(shù)據(jù)并存儲到已有的數(shù)據(jù)包當中
ds.receive(dp);
// 4、從數(shù)據(jù)包中獲取指定的數(shù)據(jù),并打印
String ip=dp.getAddress().getHostAddress();
int port=dp.getPort();
String text=new String(dp.getData(),0,dp.getLength());
System.out.println(ip+""+text+""+port);
// 5、關閉socket服務
ds.close();
注意輸出結果中:
接收端啟動.....
192.168.1.104UDP,我來了!1364: 這個端口是發(fā)送端的。系統(tǒng)會隨機分配。

本文版權歸黑馬程序員Java培訓學院所有,歡迎轉載,轉載請注明作者出處。謝謝!
作者:黑馬程序員Java培訓學院
首發(fā):http://javaee.itheima.com/
 
分享到:
在線咨詢 我要報名
和我們在線交談!