網絡基礎知識
1、osi分層模型和tcp/ip分層模型的對應關系
這里對于7層模型不展開來講,只選擇跟這次系列主題相關的知識點介紹。
2、七層模型與協議的對應關系
網絡層 ------------ ip(網絡之間的互聯協議)
傳輸層 ------------ tcp(傳輸控制協議)、udp(用戶數據報協議)
應用層 ------------ telnet(internet遠程登錄服務的標準協議和主要方式)、ftp(文本傳輸協議)、http(超文本傳送協議)
3、ip地址和端口號
1、ip地址用于唯一標示網絡中的一個通信實體,這個通信實體可以是一臺主機,可以是一臺打印機,或者是路由器的某一個端口。而在基于ip協議網絡中傳輸的數據包,必須使用ip 地址來進行標示。ip地址就像寫一封信,必須指定收件人的地址一樣。每個被傳輸的數據包中都包括了一個源ip和目標ip。
2、ip地址唯一標示了通信實體,但是一個通信實體可以有多個通信程序同時提供網絡服務。這個時候就要通過端口來區分開具體的通信程序。一個通信實體上不能有兩個通信程序 使用同一個端口號。
ip地址和端口號,就像一個出差去外地入住酒店一樣,ip地址表示了酒店在具體位置,而端口號則表示了這個人在酒店的房間號。
4、tcp和udp
1、tcp是一種面向連接的保證可靠傳輸的協議。通過tcp協議傳輸,得到的是一個順序的無差錯的數據流。它能夠提供兩臺計算機之間的可靠的數據流,http、ftp、telnet等應 用都需要這種可靠的通信通道。
2、udp是一種無連接的協議,每個數據報都是一個獨立的信息,包括完整的源地址或目的地址,它在網絡上以任何可能的路徑傳送目的地,至于能夠達到目的地,達到目的地的時 間以及內容的正確性都是不能保證的。
既然有了保證可靠傳輸的tcp協議,為什么還要非可靠傳輸的udp協議呢?原因有兩個:
1、可靠的傳輸是要付出代價的,對數據內容的正確性的檢驗必然會占用計算機處理時間和網絡帶寬。因此tcp的傳輸效率不如udp高。
2、許多應用中并不需要保證嚴格的傳輸可靠性,比如視頻會議系統,并不要求視頻音頻數據絕對正確,只要能夠連貫就可以了。所以在這些場景下,使用udp更合適些。
5、url訪問網上資源
1、url對象代表統一資源定位器,是指向互聯網“資源”的指針。它是用協議名、主機、端口和資源組成,即滿足如下格式:
protocol://host:port/resourcename
http://www.crazyit.org/index.php
2、通過url對象的一些方法可以訪問該url對應的資源:
string getfile():獲取該url的資源名
string gethost():獲取主機名
string getpath():獲取路徑部分
int getport():獲取端口號
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
public static void main(string[] args) throws ioexception { url url = new url( "https://i.cnblogs.com/editposts.aspx?opt=1" ); string file = url.getfile(); system.out.println(file); string host = url.gethost(); system.out.println(host); int port = url.getport(); system.out.println(port); string query = url.getquery(); system.out.println(query); string protocol = url.getprotocol(); system.out.println(protocol); } |
執行結果:
1
2
3
4
5
|
1 /editposts.aspx?opt= 1 2 i.cnblogs.com 3 - 1 4 opt= 1 5 https |
上面展示了url對象的常用方法,下面來看看url最重要的兩個方法:openconnection()、openstream()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
public static void main(string[] args) throws ioexception { url url = new url( "http://www.baidu.com" ); urlconnection connection = url.openconnection(); inputstream is = connection.getinputstream(); outputstream os = new fileoutputstream( "c:/data.txt" ); byte [] buffer = new byte [ 1024 ]; int flag = 0 ; while (- 1 != (flag = is.read(buffer, 0 , buffer.length))) { os.write(buffer, 0 , flag); } os.close(); is.close(); } |
執行結果:
1、代碼第4行openconnection()該方法用于返回urlconnection對象,表示到url所引用的遠程連接。
2、代碼第5行getinputstream方法,用于返回從此打開的連接讀取的輸入流。
3、后面的代碼就是我們已經很熟悉的從輸入流中讀到數據,再通過輸出流寫入文件。
4、執行的結果就是我們通過瀏覽器訪問http://www.baidu.com,百度服務器返回的內容。
5、這里是文本文件,我們將后綴修改為html,然后用瀏覽器訪問,這樣看起來更直觀:
6、inetaddress
java提供了inetaddress類來代表ip地址。
1
2
3
4
5
6
7
8
|
public static void main(string[] args) throws ioexception { inetaddress address = inetaddress.getlocalhost(); system.out.println(address); address = inetaddress.getbyname( "www.baidu.com" ); system.out.println(address); } |
執行結果:
1
2
|
windows-ec813qq/ 192.168 . 88.1 www.baidu.com/ 115.239 . 211.112 |
總結
以上就是本文關于java網絡編程基礎知識介紹的全部內容,希望對大家有所幫助。有什么問題可以隨時留言,小編會及時回復大家的,感謝朋友們對本站的支持!
原文鏈接:http://www.cnblogs.com/dongguacai/p/5747397.html