網(wǎng)絡(luò)編程語(yǔ)言_第1頁(yè)
已閱讀1頁(yè),還剩29頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、1,網(wǎng)絡(luò)編程語(yǔ)言,2,應(yīng)用程序程序編程接口(套接字),實(shí)現(xiàn)網(wǎng)絡(luò)應(yīng)用時(shí),要從由網(wǎng)絡(luò)輸出的接口開始。既然大多數(shù)網(wǎng)絡(luò)協(xié)議都是由軟件實(shí)現(xiàn)的(特別是協(xié)議棧中的高層協(xié)議),而且?guī)缀跛械挠?jì)算機(jī)系統(tǒng)都將網(wǎng)絡(luò)協(xié)議的實(shí)現(xiàn)作為操作系統(tǒng)的一部分,因而我們說(shuō)“由網(wǎng)絡(luò)輸出的”接口時(shí),通常指的是操作系統(tǒng)為它的網(wǎng)絡(luò)子系統(tǒng)提供的接口。這個(gè)接口叫做網(wǎng)絡(luò)的應(yīng)用程序編程接口(A P I )。 雖然每個(gè)操作系統(tǒng)都可以自由地定義自己的A P I ,但隨著時(shí)間的推

2、移,有些A P I 已獲得了廣泛的支持;也就是說(shuō),除了它們?cè)嫉南到y(tǒng)外,它們還被移植到操作系統(tǒng)中。,3,應(yīng)用程序程序編程接口(套接字),套接字接(socket interface )口:它最初是由加州大學(xué)伯克利分校的U n i x 小組開發(fā),而現(xiàn)在幾乎所有流行的操作系統(tǒng)都支持它。業(yè)界支持單一A P I 的優(yōu)點(diǎn)是使得應(yīng)用程序可以很簡(jiǎn)單地從一個(gè)操作系統(tǒng)移植到另一個(gè)操作系統(tǒng)。但是我們得記住一點(diǎn),通常應(yīng)用程序與操作系統(tǒng)許多部分相互作用,而不僅

3、僅與網(wǎng)絡(luò)相互作用。例如,讀寫文件,產(chǎn)生并行進(jìn)程和輸出圖形顯示。 每個(gè)協(xié)議提供了一系列服務(wù)(s e rv i c e ),A P I 則提供了特定操作系統(tǒng)中調(diào)用這些服務(wù)所用的語(yǔ)法(s y n t a x )。然后,實(shí)現(xiàn)的作用是把A P I 定義的具體操作和對(duì)象映射到協(xié)議定義的抽象服務(wù)集上。,4,應(yīng)用程序程序編程接口(套接字),套接字接口的主要概念是套接字(s o c k e t )。理解套接字的好方法是把它看作本地應(yīng)用進(jìn)程與網(wǎng)

4、絡(luò)的接入點(diǎn)。接口定義了各種操作,包括創(chuàng)建套接字、將套接字連到網(wǎng)上、通過(guò)套接字發(fā)送/接收消息,關(guān)閉套接字。為了簡(jiǎn)化討論,我們?cè)诖酥挥懻揟 C P 中如何使用套接字。 第一步是創(chuàng)建套接字,用如下操作實(shí)現(xiàn): 該操作有三個(gè)參數(shù)是因?yàn)樘捉幼纸涌诒辉O(shè)計(jì)成通用的,定義支持任意的底層協(xié)議集。,,5,應(yīng)用程序程序編程接口(套接字),,2.t y p e 參數(shù)表明通信的語(yǔ)義。 S O C K _ S T R E A M 說(shuō)明是字節(jié)流。 S

5、 O C K _ D G R A M則表明是面向消息的服務(wù),像U D P 提供的一樣。,,3.p r o t o c o l 參數(shù)則指明將要用到的特定協(xié)議。,,s o c k e t 返回值是新創(chuàng)建套接字的句柄(h a n d l e ),即以后引用該套接字時(shí)使用的標(biāo)識(shí)符。在套接字的其他操作中,它也將作為一個(gè)參數(shù)。,,1.d o m a i n 參數(shù)描述將使用的協(xié)議族。 A F _ I N E T 用于表示因特網(wǎng)協(xié)議族。

6、 A F _ U N I X 用于表示U n i x 管道功能,6,客戶/服務(wù)器模式,在TCP/IP網(wǎng)絡(luò)應(yīng)用中,通信的兩個(gè)進(jìn)程間相互作用的主要模式是客戶/服務(wù)器模式(Client/Server model),即客戶向服務(wù)器發(fā)出服務(wù)請(qǐng)求,服務(wù)器接收到請(qǐng)求后,提供相應(yīng)的服務(wù)。 客戶/服務(wù)器模式的建立基于以下兩點(diǎn): 首先,建立網(wǎng)絡(luò)的起因是網(wǎng)絡(luò)中軟硬件資源、運(yùn)算能力和信息不均等,需要共享,從而造就擁有眾多資源的主機(jī)提供服務(wù),

7、資源較少的客戶請(qǐng)求服務(wù)這一非對(duì)等作用。 其次,網(wǎng)間進(jìn)程通信完全是異步的,相互通信的進(jìn)程間既不存在父子關(guān)系,又不共享內(nèi)存緩沖區(qū),因此需要一種機(jī)制為希望通信的進(jìn)程間建立聯(lián)系,為二者的數(shù)據(jù)交換提供同步,這就是基于客戶/服務(wù)器模式的TCP/IP。,,7,客戶/服務(wù)器模式,客戶/服務(wù)器模式在操作過(guò)程中采取的是主動(dòng)請(qǐng)求方式: 首先服務(wù)器方要先啟動(dòng),并根據(jù)請(qǐng)求提供相應(yīng)服務(wù):1.打開一通信通道并告知本地主機(jī),它愿意在某一公認(rèn)地址上(周知

8、口,如FTP為21)接收客戶請(qǐng)求;2.等待客戶請(qǐng)求到達(dá)該端口;3.接收到重復(fù)服務(wù)請(qǐng)求,處理該請(qǐng)求并發(fā)送應(yīng)答信號(hào)。接收到并發(fā)服務(wù)請(qǐng)求,要激活一新進(jìn)程來(lái)處理這個(gè)客戶請(qǐng)求(如UNIX系統(tǒng)中用fork、exec)。新進(jìn)程處理此客戶請(qǐng)求,并不需要對(duì)其它請(qǐng)求作出應(yīng)答。服務(wù)完成后,關(guān)閉此新進(jìn)程與客戶的通信鏈路,并終止。4. 返回第二步,等待另一客戶請(qǐng)求。5. 關(guān)閉服務(wù)器,8,客戶/服務(wù)器模式,客戶方:1. &#

9、160;打開一通信通道,并連接到服務(wù)器所在主機(jī)的特定端口;2. 向服務(wù)器發(fā)服務(wù)請(qǐng)求報(bào)文,等待并接收應(yīng)答;繼續(xù)提出請(qǐng)求......3.   請(qǐng)求結(jié)束后關(guān)閉通信通道并終止。 從上面所描述過(guò)程可知:1.  客戶與服務(wù)器進(jìn)程的作用是非對(duì)稱的,因此編碼不同。2.  服務(wù)進(jìn)程一般是先于客戶請(qǐng)求而啟動(dòng)的。只要系統(tǒng)運(yùn)行,該服務(wù)進(jìn)程一直存在,直到正?;驈?qiáng)

10、迫終止。,9,應(yīng)用程序程序編程接口(套接字),下一步看你是客戶還是服務(wù)器。 如果是服務(wù)器:在服務(wù)器主機(jī)上,應(yīng)用進(jìn)程執(zhí)行一個(gè)被動(dòng)的打開,即服務(wù)器表明它已準(zhǔn)備好接受連接,但并沒(méi)有真正建立連接。服務(wù)器通過(guò)調(diào)用以下三個(gè)操作來(lái)完成打開:,10,套接字類型,TCP/IP的socket提供下列三種類型套接字。(1)流式套接字(SOCK_STREAM)提供了一個(gè)面向連接、可靠的數(shù)據(jù)傳輸服務(wù),數(shù)據(jù)無(wú)差錯(cuò)、無(wú)重復(fù)地發(fā)送,且按發(fā)送順序接收。內(nèi)

11、設(shè)流量控制,避免數(shù)據(jù)流超限;數(shù)據(jù)被看作是字節(jié)流,無(wú)長(zhǎng)度限制。文件傳送協(xié)議(FTP)即使用流式套接字。 (2)數(shù)據(jù)報(bào)式套接字(SOCK_DGRAM)提供了一個(gè)無(wú)連接服務(wù)。數(shù)據(jù)包以獨(dú)立包形式被發(fā)送,不提供無(wú)錯(cuò)保證,數(shù)據(jù)可能丟失或重復(fù),并且接收順序混亂。網(wǎng)絡(luò)文件系統(tǒng)(NFS)使用數(shù)據(jù)報(bào)式套接字。 (3)原始式套接字(SOCK_RAW)該接口允許對(duì)較低層協(xié)議,如IP、ICMP直接訪問(wèn)。常用于檢驗(yàn)新的協(xié)議實(shí)現(xiàn)或訪問(wèn)

12、現(xiàn)有服務(wù)中配置的新設(shè)備。,11,典型套接字調(diào)用過(guò)程舉例,如前所述,TCP/IP協(xié)議的應(yīng)用一般采用客戶/服務(wù)器模式,因此在實(shí)際應(yīng)用中,必須有客戶和服務(wù)器兩個(gè)進(jìn)程,并且首先啟動(dòng)服務(wù)器,其系統(tǒng)調(diào)用時(shí)序圖如下。面向連接的協(xié)議(如TCP)的套接字系統(tǒng)調(diào)用如下圖所示:服務(wù)器必須首先啟動(dòng),直到它執(zhí)行完accept()調(diào)用,進(jìn)入等待狀態(tài)后,方能接收客戶請(qǐng)求。假如客戶在此前啟動(dòng),則connect()將返回出錯(cuò)代碼,連接不成功。,見(jiàn)下圖,12,服務(wù)器方

13、 客戶方,13,Status of parent and child processes with respect to the socket,,,,,,,,14,典型套接字調(diào)用過(guò)程舉例,無(wú)連接協(xié)議的套接字調(diào)用如下圖所示: 無(wú)連接服務(wù)器也必須先啟動(dòng),否則客戶請(qǐng)求傳不到服務(wù)進(jìn)程。無(wú)連接客戶不調(diào)用connect()。因此在數(shù)據(jù)發(fā)送之前,客戶與服務(wù)

14、器之間尚未建立完全相關(guān),但各自通過(guò)socket()和bind()建立了半相關(guān)。發(fā)送數(shù)據(jù)時(shí),發(fā)送方除指定本地套接字號(hào)外,還需指定接收方套接字號(hào),從而在數(shù)據(jù)收發(fā)過(guò)程中動(dòng)態(tài)地建立了全相關(guān)。,見(jiàn)下圖,15,,16,應(yīng)用程序程序編程接口(套接字),1.b i n d 操作:如其名字一樣,是將新創(chuàng)建的s o c k e t 與a d d r e s s 綁定。這是本地參與者(即服務(wù)器)的網(wǎng)絡(luò)地址。 注意,a d d r e s s 在因

15、特網(wǎng)協(xié)議中使用時(shí)是表示一個(gè)數(shù)據(jù)結(jié)構(gòu),其中包括服務(wù)器的I P 地址和T C P 端口號(hào)。端口號(hào)通常是一些眾所周知的、專門提供給服務(wù)的號(hào)嗎;例如,We b 服務(wù)器通常在端口8 0 上接受連接。,2.l i s t e n 操作:定義在指定的s o c k e t 上可以有多少個(gè)待處理的連接。,3.a c c e p t 操作:完成被動(dòng)打開。它是一個(gè)阻塞的操作,在遠(yuǎn)程參與者沒(méi)有建立起連接前,它不會(huì)返回任何參數(shù),一旦連接成功,它將返回一個(gè)表示這

16、個(gè)新建連接的新的套接字,并且a d d r e s s 參數(shù)還包括了遠(yuǎn)程參與者的地址。,注意,當(dāng)a c c e p t 返回時(shí),以前作為參數(shù)給定的原始套接字依然存在并依然對(duì)應(yīng)于被動(dòng)打開;在以后調(diào)用a c c e p t 時(shí)它仍作為參數(shù)。,17,應(yīng)用程序程序編程接口(套接字),在客戶機(jī)上,應(yīng)用程序執(zhí)行主動(dòng)打開;也就是,它通過(guò)調(diào)用如下的一個(gè)操作來(lái)表明它希望與誰(shuí)通信:,該操作直至T C P 成功建立連接后才返回,此時(shí)應(yīng)用程序就可以開始發(fā)送數(shù)

17、據(jù)。a d d r e s s 中包括了遠(yuǎn)程參與者的地址。 實(shí)際上,客戶機(jī)通常只描述遠(yuǎn)程參與者的地址,讓系統(tǒng)自動(dòng)填寫本地信息。鑒于服務(wù)器通常在共知的端口監(jiān)聽消息,一般地,客戶機(jī)并不關(guān)心它自己用哪個(gè)端口;操作系統(tǒng)簡(jiǎn)單地選一個(gè)未用端口即可。,18,應(yīng)用程序程序編程接口(套接字),一旦連接建立,應(yīng)用進(jìn)程將調(diào)用以下兩個(gè)操作來(lái)發(fā)送和接收數(shù)據(jù):,這個(gè)操作在指定的s o c k e t 上發(fā)送m e s s a g e,這個(gè)操作則是將從指定

18、的s o c k e t 上收到的消息放入指定的b u ff e r 。它們都使用一系列f l a g s 來(lái)控制操作的特定細(xì)節(jié)。,19,應(yīng)用實(shí)例,現(xiàn)在,我們來(lái)看一個(gè)簡(jiǎn)單的客戶機(jī)/服務(wù)器程序的實(shí)現(xiàn),它用套接字接口在一個(gè)T C P 連接上發(fā)送消息。這個(gè)程序還用到了其他的U n i x 網(wǎng)絡(luò)功能,我們將逐個(gè)介紹。我們的應(yīng)用允許用戶在一端的機(jī)器上輸入并把文本發(fā)送給另一端機(jī)器的用戶。它是U n i x 中t a l k 程序的一個(gè)簡(jiǎn)化版本,類似

19、于We b 聊天室的核心程序。,20,應(yīng)用實(shí)例,1.客戶端 我們先從客戶端開始,它用遠(yuǎn)端的機(jī)器名作為參數(shù)。它調(diào)用U n i x 程序g e t h o s t b y n a m e 把該名字翻譯為遠(yuǎn)端主機(jī)的I P 地址。 下一步是構(gòu)造套接字接口所需的地址數(shù)據(jù)結(jié)構(gòu)(s i n )。 注意這個(gè)數(shù)據(jù)結(jié)構(gòu)表明我們將一直用套接字與因特網(wǎng)連接(A F _ I N E T )。 在以下例子中,我們用T C P

20、 端口號(hào)5 4 3 2 作為共知的服務(wù)器端口號(hào);它恰好不是分配給其他因特網(wǎng)服務(wù)的端口號(hào)。 建立連接的最后一步是調(diào)用s o c k e t 和c o n n e c t 。一旦c o n n e c t 操作返回,建立起連接,客戶機(jī)程序?qū)⑦M(jìn)入主循環(huán),不斷從標(biāo)準(zhǔn)輸入讀取文本并通過(guò)套接字發(fā)送。,21,客戶端程序,22,應(yīng)用實(shí)例,2. 服務(wù)器 服務(wù)器的實(shí)現(xiàn)也很簡(jiǎn)單。首先,它填入自己的端口號(hào)(S E RV E R _

21、P O RT )構(gòu)造地址數(shù)據(jù)結(jié)構(gòu)。 其次,它并不指明I P地址,從而使應(yīng)用程序可以接受來(lái)自本地任一I P 地址的連接。 然后,服務(wù)器執(zhí)行與被動(dòng)打開有關(guān)的初始步驟: 創(chuàng)建一個(gè)套接字,將它綁定到本地地址。 然后設(shè)置允許同時(shí)連接的最大數(shù)。 最后,主循環(huán)等待遠(yuǎn)端主機(jī)與它連接,當(dāng)遠(yuǎn)端有一臺(tái)主機(jī)試圖與它連接時(shí),它就接收并輸出連接上送來(lái)的字符。,23,服務(wù)器程序,24,協(xié)議實(shí)現(xiàn)的問(wèn)題,應(yīng)用程序與底層網(wǎng)絡(luò)交互

22、的方式類似于高層協(xié)議與低層協(xié)議交互的方式。例如,T C P 需要一個(gè)接口向I P 發(fā)送消息,同時(shí)也需要I P 能向T C P 傳送消息。這就是服務(wù)接口。 既然我們已經(jīng)有了網(wǎng)絡(luò)的A P I (如套接字),或許我們可以在協(xié)議棧的每一對(duì)協(xié)議間使用同樣的接口。盡管這只是一種選擇,但在實(shí)際中我們并不這樣使用套接字接口。原因在于套接字接口在協(xié)議實(shí)現(xiàn)方面的低效是協(xié)議實(shí)現(xiàn)者所不能忍受的。應(yīng)用編程人員之所以能忍受是因?yàn)樗?jiǎn)化了編程工作,而且畢竟

23、他對(duì)低效只需忍受一次就夠了,而協(xié)議實(shí)現(xiàn)者卻要常常被它們的性能所困擾,總擔(dān)心穿過(guò)幾層協(xié)議是否能得到一條消息。 本節(jié)的其余部分將討論網(wǎng)絡(luò)A P I 和位于協(xié)議圖下方的協(xié)議到協(xié)議接口的兩點(diǎn)主要不同。同時(shí)介紹協(xié)議實(shí)現(xiàn)常用到的庫(kù)例程。,25,協(xié)議實(shí)現(xiàn)的問(wèn)題,1. 進(jìn)程模型 大多數(shù)操作系統(tǒng)都提供一種抽象概念叫進(jìn)程(p ro c e s s ),或叫線程(t h re a d )。每個(gè)進(jìn)程的運(yùn)行很大程度上獨(dú)立于其他進(jìn)程,操作系統(tǒng)負(fù)責(zé)

24、確保給所有當(dāng)前的進(jìn)程分配如地址空間和C P U 周期這樣的資源。 進(jìn)程這一抽象概念使得在一臺(tái)機(jī)器上并發(fā)運(yùn)行多個(gè)事件變得相當(dāng)簡(jiǎn)單;例如,每個(gè)用戶的應(yīng)用程序可以在自己的進(jìn)程中執(zhí)行,操作系統(tǒng)中的各種事件可以作為其他進(jìn)程執(zhí)行。 操作系統(tǒng)將正在C P U 上運(yùn)行的進(jìn)程停止并啟動(dòng)另一進(jìn)程時(shí),我們稱這一轉(zhuǎn)換為上下文切換(context switch )。,26,協(xié)議實(shí)現(xiàn)的問(wèn)題,在設(shè)計(jì)一個(gè)網(wǎng)絡(luò)子系統(tǒng)時(shí),首先要回答的問(wèn)題之一是,“進(jìn)程在

25、哪兒?”基本上有兩種選擇,如圖所示。 第一種選擇,我們稱為進(jìn)程/協(xié)議(p ro c e s s - p e r- p ro t o c o l )模型,每個(gè)協(xié)議由一個(gè)獨(dú)立的進(jìn)程實(shí)現(xiàn)。這就意味著當(dāng)一條消息向協(xié)議棧的上方或下方移動(dòng)時(shí),它被從一個(gè)進(jìn)程/協(xié)議傳送到另一個(gè)進(jìn)程/協(xié)議,即實(shí)現(xiàn)協(xié)議i 的進(jìn)程處理這個(gè)消息,然后把它傳給協(xié)議i -1 ,以此類推。一個(gè)進(jìn)程/協(xié)議如何向下一個(gè)進(jìn)程/協(xié)議傳遞消息依賴于主機(jī)操作系統(tǒng)提供的進(jìn)程間通信的支持。

26、通常有一個(gè)簡(jiǎn)單的機(jī)制把消息與進(jìn)程排隊(duì)。然而,重要的一點(diǎn)是,協(xié)議圖的每一層都要求上下文切換,這是一個(gè)典型的耗時(shí)操作。,27,協(xié)議實(shí)現(xiàn)的問(wèn)題,我們把另一種稱為進(jìn)程/消息(p ro c e s s - p e r-me s s a g e )模型,它把每個(gè)協(xié)議當(dāng)做一段靜態(tài)編碼并把進(jìn)程同消息聯(lián)系起來(lái)。也就是說(shuō),當(dāng)網(wǎng)絡(luò)送來(lái)一條消息時(shí),操作系統(tǒng)調(diào)度一個(gè)進(jìn)程,使之負(fù)責(zé)消息在協(xié)議圖中向上移動(dòng)。在每一層,調(diào)用實(shí)現(xiàn)該協(xié)議的過(guò)程,然后調(diào)用實(shí)現(xiàn)下一個(gè)協(xié)議的過(guò)程

27、,以此類推。對(duì)于輸出的消息,應(yīng)用程序調(diào)用必要的過(guò)程,直到消息被送入網(wǎng)絡(luò)。在兩個(gè)方向中,協(xié)議圖都被一系列過(guò)程調(diào)用一遍。,28,協(xié)議實(shí)現(xiàn)的問(wèn)題,結(jié)論: 雖然有時(shí)感覺(jué)進(jìn)程/協(xié)議模型比較容易,即我在我的進(jìn)程中實(shí)現(xiàn)我的協(xié)議,而你在你的進(jìn)程中實(shí)現(xiàn)你的協(xié)議。 但由于一個(gè)簡(jiǎn)單的原因,進(jìn)程/消息模型通常更有效:即在大多數(shù)計(jì)算機(jī)上,過(guò)程調(diào)用的效率比上下文切換高一個(gè)數(shù)量級(jí)。 第一種模型要求每一層有一個(gè)上下文切換,而第二種模型只要求每一

28、層有一個(gè)進(jìn)程調(diào)用。,29,協(xié)議實(shí)現(xiàn)的問(wèn)題,大多數(shù)協(xié)議實(shí)現(xiàn)用d e l i v e r 操作代替r e c e i v e 操作。也就是低層協(xié)議做向上調(diào)用(u p c a l l ),它是一個(gè)向上調(diào)用協(xié)議棧的過(guò)程,將消息傳送到高層協(xié)議。圖顯示了兩個(gè)相鄰協(xié)議(本例中為T C P 和I P )的接口。 一般情況下,消息向協(xié)議棧的下方移動(dòng)調(diào)用一系列s e n d 操作,向協(xié)議圖上方移動(dòng)則調(diào)用一系列d e l i v e r 操作。,代碼段

29、用下列操作:,其中:l l p 表示低層協(xié)議,其上的正在調(diào)用它的協(xié)議已被配置;h l p 表示正在調(diào)用協(xié)議之上配置的高層協(xié)議。注意,我們用P r o t o c o l 這一變量類型和變量l l p 和h l p 簡(jiǎn)化了使用,它們隱藏了協(xié)議圖中如何配置協(xié)議、高層協(xié)議如何在低層協(xié)議上打開一個(gè)連接的細(xì)節(jié)。,30,協(xié)議實(shí)現(xiàn)的問(wèn)題,2. 消息緩沖區(qū) 套接字接口的第二個(gè)低效之處在于當(dāng)調(diào)用s e n d 時(shí)應(yīng)用進(jìn)程提供緩沖區(qū),保存向外發(fā)送

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論