網(wǎng)絡(luò)編程要解決的問題:一是確認(rèn)數(shù)據(jù)傳輸?shù)钠瘘c(diǎn)和終點(diǎn),我們不關(guān)注數(shù)據(jù)傳輸通道如何建立,這屬于更底層,我們只關(guān)注通道兩端的計(jì)算機(jī)的映射是如何建立的。二是確保數(shù)據(jù)傳輸?shù)陌踩c高效,安全意味著數(shù)據(jù)不能被丟失和篡改、用算法層層封裝,導(dǎo)致數(shù)據(jù)臃腫,導(dǎo)致傳輸成本高與低效;而確保數(shù)據(jù)的高效意味著數(shù)據(jù)要輕簡傳輸,這使數(shù)據(jù)的安全得不到保障。所以程序員要根據(jù)不同場景取舍。
網(wǎng)絡(luò)編程與網(wǎng)頁編程是不同的概念,網(wǎng)絡(luò)編程是網(wǎng)頁編程的底層,側(cè)重于數(shù)據(jù)的傳輸。而網(wǎng)頁編程側(cè)重于用戶,要處理的是用戶能看到或直接影響用戶的數(shù)據(jù),怎么使數(shù)據(jù)對(duì)用戶友好。 網(wǎng)絡(luò)把計(jì)算機(jī)連接到一起,局域網(wǎng)到城域網(wǎng)再到互聯(lián)網(wǎng)。互聯(lián)需要取得地址,即ip地址,取得計(jì)算機(jī)在網(wǎng)絡(luò)上的絕對(duì)地址。兩臺(tái)計(jì)算機(jī)通過ip連在一起,用于傳輸數(shù)據(jù),但是,一臺(tái)計(jì)算機(jī)上有很多軟件,我們就需要為這些軟件提供一個(gè)標(biāo)記,使數(shù)據(jù)能根據(jù)標(biāo)記正確地發(fā)送到指定軟件,這個(gè)標(biāo)記被稱為端口號(hào),兩個(gè)字節(jié)的整數(shù)組成,0-65536,1024以下端口號(hào)預(yù)留給了知名廠商,80是給http協(xié)議,21給ftp協(xié)議,就像生活中我們的電話號(hào)碼不可以是120,即使你的電話號(hào)碼是120,那么你就要煩死,每秒都有人向你求救,這會(huì)使社會(huì)混亂,會(huì)出錯(cuò)。同一個(gè)協(xié)議下,端口號(hào)不允許重復(fù),在不同協(xié)議下端口號(hào)則可以重復(fù)。 統(tǒng)一資源定位符是URL,統(tǒng)一資源是URI。兩者是有區(qū)別的,URL是對(duì)資源的定位, 數(shù)據(jù)傳輸協(xié)議:以什么語法傳輸,怎么建立鏈接。鏈接有兩種方式,一是打電話,TCP——需要三次握手,面向鏈接,安全可靠,撥通電話才能建立鏈接才能傳輸數(shù)據(jù),效率相對(duì)于UDP慢些;二是發(fā)郵件,UDP,不需要建立鏈接,發(fā)出去了就不管了,對(duì)方不需要守在電話旁,但是對(duì)方可能一個(gè)禮拜不看郵件,一年不看郵件,可能你的郵件發(fā)錯(cuò)地址了,發(fā)送方不管接收方是否有收到數(shù)據(jù)。注意,這兩個(gè)比喻只是為了便于理解,并不是說UDP協(xié)議TCP協(xié)議傳輸數(shù)據(jù)的原理和打電話發(fā)郵件原理一樣。TCP協(xié)議傳輸是排隊(duì)傳輸,上一個(gè)沒傳完就不傳下一個(gè),UDP協(xié)議傳輸沒有排隊(duì)機(jī)制,沒有鏈接使數(shù)據(jù)排隊(duì)傳輸,數(shù)據(jù)扔過去,可能網(wǎng)絡(luò)擁堵然后丟失一個(gè)數(shù)據(jù),但是下一個(gè)數(shù)據(jù)繼續(xù)傳輸,比如視頻通話,網(wǎng)絡(luò)堵塞時(shí)馬賽克多,就是數(shù)據(jù)丟失了。現(xiàn)在網(wǎng)絡(luò)游戲是二者的結(jié)合,重要數(shù)據(jù)用TCP,次要數(shù)據(jù)用UDP以優(yōu)化用戶體驗(yàn)。接下來數(shù)據(jù)以什么方式傳輸呢?網(wǎng)購買的商品,賣家如何把商品發(fā)給買家呢?把原始數(shù)據(jù)(商品)發(fā)給圓通,這是應(yīng)用層(細(xì)分為應(yīng)用層、表示層和會(huì)話層);圓通把商品打包成快遞件,扔到卡車上,發(fā)往目的地,這是傳輸層和網(wǎng)絡(luò)層;卡車怎么實(shí)現(xiàn)從a地到b地,這是鏈接層;設(shè)計(jì)公路,讓卡車可以跑,這是物理層。數(shù)據(jù)在層與層之間傳輸會(huì)封裝,買家把商品給圓通時(shí)會(huì)給商品貼上收件人信息,會(huì)盡量包裝商品讓商品在物流過程不會(huì)損壞,這是封裝,圓通把商品分類碼好,搬上各個(gè)卡車,這是封裝,把數(shù)據(jù)封裝在卡車內(nèi)傳輸。等等。拆封同理,卡車卸貨,是拆封,買家收到商品把包裝拆開是拆封。這個(gè)購物過程可以看作一個(gè)數(shù)據(jù)的傳輸。 ip地址是淘寶京東這樣的網(wǎng)店平臺(tái),是買家住址(對(duì)應(yīng)到戶)。端口號(hào)是淘寶店鋪,是買家個(gè)人。 TCP(transfer control PRotocol) UDP(userDategramProtocol),快遞可以選TCP協(xié)議,即圓通協(xié)議,也可以選UDP協(xié)議,即郵遞(國企,更安全一些。好吧,有點(diǎn)扯)。 TCP:ServerSock賣家 Socket買家 UDP:DategramSocket DategrmPacket數(shù)據(jù)傳輸過程中,底層還是流,是公路,路鏈接買家和賣家。所以IO是重點(diǎn),但是中高級(jí)教程中把IO流封裝了,不直接面對(duì)流,畢竟我們不是貨車司機(jī)。
類:InetAddress地址和域名解析 InetSocketAdress包含地址端口號(hào) InetAddress 對(duì)ip地址和網(wǎng)址解析,InetAddress的構(gòu)造器是私有的,但是提供方法獲得InetAddress對(duì)象 InetAddress.getByName("www.baidu.com"); InetAddress.getByName("223.87.1.58");這兩個(gè)是靜態(tài)方法。 getHostAdress()返回IP地址, getHostName()返回域名。如果無法解析(如沒有注冊(cè)域名),返回的是IP地址 getLocalHost() InetSocketAdress類,在InetAddress的基礎(chǔ)上封裝了端口號(hào),提供了構(gòu)造器。 InetSocketAddress(String hostname,int port)構(gòu)造方法 getHostname() getport()得到端口號(hào) getAddress()
正在學(xué)習(xí)java中級(jí)課程,因?yàn)樯蟼€(gè)禮拜的上個(gè)禮拜講servlet時(shí)請(qǐng)了一個(gè)禮拜假,現(xiàn)在跟不上了,上禮拜沒聽老師講,網(wǎng)易云課堂上找視頻看,老師還沒視頻里講的好,但是聽的頭昏腦脹,對(duì)servlet實(shí)現(xiàn)原理不清楚。現(xiàn)在中級(jí)課程講完了,決定重修,所以找初級(jí)知識(shí)點(diǎn)看,網(wǎng)絡(luò)編程本是初級(jí)課程,但初級(jí)老師沒講。現(xiàn)在,要好好學(xué),慢慢學(xué),不著急。
分類:java網(wǎng)絡(luò)編程新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注