三層CS分布式計(jì)算模型的設(shè)計(jì)和實(shí)現(xiàn)_第1頁(yè)
三層CS分布式計(jì)算模型的設(shè)計(jì)和實(shí)現(xiàn)_第2頁(yè)
三層CS分布式計(jì)算模型的設(shè)計(jì)和實(shí)現(xiàn)_第3頁(yè)
三層CS分布式計(jì)算模型的設(shè)計(jì)和實(shí)現(xiàn)_第4頁(yè)
三層CS分布式計(jì)算模型的設(shè)計(jì)和實(shí)現(xiàn)_第5頁(yè)
已閱讀5頁(yè),還剩4頁(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、三層C/S分布式計(jì)算模型的設(shè)計(jì)和實(shí)現(xiàn)陳哲 文敦偉中南大學(xué)信息科學(xué)與工程學(xué)院智能研究所 湖南長(zhǎng)沙 410083摘要:本文設(shè)計(jì)并實(shí)現(xiàn)了一個(gè)基于三層C/S(Client/Server,客戶端/服務(wù)器)模型的分布式計(jì)算通用模型來(lái)進(jìn)行分布式計(jì)算。這種模型極大地提高了計(jì)算機(jī)的計(jì)算能力,為進(jìn)行其它大數(shù)據(jù)量的計(jì)算提供了一種實(shí)際的解決方法。以計(jì)算某個(gè)范圍內(nèi)的所有質(zhì)數(shù)作為示例,模擬了進(jìn)行其他的分布式計(jì)算的情況。關(guān)鍵詞:分布式系統(tǒng),三層客戶機(jī)/服務(wù)器模型,.NetDesign and implementation of a distributed computing system model based on C/

2、S modelAuthor: Chen Zhe Director: Wen DunweiAbstract: In this paper, a common distributed system model which based on Client/Server model of three layers has been designed and realized to carry on distributed computing. This model can highly increase computing ability of computers, and provides an u

3、seful solution for other computing of huge data. As a sample, we compute all the prime numbers in a certain range using this system, which simulates other conditions.Keywords: Distributed system, Client/Server model, .Net論文所屬類別:設(shè)計(jì)與實(shí)現(xiàn)第一作者簡(jiǎn)介:陳哲,男,信息學(xué)院模式識(shí)別與智能系統(tǒng)專業(yè)2003級(jí)碩士研究生,研究方向?yàn)樽匀徽Z(yǔ)言理解,機(jī)器學(xué)習(xí),分布式系統(tǒng)等。1 引言隨

4、著計(jì)算機(jī)技術(shù)的發(fā)展和信息爆炸時(shí)代的來(lái)臨,人們對(duì)數(shù)據(jù)計(jì)算的需求越來(lái)越高,特別是大數(shù)據(jù)量的科學(xué)計(jì)算,是對(duì)計(jì)算機(jī)能力的一大挑戰(zhàn)。傳統(tǒng)的單機(jī)計(jì)算受到計(jì)算速度,計(jì)算容量的限制,已經(jīng)無(wú)法滿足需求。比如,在對(duì)機(jī)器學(xué)習(xí)和自然語(yǔ)言理解領(lǐng)域的研究和實(shí)現(xiàn)中,牽涉到數(shù)據(jù)的海量計(jì)算,用單機(jī)計(jì)算系統(tǒng)來(lái)實(shí)現(xiàn)是不切實(shí)際的。隨著計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)的日益成熟,分布式計(jì)算(Distributed Computing)給出了新的解決辦法。面對(duì)不斷增長(zhǎng)的應(yīng)用和信息服務(wù)需求,傳統(tǒng)的軟件設(shè)計(jì)模式兩層的客戶機(jī)/服務(wù)器模式(Client/Server) 變得越來(lái)越不適應(yīng)這種增長(zhǎng),三層應(yīng)用體系結(jié)構(gòu)的產(chǎn)生,解決了越來(lái)越龐大和復(fù)雜的客戶端使得網(wǎng)絡(luò)通信和

5、軟件的維護(hù)變得非常困難和昂貴所帶來(lái)的問(wèn)題。本文將以計(jì)算某個(gè)范圍內(nèi)的質(zhì)數(shù)為例,基于以上兩種技術(shù)設(shè)計(jì)并實(shí)現(xiàn)了一種通用的分布式系統(tǒng)模型,使用這一模型可以構(gòu)建各種分布式計(jì)算系統(tǒng)。2 分布式計(jì)算2.1 概述分布式系統(tǒng)是由兩臺(tái)或兩臺(tái)以上計(jì)算機(jī)組成的系統(tǒng), 具有物理上分布的物理資源和邏輯資源, 這些資源都是高度自治而相互合作地工作。參與這項(xiàng)工作的一定不只是一臺(tái)計(jì)算機(jī),而是一個(gè)計(jì)算機(jī)網(wǎng)絡(luò)。我們的計(jì)算機(jī)具有兩種功能,一是它能夠存貯信息,即數(shù)據(jù)存儲(chǔ)功能;另一個(gè)功能是它能夠處理數(shù)據(jù)的能力,即計(jì)算能力。在分布式計(jì)算環(huán)境中,數(shù)據(jù)的處理不只是在一臺(tái)機(jī)器完成,而是多臺(tái)機(jī)器協(xié)作完成的。比如,為了處理一項(xiàng)工作P,它由兩部分工作

6、組成,PA和PB。如果我們把PA放在機(jī)器A中完成,PB處理放在機(jī)器B中完成,那么它們就形成了一個(gè)分布式的計(jì)算。2.2 負(fù)載平衡策略在分布式系統(tǒng)運(yùn)行任務(wù)的時(shí)候,我們把每個(gè)計(jì)算機(jī)或計(jì)算單位稱為一個(gè)結(jié)點(diǎn)。有些結(jié)點(diǎn)運(yùn)算能力強(qiáng),于是很快進(jìn)入任務(wù)空閑狀態(tài),而有些結(jié)點(diǎn)則處于任務(wù)重載狀態(tài)。這樣各個(gè)結(jié)點(diǎn)之間的任務(wù)調(diào)度就變得重要了,分布式系統(tǒng)實(shí)行全系統(tǒng)范圍內(nèi)資源的靜態(tài)或者動(dòng)態(tài)分配, 為了使系統(tǒng)得到最佳的資源分配和最好的資源共享的效果, 必須實(shí)現(xiàn)動(dòng)態(tài)負(fù)載平衡。所謂的動(dòng)態(tài)負(fù)載平衡是指根據(jù)系統(tǒng)當(dāng)前的負(fù)載狀況, 把當(dāng)前重載計(jì)算機(jī)上的任務(wù)傳送到輕載的計(jì)算機(jī)上執(zhí)行??梢允褂媒邮照唑?qū)動(dòng)策略來(lái)進(jìn)行任務(wù)的調(diào)度。其主要思想是由空閑結(jié)

7、點(diǎn)逐個(gè)向其它結(jié)點(diǎn)請(qǐng)求任務(wù), 如果請(qǐng)求到任務(wù), 那么就中止請(qǐng)求, 否則就繼續(xù)詢問(wèn)下一個(gè)結(jié)點(diǎn)。若所有結(jié)點(diǎn)都沒(méi)有滿足請(qǐng)求, 那么請(qǐng)求結(jié)點(diǎn)就等待, 過(guò)一段時(shí)間后再發(fā)出任務(wù)請(qǐng)求。接收者驅(qū)動(dòng)主要有下列幾個(gè)優(yōu)點(diǎn): 不需要相互交換負(fù)載信息; 對(duì)于大規(guī)模并行計(jì)算問(wèn)題, 當(dāng)每個(gè)結(jié)點(diǎn)均處于重載狀態(tài)時(shí), 幾乎不需要額外調(diào)度開銷; 負(fù)載平衡的許多工作由空閑結(jié)點(diǎn)來(lái)完成, 沒(méi)有給忙結(jié)點(diǎn)增加許多額外負(fù)擔(dān)。任務(wù)數(shù)據(jù)的保存也是這一問(wèn)題的一個(gè)關(guān)鍵內(nèi)容??梢詫?shù)據(jù)保存在各個(gè)結(jié)點(diǎn)上,但是由于任務(wù)遷移的時(shí)候要將整個(gè)任務(wù)在多個(gè)結(jié)點(diǎn)中傳輸,所以這樣通信的開銷非常大??梢杂靡慌_(tái)服務(wù)器專門存放任務(wù)信息,稱為信息中心結(jié)點(diǎn)。系統(tǒng)中僅信息中心結(jié)點(diǎn)需要

8、記錄處于相同局域網(wǎng)內(nèi)的其他非信息中心結(jié)點(diǎn)的負(fù)載信息,而各非信息中心結(jié)點(diǎn)僅需知道信息中心結(jié)點(diǎn)的位置。當(dāng)某一非信息中心結(jié)點(diǎn)負(fù)載發(fā)生變化時(shí),將負(fù)載信息向信息中心匯報(bào)即可。若負(fù)載變化后該非信息中心結(jié)點(diǎn)空閑,則按信息中心記載的信息從重載結(jié)點(diǎn)接收任務(wù)。這樣,每次的負(fù)載變化不需打擾相鄰結(jié)點(diǎn),也不被相鄰結(jié)點(diǎn)打擾,提高了整個(gè)系統(tǒng)的效率。系統(tǒng)的物理結(jié)構(gòu)如圖1所示。圖1 系統(tǒng)網(wǎng)絡(luò)物理結(jié)構(gòu)3 三層客戶機(jī)/服務(wù)器模型如圖2所示,在三層應(yīng)用體系結(jié)構(gòu)中,整個(gè)系統(tǒng)是由三個(gè)部分組成: 表示層(即用戶界面)、事務(wù)層和數(shù)據(jù)層。表示層負(fù)責(zé)處理與用戶的交互和與應(yīng)用服務(wù)器的交互。事務(wù)層負(fù)責(zé)處理應(yīng)用邏輯,具體地說(shuō)就是接受客戶機(jī)方應(yīng)用程序的

9、請(qǐng)求,然后根據(jù)應(yīng)用邏輯將這個(gè)請(qǐng)求轉(zhuǎn)化為數(shù)據(jù)請(qǐng)求后與數(shù)據(jù)層交互,并將與數(shù)據(jù)層交互的結(jié)果傳送給客戶機(jī)方的應(yīng)用程序。數(shù)據(jù)層根據(jù)事務(wù)層發(fā)送的請(qǐng)求進(jìn)行數(shù)據(jù)操作,并將操作的結(jié)果傳送給事務(wù)層。由于上述三層在邏輯上是相互獨(dú)立的,因此,在某一層內(nèi)所進(jìn)行的變更,對(duì)于其他的兩層而言是透明的,所以這種結(jié)構(gòu)可以很好地適應(yīng)復(fù)雜而又頻繁變化的系統(tǒng)。圖2 三層客戶機(jī)/服務(wù)器模型示意圖4 設(shè)計(jì)目標(biāo)和實(shí)現(xiàn)環(huán)境本文提出了一個(gè)基于三層C/S(Client/Server,客戶端/服務(wù)器)模式的分布式系統(tǒng)的通用模型,來(lái)進(jìn)行分布式計(jì)算。以計(jì)算某個(gè)范圍內(nèi)的所有質(zhì)數(shù)作為示例,模擬了進(jìn)行其他的分布式計(jì)算的情況。系統(tǒng)采用三層客戶機(jī)/服務(wù)器模型,負(fù)

10、載均衡采用信息中心負(fù)載均衡策略。由一臺(tái)服務(wù)器作為信息中心,用來(lái)調(diào)度所有的任務(wù)分配。若干客戶端連接服務(wù)器,啟動(dòng)策略采用接收者啟動(dòng)算法。當(dāng)客戶端空閑的時(shí)候從服務(wù)器上得到任務(wù)并執(zhí)行計(jì)算,完成之后把結(jié)果傳回給服務(wù)器。信息中心根據(jù)各節(jié)點(diǎn)的負(fù)載情況調(diào)度任務(wù)分配。本文的實(shí)驗(yàn)基于.Net平臺(tái)構(gòu)建,使用C#語(yǔ)言編寫代碼。5 詳細(xì)設(shè)計(jì)5.1 模型的選擇(1) 三層客戶機(jī)/服務(wù)器計(jì)算模型由于三層客戶機(jī)/服務(wù)器模型在系統(tǒng)開發(fā)中的巨大優(yōu)越性,比如性能好、易模塊化、易擴(kuò)充等優(yōu)點(diǎn),成為了本系統(tǒng)的選擇。本系統(tǒng)分為以下三層:a) 表示層:即本系統(tǒng)的人機(jī)界面,由于本實(shí)驗(yàn)的重點(diǎn)在于算法部分,因此該層采用控制臺(tái)界面。b) 事務(wù)層:負(fù)

11、責(zé)處理數(shù)據(jù),把對(duì)數(shù)據(jù)層的訪問(wèn)結(jié)果送回給表示層。服務(wù)器端的事務(wù)層主要包括任務(wù)調(diào)度;客戶機(jī)的事務(wù)層主要包括計(jì)算處理。c) 數(shù)據(jù)層:負(fù)責(zé)數(shù)據(jù)的存取處理。服務(wù)器端的數(shù)據(jù)層主要是任務(wù)狀態(tài)的記錄和計(jì)算結(jié)果的保存;客戶機(jī)的數(shù)據(jù)層主要是任務(wù)和結(jié)果的保存。同時(shí),服務(wù)器端和客戶端的數(shù)據(jù)通信也是由該層負(fù)責(zé)的。(2) 動(dòng)態(tài)負(fù)載均衡本系統(tǒng)不限制客戶機(jī)的個(gè)數(shù),這就意味著客戶機(jī)的處理能力等狀態(tài)都是預(yù)先不可知的,服務(wù)器必須根據(jù)實(shí)時(shí)的狀態(tài)來(lái)分配任務(wù),所以采用了動(dòng)態(tài)負(fù)載均衡。(3) 接收者啟動(dòng)算法為了減少系統(tǒng)的通信開銷,采用該算法。由接收者激發(fā)負(fù)載的分配,這樣在重載的情況下不會(huì)引起系統(tǒng)的不穩(wěn)定。(4) 信息中心負(fù)載均衡策略用一臺(tái)

12、服務(wù)器作為信息中心,除了這個(gè)信息中心之外,其他節(jié)點(diǎn)都不需保留節(jié)點(diǎn)負(fù)載信息。各節(jié)點(diǎn)負(fù)載狀態(tài)發(fā)生變化的時(shí)候只需要向信息中心匯報(bào)各自的負(fù)載狀態(tài)信息。5.2 系統(tǒng)流程和信號(hào)定義(1)客戶機(jī)和服務(wù)器之間處理流程本系統(tǒng)的網(wǎng)絡(luò)物理體系結(jié)構(gòu)如圖1所示。在該圖中,用一臺(tái)服務(wù)器作為信息中心,其他若干客戶端連接到服務(wù)器。當(dāng)客戶端輕載的時(shí)候,向服務(wù)器提出任務(wù)請(qǐng)求,服務(wù)器將任務(wù)發(fā)送到客戶端,客戶端計(jì)算之后將結(jié)果返回給服務(wù)器存儲(chǔ)。對(duì)于任務(wù)P,被分為N個(gè)塊P1、P2、Pn,分別在N個(gè)客戶端(C1、C2、Cn)上運(yùn)行,即P = P1+P2+Pn (2)信號(hào)定義服務(wù)器和客戶端之間信號(hào)的傳送需要互相了解對(duì)方信號(hào)的意義,這樣就有必

13、要定義一個(gè)信號(hào)的數(shù)據(jù)字典。在本系統(tǒng)中用到的信號(hào)定義如下:表1 客戶端信號(hào)定義(都以$作為結(jié)尾標(biāo)記)編號(hào)信號(hào)內(nèi)容意義對(duì)方反映方式C1N$空閑服務(wù)器按s1格式發(fā)出任務(wù)C2A<數(shù)字>$比如:A13$該<數(shù)字>是質(zhì)數(shù)服務(wù)器把該數(shù)字存儲(chǔ)到答案文件C3R<數(shù)字>$收到s1命令,開始計(jì)算<數(shù)字>服務(wù)器不做任何回答,只是把該數(shù)字從任務(wù)列表中除去C4S3$收到s3命令服務(wù)器不做任何回答表2 服務(wù)器端發(fā)送的信號(hào)定義編號(hào)信號(hào)內(nèi)容意義對(duì)方反映方式S1A<數(shù)字>如A101求<數(shù)字>是不是質(zhì)數(shù)??蛻舳税碿3回答S2R<數(shù)字>如R13收到答

14、案<數(shù)字>,如:R13表示收到答案13客戶端將該答案從答案列表中除去,服務(wù)器把該答案記錄在答案列表中S3E任務(wù)全部完成客戶端按c4回答S40無(wú)意義信號(hào)發(fā)送過(guò)程如下:(a)當(dāng)客戶端沒(méi)有任務(wù)的時(shí)候,采用如下方式獲得任務(wù):發(fā)送C1->服務(wù)器發(fā)回S1->發(fā)送C3->服務(wù)器除去該任務(wù)。如果服務(wù)器任務(wù)已經(jīng)分配完,則過(guò)程如下:發(fā)送C1->服務(wù)器發(fā)回S3->發(fā)送C4、客戶端退出->服務(wù)器除去該客戶端記錄。(b)當(dāng)客戶端算出一個(gè)答案的時(shí)候,采用如下方式發(fā)回答案:發(fā)送C2->服務(wù)器發(fā)回S2,并將該答案記錄。5.3 關(guān)鍵算法設(shè)計(jì)用一個(gè)UML序列圖來(lái)表示服務(wù)器端和

15、客戶端的處理流程,見圖3。圖中包括了本系統(tǒng)中的全部5個(gè)類,其中ClientMain類和SocketClient在客戶端,TaskStore類、ServerCompute類和AsynchronousSocketListener類在服務(wù)器端。其中,ClientMain類是客戶端的主處理程序,ServerCompute是服務(wù)器端的主控制程序,TaskStore類用于存儲(chǔ)任務(wù)信息,SocketClient和AsynchronousSocketListener類實(shí)現(xiàn)了客戶端和服務(wù)器端的通信??蛻舳撕头?wù)器端之間的通信采用了Socket套接字異步通信,這樣當(dāng)服務(wù)器接收到一個(gè)連接時(shí)會(huì)自動(dòng)開辟一個(gè)線程來(lái)處理這

16、個(gè)連接,這對(duì)于多臺(tái)客戶端的情況是非常有效的,保障了系統(tǒng)的相互通信的正常。圖3 系統(tǒng)UML序列圖下面對(duì)系統(tǒng)中的核心分布式算法作設(shè)計(jì)。5.3.1服務(wù)器端首先是任務(wù)和計(jì)算結(jié)果存儲(chǔ)方式。用TaskStore類來(lái)提供任務(wù)和計(jì)算結(jié)果的存儲(chǔ)。public class TaskStoreprivate int TaskStart; /任務(wù)的開始數(shù)字private int TaskEnd; /任務(wù)的結(jié)束數(shù)字private int Pointer; /當(dāng)前分配到的任務(wù)點(diǎn),前面的數(shù)字是已經(jīng)分配了的,后面的是待分配的。private Hashtable ResultHash; /存儲(chǔ)計(jì)算結(jié)果的哈希表private i

17、nt ResultCount; /結(jié)果數(shù)量統(tǒng)計(jì)private DateTime StartTime; /任務(wù)開始的時(shí)間private DateTime EndTime; /任務(wù)結(jié)束的時(shí)間然后在此基礎(chǔ)上用GetResponse()方法根據(jù)客戶端傳過(guò)來(lái)的消息進(jìn)行計(jì)算,以確定返回怎樣的消息。確定了之后將由Socket連接發(fā)送該消息。private static TaskStore ts = new TaskStore(); /用來(lái)存儲(chǔ)所有的任務(wù)和計(jì)算結(jié)果。public static string GetResponse(string Req)switch(Convert.ToChar(Req0) /

18、根據(jù)客戶端發(fā)送過(guò)來(lái)消息的第一個(gè)字判斷消息類別。 case 'N': /客戶端空閑,服務(wù)器向該客戶端發(fā)送任務(wù)。if(ts.IsTaskOver()=true) /如果任務(wù)已經(jīng)全部分配完成,則返回消息S3。ShowResult();ts.EndTimer();return "E" /通知客戶端任務(wù)已經(jīng)全部完成else return "A"+ts.NextTask().ToString();/否則把任務(wù)返回給客戶端,信號(hào)是S1case 'A': /接收到來(lái)自客戶端的答案,服務(wù)器存儲(chǔ)該答案,并向該客戶端發(fā)送信號(hào)S2,表示已經(jīng)收到。

19、Req = Req.Remove(0,1);Req = Req.TrimEnd('$');Console.WriteLine("Answer Received : "+Req.ToString()+" is zishu");ts.StoreResult(Convert.ToInt32(Req);return "R"+Req.ToString();case 'R': /客戶端已經(jīng)接受到任務(wù),服務(wù)器把該任務(wù)從任務(wù)列表中刪去,發(fā)回信號(hào)S4。Req = Req.Remove(0,1);Req = Req.Tri

20、mEnd('$');ts.RemoveTask(Convert.ToInt32(Req);return "0"default: return "0" /end switch /end GetResponse()5.3.2 客戶端客戶端ClientMain中使用一個(gè)循環(huán)來(lái)不斷的向服務(wù)器發(fā)送、接收信息,并解析信號(hào)意義和執(zhí)行服務(wù)器分配的任務(wù)。為了模擬其他長(zhǎng)時(shí)間的計(jì)算過(guò)程,在程序中使用了進(jìn)程休眠100毫秒的方法。具體的消息循環(huán)如下所示:Flag=false;while(flag!=true) /接受一個(gè)服務(wù)器命令string result = S

21、ocketClient.socketSendReceive(host,port,msg); switch(result0)case 'A': /接收到服務(wù)器發(fā)出求解問(wèn)題的信號(hào)S1,比如A13表示求解13是不是質(zhì)數(shù)。int i = Convert.ToInt32(result.Remove(0,1);if( true=ClientMain.IsPrimeNumber(i) ) /如果該數(shù)字是質(zhì)數(shù)。此處可以換成其他的科學(xué)處理方法。msg = "A"+i.ToString()+"$" /通知服務(wù)器這是一個(gè)合法結(jié)果。break;case '

22、;E':/服務(wù)器發(fā)出所有任務(wù)都已經(jīng)完成的信號(hào),客戶端退出程序。flag=true;break;case 'R':/服務(wù)器已經(jīng)收到答案,客戶端繼續(xù)請(qǐng)求新任務(wù)。msg = "N$"break;default:msg = "N$"break;Thread.Sleep(100); /模擬其他長(zhǎng)時(shí)間的計(jì)算過(guò)程。6 實(shí)驗(yàn)結(jié)果、分析和結(jié)論以計(jì)算10000-10300之間的質(zhì)數(shù)為例,結(jié)果列表比較如下:表3 實(shí)驗(yàn)結(jié)果列表求解范圍單機(jī)模式一臺(tái)客戶機(jī)兩臺(tái)客戶機(jī)三臺(tái)客戶機(jī)質(zhì)數(shù)個(gè)數(shù)10000-1030032.8125 秒36.969 秒18.750 秒12.656 秒33個(gè)1000-120021.8750 秒25.343 秒13.32

溫馨提示

  • 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ù)網(wǎng)僅提供信息存儲(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)論