java網(wǎng)絡(luò)編程基礎(chǔ)知識(shí)介紹
網(wǎng)絡(luò)基礎(chǔ)知識(shí)
1、OSI分層模型和TCP/IP分層模型的對(duì)應(yīng)關(guān)系
這里對(duì)于7層模型不展開(kāi)來(lái)講,只選擇跟這次系列主題相關(guān)的知識(shí)點(diǎn)介紹。
2、七層模型與協(xié)議的對(duì)應(yīng)關(guān)系
網(wǎng)絡(luò)層 ------------ IP(網(wǎng)絡(luò)之間的互聯(lián)協(xié)議)
傳輸層 ------------ TCP(傳輸控制協(xié)議)、UDP(用戶數(shù)據(jù)報(bào)協(xié)議)
應(yīng)用層 ------------ Telnet(Internet遠(yuǎn)程登錄服務(wù)的標(biāo)準(zhǔn)協(xié)議和主要方式)、FTP(文本傳輸協(xié)議)、HTTP(超文本傳送協(xié)議)
3、IP地址和端口號(hào)
1、ip地址用于唯一標(biāo)示網(wǎng)絡(luò)中的一個(gè)通信實(shí)體,這個(gè)通信實(shí)體可以是一臺(tái)主機(jī),可以是一臺(tái)打印機(jī),或者是路由器的某一個(gè)端口。而在基于IP協(xié)議網(wǎng)絡(luò)中傳輸?shù)臄?shù)據(jù)包,必須使用IP 地址來(lái)進(jìn)行標(biāo)示。ip地址就像寫一封信,必須指定收件人的地址一樣。每個(gè)被傳輸?shù)臄?shù)據(jù)包中都包括了一個(gè)源IP和目標(biāo)IP。
2、ip地址唯一標(biāo)示了通信實(shí)體,但是一個(gè)通信實(shí)體可以有多個(gè)通信程序同時(shí)提供網(wǎng)絡(luò)服務(wù)。這個(gè)時(shí)候就要通過(guò)端口來(lái)區(qū)分開(kāi)具體的通信程序。一個(gè)通信實(shí)體上不能有兩個(gè)通信程序 使用同一個(gè)端口號(hào)。
IP地址和端口號(hào),就像一個(gè)出差去外地入住酒店一樣,IP地址表示了酒店在具體位置,而端口號(hào)則表示了這個(gè)人在酒店的房間號(hào)。
4、TCP和UDP
1、TCP是一種面向連接的保證可靠傳輸?shù)膮f(xié)議。通過(guò)TCP協(xié)議傳輸,得到的是一個(gè)順序的無(wú)差錯(cuò)的數(shù)據(jù)流。它能夠提供兩臺(tái)計(jì)算機(jī)之間的可靠的數(shù)據(jù)流,HTTP、FTP、Telnet等應(yīng) 用都需要這種可靠的通信通道。
2、UDP是一種無(wú)連接的協(xié)議,每個(gè)數(shù)據(jù)報(bào)都是一個(gè)獨(dú)立的信息,包括完整的源地址或目的地址,它在網(wǎng)絡(luò)上以任何可能的路徑傳送目的地,至于能夠達(dá)到目的地,達(dá)到目的地的時(shí) 間以及內(nèi)容的正確性都是不能保證的。
既然有了保證可靠傳輸?shù)腡CP協(xié)議,為什么還要非可靠傳輸?shù)腢DP協(xié)議呢?原因有兩個(gè):
1、可靠的傳輸是要付出代價(jià)的,對(duì)數(shù)據(jù)內(nèi)容的正確性的檢驗(yàn)必然會(huì)占用計(jì)算機(jī)處理時(shí)間和網(wǎng)絡(luò)帶寬。因此TCP的傳輸效率不如UDP高。
2、許多應(yīng)用中并不需要保證嚴(yán)格的傳輸可靠性,比如視頻會(huì)議系統(tǒng),并不要求視頻音頻數(shù)據(jù)絕對(duì)正確,只要能夠連貫就可以了。所以在這些場(chǎng)景下,使用UDP更合適些。
5、URL訪問(wèn)網(wǎng)上資源
1、URL對(duì)象代表統(tǒng)一資源定位器,是指向互聯(lián)網(wǎng)“資源”的指針。它是用協(xié)議名、主機(jī)、端口和資源組成,即滿足如下格式:
protocol://host:port/resourceName
http://www.crazyit.org/index.php
2、通過(guò)URL對(duì)象的一些方法可以訪問(wèn)該URL對(duì)應(yīng)的資源:
String getFile():獲取該URL的資源名
String getHost():獲取主機(jī)名
String getPath():獲取路徑部分
int getPort():獲取端口號(hào)
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); }
執(zhí)行結(jié)果:
1 /EditPosts.aspx?opt=1 2 i.cnblogs.com 3 -1 4 opt=1 5 https
上面展示了URL對(duì)象的常用方法,下面來(lái)看看URL最重要的兩個(gè)方法:openConnection()、openStream()
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(); }
執(zhí)行結(jié)果:
1、代碼第4行openConnection()該方法用于返回URLConnection對(duì)象,表示到URL所引用的遠(yuǎn)程連接。
2、代碼第5行g(shù)etInputStream方法,用于返回從此打開(kāi)的連接讀取的輸入流。
3、后面的代碼就是我們已經(jīng)很熟悉的從輸入流中讀到數(shù)據(jù),再通過(guò)輸出流寫入文件。
4、執(zhí)行的結(jié)果就是我們通過(guò)瀏覽器訪問(wèn)http://www.baidu.com,百度服務(wù)器返回的內(nèi)容。
5、這里是文本文件,我們將后綴修改為html,然后用瀏覽器訪問(wèn),這樣看起來(lái)更直觀:
6、InetAddress
JAVA提供了InetAddress類來(lái)代表IP地址。
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); }
執(zhí)行結(jié)果:
WINDOWS-EC813QQ/192.168.88.1 www.baidu.com/115.239.211.112
總結(jié)
以上就是本文關(guān)于java網(wǎng)絡(luò)編程基礎(chǔ)知識(shí)介紹的全部?jī)?nèi)容,希望對(duì)大家有所幫助。感興趣的朋友可以繼續(xù)參閱:Java網(wǎng)絡(luò)編程之URL+URLconnection使用方法示例、Java網(wǎng)絡(luò)編程基礎(chǔ)篇之單向通信等,有什么問(wèn)題可以隨時(shí)留言,小編會(huì)及時(shí)回復(fù)大家的,感謝朋友們對(duì)本站的支持!
相關(guān)文章
Java AQS中ReentrantReadWriteLock讀寫鎖的使用
ReentrantReadWriteLock稱為讀寫鎖,它提供一個(gè)讀鎖,支持多個(gè)線程共享同一把鎖。這篇文章主要講解一下ReentrantReadWriteLock的使用和應(yīng)用場(chǎng)景,感興趣的可以了解一下2023-02-02Java+Freemarker實(shí)現(xiàn)根據(jù)XML模板文件生成Word文檔
這篇文章主要為大家詳細(xì)介紹了Java如何使用Freemarker實(shí)現(xiàn)根據(jù)XML模板文件生成Word文檔,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以學(xué)習(xí)一下2023-11-11jpa實(shí)現(xiàn)多對(duì)多的屬性時(shí)查詢的兩種方法
這篇文章主要介紹了jpa實(shí)現(xiàn)多對(duì)多的屬性時(shí)查詢的兩種方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11SkyWalking?自定義插件(Spring?RabbitMQ)具體分析過(guò)程
這篇文章主要介紹了SkyWalking?自定義插件(Spring?RabbitMQ)具體分析過(guò)程,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-02-02java常用工具類之?dāng)?shù)據(jù)庫(kù)連接類(可以連接多種數(shù)據(jù)庫(kù))
這篇文章主要介紹了java常用工具類之?dāng)?shù)據(jù)庫(kù)連接類,可以連接多種數(shù)據(jù)庫(kù),代碼中包含詳細(xì)注釋,需要的朋友可以參考下2014-07-07