微信網(wǎng)站制作軟件有哪些uc瀏覽網(wǎng)頁(yè)版進(jìn)入
網(wǎng)絡(luò)編程基礎(chǔ)
為什么需要網(wǎng)絡(luò)編程? --豐富的網(wǎng)絡(luò)資源
用戶在瀏覽器中,打開(kāi)在線視頻網(wǎng)站,如優(yōu)酷看視頻,實(shí)質(zhì)通過(guò)網(wǎng)絡(luò),獲取到網(wǎng)絡(luò)上的一個(gè)視頻資源
與本地打開(kāi)視頻文件類似,只是視頻文件這個(gè)資源的來(lái)源是網(wǎng)絡(luò).
相比于本地資源來(lái)說(shuō),網(wǎng)絡(luò)提供了更為豐富的網(wǎng)絡(luò)資源:
所謂的網(wǎng)絡(luò)資源,其實(shí)就是在網(wǎng)絡(luò)中可以獲取的各種數(shù)據(jù)資源.
而所有的網(wǎng)絡(luò)資源,都是通過(guò)網(wǎng)絡(luò)編程進(jìn)行數(shù)據(jù)傳輸?shù)??
什么是網(wǎng)絡(luò)編程
網(wǎng)絡(luò)編程,指網(wǎng)絡(luò)上的主機(jī),通過(guò)不同的進(jìn)程,以編程的方式實(shí)現(xiàn)網(wǎng)絡(luò)通信(或稱為網(wǎng)絡(luò)數(shù)據(jù)傳輸).?
當(dāng)然,我們只要滿足進(jìn)程不同就行;所以即使是同一個(gè)主機(jī),只要是不同的進(jìn)程,基于網(wǎng)絡(luò)來(lái)傳輸數(shù)據(jù),也屬于網(wǎng)絡(luò)編程.?
特殊的,對(duì)于開(kāi)發(fā)來(lái)說(shuō),在條件有限的情況下,一般也是在一個(gè)主機(jī)中運(yùn)行多個(gè)進(jìn)程來(lái)實(shí)現(xiàn)網(wǎng)絡(luò)編程.
但是我們一定要明確,我們的目的是提供網(wǎng)絡(luò)上不同主機(jī),基于網(wǎng)絡(luò)來(lái)傳輸數(shù)據(jù)資源.
進(jìn)程A:編程來(lái)獲取網(wǎng)絡(luò)資源.
進(jìn)程B:編程來(lái)提供網(wǎng)絡(luò)資源.
網(wǎng)絡(luò)編程中的基本概念
發(fā)送端和接收端
在一次網(wǎng)絡(luò)數(shù)據(jù)傳輸時(shí):
發(fā)送端:數(shù)據(jù)的發(fā)送方進(jìn)程,稱為發(fā)送端.發(fā)送端主機(jī)即網(wǎng)絡(luò)通信中的源主機(jī).
接收端:數(shù)據(jù)的接收方進(jìn)程,稱為接收端.接收端主機(jī)即網(wǎng)絡(luò)通信中的目的主機(jī),
收發(fā)端:發(fā)送端和接收端兩端,也簡(jiǎn)稱為收發(fā)端.
注意:發(fā)送端和接收端是相對(duì)的,只是一次網(wǎng)絡(luò)傳輸產(chǎn)生數(shù)據(jù)流向后的概念.
請(qǐng)求和響應(yīng)
一般來(lái)說(shuō),獲取一個(gè)網(wǎng)絡(luò)資源,涉及到兩次網(wǎng)絡(luò)數(shù)據(jù)傳輸:
第一次:請(qǐng)求數(shù)據(jù)的發(fā)送
第二次:響應(yīng)數(shù)據(jù)的發(fā)送.?
好比在快餐店點(diǎn)一份炒飯:
先發(fā)起請(qǐng)求:點(diǎn)一份炒飯,再有快餐店提供對(duì)應(yīng)響應(yīng):提供一份炒飯.
客戶端與服務(wù)端
服務(wù)端:在常見(jiàn)網(wǎng)絡(luò)數(shù)據(jù)傳輸?shù)膱?chǎng)景下,把提供服務(wù)的一端進(jìn)程,稱為服務(wù)端,可以提供對(duì)外服務(wù).
客戶端:獲取服務(wù)的一方進(jìn)程,稱為客戶端.(注:同一個(gè)程序在不同場(chǎng)景下,可能是客戶端也可能是服務(wù)器).?
對(duì)于服務(wù)來(lái)說(shuō),一般是提供:
客戶端獲取服務(wù)資源
客戶端保存資源在服務(wù)端
?
好比在銀行辦事:
銀行提供存款服務(wù):用戶(客戶端)保存資源(現(xiàn)金)在銀行(服務(wù)端).
銀行提供取款服務(wù):用戶(客戶端)獲取服務(wù)端資源(銀行替用戶保管的現(xiàn)金)?
常見(jiàn)的客戶端服務(wù)端模型
最常見(jiàn)的場(chǎng)景,客戶端是指給用戶使用的程序,服務(wù)端是提供用戶服務(wù)的程序:
1.客戶端先發(fā)送請(qǐng)求到服務(wù)端
2.服務(wù)端根據(jù)請(qǐng)求數(shù)據(jù),執(zhí)行響應(yīng)的業(yè)務(wù)處理
3.服務(wù)器返回響應(yīng):發(fā)送業(yè)務(wù)處理結(jié)果.
4.客戶端根據(jù)響應(yīng)數(shù)據(jù),展示處理結(jié)果(展示獲取的資源,或提示保存資源的處理結(jié)果)
服務(wù)器的基本流程
主循環(huán)(處理若干個(gè)請(qǐng)求)
1.讀取請(qǐng)求并解析,receive讀數(shù)據(jù),把讀的構(gòu)成String.
2.根據(jù)請(qǐng)求構(gòu)造響應(yīng).具體業(yè)務(wù)邏輯的體現(xiàn)(此處暫不涉及)
3.把響應(yīng)返回給客戶端,send要發(fā)給數(shù)據(jù)報(bào)中就包含上述ip與端口
客戶端主要流程
主循環(huán)(從用戶這路讀取輸入)
1.讀取用戶在控制臺(tái)輸入的字符串.
2.通過(guò)send把請(qǐng)求發(fā)給服務(wù)器
(服務(wù)器操作~~)
3.通過(guò)receive把服務(wù)器返回的響應(yīng)讀取出來(lái).把數(shù)據(jù)顯示到界面上.?
Socket套接字
概念
Socket套接字,是由系統(tǒng)提供用于網(wǎng)絡(luò)通信的技術(shù),是基于TCP/IP協(xié)議的網(wǎng)絡(luò)通信的基本操作單元.
基于Socket套接字的網(wǎng)絡(luò)程序開(kāi)發(fā)就是網(wǎng)絡(luò)編程.?
分類
Socket套接字主要針對(duì)傳輸層協(xié)議分為如下三類:
流套接字:使用傳輸層TCP協(xié)議
TCP,即Transmission Control Protocol(傳輸控制協(xié)議),傳輸層協(xié)議.
以下為T(mén)CP的特點(diǎn)(有些細(xì)節(jié)后面會(huì)講):
有連接
可靠傳輸(主要是指發(fā)的數(shù)據(jù)到?jīng)]到,發(fā)送方能清楚感知.)
面向字節(jié)流
有接收緩沖區(qū)和發(fā)送緩沖區(qū)
大小不限
全雙工(全雙工:一個(gè)信道,可以雙向通信;半雙工:一個(gè)信道,只能單向通信)
對(duì)于字節(jié)流來(lái)說(shuō),可以簡(jiǎn)單理解為,傳輸數(shù)據(jù)是基于IO流,流式數(shù)據(jù)的特征就是在IO流沒(méi)有關(guān)閉的情況下,是無(wú)邊界的數(shù)據(jù),可以多次發(fā)送,也可以分開(kāi)多次接收.(網(wǎng)絡(luò)傳輸?shù)幕締挝皇亲止?jié))
數(shù)據(jù)報(bào)套接字:使用傳輸層UDP協(xié)議
UDP,即User Datagram Protocol(用戶數(shù)據(jù)報(bào)協(xié)議),傳輸層協(xié)議.
以下為UDP的特點(diǎn):
無(wú)連接
不可靠傳輸
面向數(shù)據(jù)報(bào)
有接收緩沖區(qū),無(wú)發(fā)送緩沖區(qū)
大小受限:一次最多傳輸64k
對(duì)于數(shù)據(jù)報(bào)來(lái)說(shuō),可以簡(jiǎn)單地理解為,傳輸數(shù)據(jù)是一塊一塊的,發(fā)送一塊數(shù)據(jù)假如100字節(jié),必須一次發(fā)送,接收也必須一次接收100字節(jié),而不能分100次,每次一個(gè)字節(jié).
Java數(shù)據(jù)報(bào)套接字通信模型
對(duì)于UDP協(xié)議來(lái)說(shuō),具有無(wú)連接,面向數(shù)據(jù)報(bào)的特征,即每次都是沒(méi)有建立連接,并且一次發(fā)送全部數(shù)據(jù)報(bào).
java中使用UDP協(xié)議通信,主要基于DatagramSocket類來(lái)創(chuàng)建數(shù)據(jù)報(bào)套接字,并使用DatagramSocket作為發(fā)送或接收的UDP數(shù)據(jù)報(bào).對(duì)于一次發(fā)送及接收UDP數(shù)據(jù)報(bào)的流程如下:
以上只是一次發(fā)送端的UDP數(shù)據(jù)報(bào)發(fā)送,及接收端的數(shù)據(jù)報(bào)接收,并沒(méi)有返回的數(shù)據(jù).也就是只有請(qǐng)求,沒(méi)有響應(yīng).對(duì)于一個(gè)服務(wù)端來(lái)說(shuō),重要的是提供多個(gè)客戶端的請(qǐng)求處理響應(yīng),流程如下:
?
Java流套接字通信模型
?
注意事項(xiàng):
?
1.客戶端和服務(wù)端:開(kāi)發(fā)時(shí),經(jīng)常是基于一個(gè)主機(jī)開(kāi)啟兩個(gè)進(jìn)程作為客戶端和服務(wù)端,但是真實(shí)的場(chǎng)景,一般是不同主機(jī).
2.注意目的IP和目的端口號(hào),標(biāo)識(shí)了一次數(shù)據(jù)傳輸時(shí)要發(fā)送數(shù)據(jù)的終點(diǎn)主機(jī)和進(jìn)程
3.Socket編程我們是使用流套接字和數(shù)據(jù)報(bào)套接字,基于TCP或UDP協(xié)議,但應(yīng)用層協(xié)議,也需要考慮,這塊我們?cè)诤罄m(xù)來(lái)說(shuō)明如何設(shè)計(jì)應(yīng)用層協(xié)議.?
?