IP多播及編程_第1頁(yè)
IP多播及編程_第2頁(yè)
IP多播及編程_第3頁(yè)
IP多播及編程_第4頁(yè)
IP多播及編程_第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、IP多播(也稱多址廣播或組播)技術(shù),是一種允許一臺(tái)或多臺(tái)主機(jī)(多播源)發(fā)送單一數(shù)據(jù) 包到多臺(tái)主機(jī)(一次的,同時(shí)的)的TCP/IP網(wǎng)絡(luò)技術(shù)。多播作為一點(diǎn)對(duì)多點(diǎn)的通信,是節(jié) 省網(wǎng)絡(luò)帶寬的有效方法之一。在網(wǎng)絡(luò)音頻/視頻廣播的應(yīng)用中,當(dāng)需要將一個(gè)節(jié)點(diǎn)的信號(hào)傳 送到多個(gè)節(jié)點(diǎn)時(shí),無(wú)論是采用重復(fù)點(diǎn)對(duì)點(diǎn)通信方式,還是采用廣播方式,都會(huì)嚴(yán)重浪費(fèi)網(wǎng) 絡(luò)帶寬,只有多播才是最好的選擇。多播能使一個(gè)或多個(gè)多播源只把數(shù)據(jù)包發(fā)送給特定的多 播組,而只有加入該多播組的主機(jī)才能接收到數(shù)據(jù)包。目前,IP多播技術(shù)被廣泛應(yīng)用在網(wǎng) 絡(luò)音頻/視頻廣播、AOD/VOD、網(wǎng)絡(luò)視頻會(huì)議、多媒體遠(yuǎn)程教育、“pus!技術(shù)(如股票行情 等) 和虛擬

2、現(xiàn)實(shí)游戲等方面。一、IP多播技術(shù)簡(jiǎn)介IP多播地址和多播組IP多播通信必須依賴于IP多播地址,在IPv4中它是一個(gè)D類IP地址,范圍從 到55,并被劃分為局部 鏈接多播地址、預(yù)留多播地址和管理權(quán)限多播地址三 類。其中,局部鏈接多播地址范圍在55,這是為路由協(xié)議和其它用途保 留的地址,路由器并不轉(zhuǎn)發(fā)屬于此范圍的IP包;預(yù)留多播地址為55, 可用于全球范圍(如Internet)或網(wǎng)絡(luò)協(xié)議;管理權(quán)限多播地址為55, 可供組織內(nèi)部使用,類

3、似于私有IP地址,不能用于Internet,可限制多播范圍。使用同一個(gè)IP多播地址接收多播數(shù)據(jù)包的所有主機(jī)構(gòu)成了一個(gè)主機(jī)組,也稱為多播組。 一個(gè)多播組的成員是隨時(shí)變動(dòng)的,一臺(tái)主機(jī)可以隨時(shí)加入或離開多播組,多播組成員的數(shù) 目和所在的地理位置也不受限制,一臺(tái)主機(jī)也可以屬于幾個(gè)多播組。此外,不屬于某一個(gè) 多播組的主機(jī)也可以向該多播組發(fā)送數(shù)據(jù)包。IP多播技術(shù)的硬件支持要實(shí)現(xiàn)IP多播通信,要求介于多播源和接收者之間的路由器、集線器、交換機(jī)以及主 機(jī)均需支持IP多播。目前,IP多播技術(shù)已得到硬件、軟件廠商的廣泛支持。(1)主機(jī)支持 IP 多播通信的平臺(tái)包括 Windows CE 2.1、Windows 9

4、5、Windows 98、Windows NT 4 和Windows 2000等,運(yùn)行這些操作系統(tǒng)的主機(jī)都可以進(jìn)行IP多播通信。此外,新生產(chǎn)的網(wǎng) 卡也幾乎都提供了對(duì)IP多播的支持。(2)集線器和交換機(jī)目前大多數(shù)集線器、交換機(jī)只是簡(jiǎn)單地把多播數(shù)據(jù)當(dāng)成廣播來(lái)發(fā)送接收,但一些中、 高檔交換機(jī)提供了對(duì)IP多播的支持。例如,在3COM SuperStack 3 Swith 3300交換機(jī)上可啟 用802.1p或IGMP多播過(guò)濾功能,只為已偵測(cè)到IGMP數(shù)據(jù)包的端口轉(zhuǎn)發(fā)多播數(shù)據(jù)包。(3)路由器多播通信要求多播源節(jié)點(diǎn)和目的節(jié)點(diǎn)之間的所有路由器必須提供對(duì)Internet組管理協(xié)議(IGMP)、多播路由協(xié)議(如

5、PIM、DVMRP等)的支持。當(dāng)一臺(tái)主機(jī)欲加入某個(gè)多播組時(shí),會(huì)發(fā)出主機(jī)成員報(bào)告”的IGMP消息通知多播路由 器。當(dāng)多播路由器接收到發(fā)給那個(gè)多播組的數(shù)據(jù)時(shí),便會(huì)將其轉(zhuǎn)發(fā)給所有的多播主機(jī)。多 播路由器還會(huì)周期性地發(fā)出主機(jī)成員查詢”的IGMP消息,向子網(wǎng)查詢多播主機(jī),若發(fā)現(xiàn)某 個(gè)多播組已沒有任何成員,則停止轉(zhuǎn)發(fā)該多播組的數(shù)據(jù)。此外,當(dāng)支持IGMP v2的主機(jī)(如 Windows 98/2000計(jì)算機(jī))退出某個(gè)多播組時(shí),還會(huì)向路由器發(fā)送一條“離開組”的IGMP消 息,以通知路由器停止轉(zhuǎn)發(fā)該多播組的數(shù)據(jù)。但只有當(dāng)子網(wǎng)上所有主機(jī)都退出某個(gè)多播組 時(shí),路由器才會(huì)停止向該子網(wǎng)轉(zhuǎn)發(fā)該多播組的數(shù)據(jù)。使用多播路由協(xié)

6、議,路由器可建立起從多播源節(jié)點(diǎn)到所有目的節(jié)點(diǎn)的多播路由表,從 而實(shí)現(xiàn)在子網(wǎng)間轉(zhuǎn)發(fā)多播數(shù)據(jù)包。例如,PIM (協(xié)議獨(dú)立多播)就是一種多播路由協(xié)議,它 有兩種類型:稀疏模式(sparse- mode)和密集模式(dense-mode)。以Cisco 2621路由器為 例,啟用IP多播轉(zhuǎn)發(fā)功能的基本設(shè)置如下:c2621(config)# ip multicast-routing啟動(dòng)IP多播,使路由器成為一個(gè)多播路由器c2621(config)# int f0/0配置快速以太網(wǎng)端口 0c2621(config-if)# ip pim dense-mode (或 sparse-mode)啟動(dòng) PIM,同

7、時(shí)激活 IGMP 協(xié)議c2621(config-if)# int f0/1 配置快速以太網(wǎng)端口1c2621(config-if)# ip pim dense-mode (或 sparse-mode)二、IP多播應(yīng)用的編程方法在實(shí)際應(yīng)用中,編程人員通常需要自己編制底層網(wǎng)絡(luò)應(yīng)用程序來(lái)實(shí)現(xiàn)網(wǎng)上的底層通信, 如具體實(shí)現(xiàn)IP多播通信的功能。編制底層網(wǎng)絡(luò)應(yīng)用程序通常要借助于網(wǎng)絡(luò)數(shù)據(jù)通信編程接 口,而在不同的操作系統(tǒng)中所提供的網(wǎng)絡(luò)編程接口是有所不同的,如在Microsoft Windows 環(huán)境下的網(wǎng)絡(luò)編程接口就是Windows套接字(Windows Socket,簡(jiǎn)稱Winsock)。Winsock提供了

8、包括TCP/IP、IPX等多種通信協(xié)議下的編程接口。不同的Windows版本 支持不同的Winsock版本,其中Windows 95等早期版本本身只支持Winsock1.1 (16位)下 的編程(可以通過(guò)安裝相關(guān)的軟件包使其支持Winsock2.0),而Windows98、Windows NT4.0、 Windows 2000 則直接支持 Winsock2.0 (32 位)。Winsock2.0 是 Winsock1.1 的擴(kuò)展,除兼容 Winsock1.1 API夕卜,還定義了一套可支持IP多播的與協(xié)議無(wú)關(guān)的API。使用Winsock 2.0實(shí)現(xiàn)IP多播的一般步驟如下:1.初始化Winsoc

9、k資源在使用 Winsock之前,必須調(diào)用WSAStartup()函數(shù)初始化 Windows Sockets DLL。它允許 應(yīng)用程序或DLL指定Windows Sockets API要求的版本。2.創(chuàng)建套接字調(diào)用WSASocket()函數(shù)可以創(chuàng)建一個(gè)使用UDP協(xié)議的套接字,它是加入多播組的初始 化套接字,并且以后數(shù)據(jù)的發(fā)送和接收都在該套接字上進(jìn)行。針對(duì)IP多播通信,可將參數(shù) dwFlags 設(shè)置為 WSA_FLAG_MULTIPOINT_C_LEAF、 WSA_FLAG_MULTIPOINT_D_LEAF 和 WSA_FLAG_OVERLAPPED的位和,指明IP多播通信在控制層面和數(shù)據(jù)層面

10、都是“無(wú)根的”, 只存在葉節(jié)點(diǎn),它們可以任意加入一個(gè)多播組,而且從一個(gè)葉節(jié)點(diǎn)發(fā)送的數(shù)據(jù)會(huì)傳送到每一 個(gè)葉節(jié)點(diǎn)(包括它自己);創(chuàng)建的套接字具有重疊屬性。設(shè)置套接字的選項(xiàng)調(diào)用setsockopt(函數(shù)為套接字設(shè)置SO_REUSEADDR選項(xiàng),以允許套接字綁扎到一個(gè)已 在使用的地址上。綁定套接字調(diào)用bind()函數(shù)綁定套接字,從而將創(chuàng)建好的套接字與本地地址和本地端口聯(lián)系起來(lái)。 對(duì)于多播通信來(lái)說(shuō),發(fā)送和接收數(shù)據(jù)通常采用同一個(gè)端口。設(shè)置多播套接字的模式WSAIoctl()函數(shù)的命令碼SIO_MULTICAST_LOOP用來(lái)允許或禁止多播通信時(shí)發(fā)送出去的 通信流量是否也能夠在同一個(gè)套接字上被接收(即多播返

11、回)。值得注意的是,在Windows 95/98/NT 4中,默認(rèn)是允許多播返回,但不能設(shè)置禁止,否則會(huì)出錯(cuò);只有在Windows 2000 以上版本中,才能設(shè)置允許/禁止多播返回。WSAIoctl()函數(shù)的命令碼SIO_MULTICAST_SCOPE用來(lái)設(shè)置多播傳播的范圍,即生存時(shí)間 TTL。每當(dāng)多播路由器轉(zhuǎn)發(fā)多播數(shù)據(jù)包時(shí),數(shù)據(jù)包中的TTL值都會(huì)被減1,若數(shù)據(jù)包的TTL 減少到0,則路由器將拋棄該數(shù)據(jù)包。TTL的值是多少,多播數(shù)據(jù)便最多能經(jīng)過(guò)多少個(gè)多播 路由器。例如,TTL值為0,則多播只能在本地主機(jī) 的多個(gè)套接字間傳播,而不能傳播到網(wǎng) 線”上;TTL值為1 (默認(rèn)值),則多播數(shù)據(jù)遇到第一個(gè)

12、路由器,便會(huì)被它無(wú)情”地丟棄,不 允許傳出本地網(wǎng)絡(luò)之外,即只有同一個(gè)網(wǎng)絡(luò)內(nèi)的多播組成員才能收到多播數(shù)據(jù)。加入一個(gè)多播組調(diào)用WSAJoinLeaf()函數(shù)可加入一個(gè)多播組并指定角色(發(fā)送者/接收者)。 調(diào)用時(shí),參數(shù)dwFlags可指定套接字作為發(fā)送者(JL_SENDER_ONLY)、接收者 (JL_RECEIVER_ONLY)或身兼兩者(JL_BOTH)。調(diào) 用成功后會(huì)返回一個(gè)多播套 接字,調(diào)用closesocket()函數(shù)關(guān)閉該套接字就離開了多播組,此時(shí)可以調(diào)用 WSAJoinLeaf()函數(shù)再次加入多 播組。注意,對(duì)多播組數(shù)據(jù)的接收和發(fā)送不能在 該套接字上完成。向多播組發(fā)送數(shù)據(jù)調(diào)用sendt

13、o()函數(shù),可在指定的UDP套接字上向指定的多播組發(fā)送多播數(shù) 據(jù)。調(diào)用時(shí),參數(shù)to應(yīng)指向多播組的IP地址。值得注意的是,若一個(gè)應(yīng)用程序 只是打算給多播組發(fā)送數(shù)據(jù),便不必加入一個(gè)多播組。8 .等待事件調(diào)用WSAAsyncSelect ()函數(shù),使套接字置于非阻塞模式,這時(shí)應(yīng)用程序就 可在該套接字上接收以Windows消息為基礎(chǔ)的網(wǎng)絡(luò)事件通知。例如,若參數(shù) lEvent值為FD_READ,則應(yīng)用程序可在套接字上接收到“數(shù)據(jù)正等待被讀入”的 通知。從多播組接收數(shù)據(jù)調(diào)用recvfrom函數(shù),可在指定的UDP套接字上讀取輸入數(shù)據(jù)。多播通信中 數(shù)據(jù)的發(fā)送與接收一般采用同一個(gè)端口,因此其發(fā)送套接字和接收套接

14、字是一樣 的。關(guān)閉套接字,釋放Winsock資源。在多播通信結(jié)束后,先調(diào)用closesocket()函數(shù)關(guān)閉多播套接字和UDP套接 字,然后調(diào)用WSACleanup ()函數(shù)結(jié)束對(duì)Windows Sockets DLL的使用。三、應(yīng)用實(shí)例為了說(shuō)明IP多播技術(shù)的應(yīng)用方法,本人在Visual C+.NET環(huán)境下設(shè)計(jì)了一 個(gè)簡(jiǎn)單的基于Windows Socket 2的IP多播應(yīng)用程序,通過(guò)該例子讀者可以掌握 IP多播應(yīng)用程序設(shè)計(jì)的一般方法。該程序的具體設(shè)計(jì)方法如下:在Visual Studio.NET中建立一個(gè)基于對(duì)話框的MFC項(xiàng)目 CMulticastSocket。注意在“高級(jí)功能”設(shè)置中不要選擇

15、“Windows套接字”, 這是因?yàn)镸FC只支持Windows Socket 1而不支持Windows Socket 2。為了能使 用Winsock 2 API編程,在程序中應(yīng)包含“winsock2.h”頭文件,并在項(xiàng)目中加 入ws2_32.lib的靜態(tài)庫(kù),該靜態(tài)庫(kù)應(yīng)設(shè)置在項(xiàng)目屬性的“鏈接器” “輸 入” “附加依賴項(xiàng)”中。在對(duì)話框(類名CCMulticastSocketDlg)資源中,設(shè)置它的Caption為 “WinSock 2多播應(yīng)用程序”,并添加以下控件:靜態(tài)文本:Caption為“接收到的信息:”;編輯框:ID 為 IDC_RECEIVE_EDIT,Read Only、Auto Vs

16、croll、Vertical Scroll 和Multiline屬性值都為True靜態(tài)文本:Caption為“發(fā)送的信息:”編輯框:ID 為 IDC_SEND_EDIT第一個(gè)按鈕:Caption為“加入多播組(&J)”,ID為IDC_JOIN_BUTTON 第二個(gè)按鈕:Caption 為“多播發(fā)送(&S)”,ID 為 IDC_SEND_BUTTON 第三個(gè)按鈕:Caption為“離開多播組(&L)”,ID為IDC_LEAVE_BUTTON第四個(gè)按鈕:Caption 為“退出(&Q)”,ID 為 IDC_QUIT_BUTTON為兩個(gè)編輯框分別添加相關(guān)聯(lián)的CString類型的變量m_SendMes

17、sage和 m_ReceiveMessage;為四個(gè)按鈕添加相應(yīng)的消息處理函數(shù);為對(duì)話框添加定時(shí)器 消息(用于定時(shí)顯示接收到的消息)及其消息處理函數(shù)。添加一個(gè)新的對(duì)話框資源,設(shè)置它的Caption為“加入多播組”,保留 默認(rèn)的兩個(gè)按鈕控件,同時(shí)添加添加以下控件:靜態(tài)文本:Caption為“IP多播組地址:”編輯框:ID 為 IDC_IPADDRESS_EDIT靜態(tài)文本:Caption為“IP多播端口:”編輯框:ID 為 IDC_PORT_EDIT靜態(tài)文本:Caption為“生存時(shí)間:”編輯框:ID 為 IDC_TTL_EDIT復(fù)選框:Caption 為“多播返回:”,ID 為 IDC_LOOP

18、BACK_CHECK,Left Text 屬性值為True。為該對(duì)話框添加新的類CJoinGroupDlg,它的基類為CDialog,然后為該對(duì) 話框中的三個(gè)編輯框分別添加相關(guān)聯(lián)的變量,即 CSting m_IPAddress、UINT m_nPort、UINT m_nTTL;為復(fù)選框 添加相關(guān)聯(lián)的BOOL類型的變量m_Loopback。在 CMulticastSocketDlg.h 文件的前面添加 CJoinGroupDlg 的頭文件: #include “JoinGroupDlg.h”,并在 CCMulticastSocketDlg 類中添加了一個(gè) CJoinGroupDlg 類實(shí)例對(duì)象

19、m_JoinDlg。為了能在對(duì)話框中接收網(wǎng)絡(luò)事件通知,應(yīng)增加一個(gè)用戶自定義的消息及 消息處理函數(shù),具體實(shí)現(xiàn)方法如下:在CMulticastSocketDlg.h文件的前面自 定義消息:#define WM_SOCK_MSG(WM_USER+166),并在 afx_msg 塊中說(shuō)明消息處 理函數(shù):afx_msg LRESULT OnSocketMsg (WPARAM wParam,LPARAM lParam);在 CMulticastSocketDlg.cpp文件中的消息映射塊中,使用ON_MESSAGE (WM_SOCK_MSG,OnSocketMsg )宏指令將消息映射到消息處理函數(shù)中,并具

20、體實(shí)現(xiàn) 消息處理函數(shù):LRESULT CCMulticastSocketDlg: OnSocketMsg(WPARAM wParam,LPARAM lParam)。該程序的主要代碼可參見程序清單,相關(guān)函數(shù)的詳細(xì)說(shuō)明可參看Microsoft MSDN 幫助系統(tǒng)。為了節(jié)省篇幅,程序中省略了部分自動(dòng)生成的和用于錯(cuò)誤處理的代碼。程序清單: / CMulticastSocketDlg.cpp :實(shí)現(xiàn)文件#include stdafx.h”#include winsock2.h#include CMulticastSocket.h”#include CMulticastSocketDlg.h”DWORD

21、cbRet;SOCKET Sock,SockM; HYPERLINK file:/UDP file:/UDP 套接字,多播套接字BOOL bFlag,bJoin;SOCKADDR_IN local,Remote,From; file:/分別指向本地、多播組和數(shù)據(jù)來(lái)源的IP地址與端口int Fromlen;char ReceiveBuf32000; file:/接收緩沖區(qū)BOOL bDataReceived;BEGIN_MESSAGE_MAP(CCMulticastSocketDlg, CDialog)ON_BN_CLICKED(IDC_JOIN_BUTTON, OnBnClickedJoinB

22、utton)ON_BN_CLICKED(IDC_LEAVE_BUTTON, OnBnClickedLeaveButton)ON_BN_CLICKED(IDC_QUIT_BUTTON, OnBnClickedQuitButton)ON_BN_CLICKED(IDC_SEND_BUTTON, OnBnClickedSendButton)ON_WM_TIMER()ON_MESSAGE(WM_SOCK_MSG,OnSocketMsg)END_MESSAGE_MAP()BOOL CCMulticastSocketDlg:OnInitDialog()(CDialog:OnInitDialog();SetT

23、imer(1,100,NULL); file:/設(shè)置定時(shí)器Fromlen=sizeof(From);bDataReceived二TRUE;bJoin=FALSE;return TRUE; /除非設(shè)置了控件的焦點(diǎn),否則返回TRUE void CCMulticastSocketDlg:OnBnClickedJoinButton() file:/加入多播組 (if(m_JoinDlg.DoModal()=IDOK)(WORD wVersionRequested;WSADATA wsaData;int北京中慶;wVersionRequested = MAKEWORD(2,2);北京中慶=WSAStar

24、tup(wVersionRequested, &wsaData); file:/初始化WinSock2 資源if(北京中慶!二0)(AfxMessageBox(不能加載Windows套接字動(dòng)態(tài)鏈接庫(kù),MB_OK);return;if (LOBYTE(wsaData.wVersion) !=2 | HIBYTE(wsaData.wVersion) !=2)(AfxMessageBox(WinSock DLL 不支持 2.0 版本,MB_OK);WSACleanup();return;file:/創(chuàng)建一個(gè)套接字Sock二WSASocket(AF_INET,SOCK_DGRAM,IPPROTO_UD

25、P,(LPWSAPROTOCOL_INFO)NULL,0,WSA_FLAG_OVERLAPPED| WSA_FLAG_MULTIPOINT_C_LEAF|WSA_FLAG_MULTIPOINT_D_LEAF);bFlag=TRUE; file:/設(shè)置套接字選項(xiàng),使套接字為可重用端口地址 setsockopt(Sock,SOL_SOCKET,SO_REUSEADDR,(char*)&bFlag,sizeof(bFlag);file:/將套接字綁定到用戶指定端口及默認(rèn)的接口memset(&local,0,sizeof(local);local.sin_family=AF_INET;local.si

26、n_port=htons(USHORT)m_JoinDlg.m_nPort);local.sin_addr.s_addr=htonl(INADDR_ANY);bind(Sock,(struct sockaddr FAR *)&local,sizeof(local);file:/設(shè)置多播數(shù)據(jù)報(bào)傳播范圍(生存時(shí)間TTL)WSAIoctl(Sock,SIO_MULTICAST_SCOPE,&m_JoinDlg.m_nTTL,sizeof(int),NULL,0,&cbRet,NULL,NULL);file:/設(shè)置多播返回(LOOKBACK)BOOL nLoopBack=m_JoinDlg.m_Loo

27、pback;WSAIoctl(Sock,SIO_MULTIPOINT_LOOPBACK,&nLoopBack,sizeof(nLoopBack),NULL,0,&cbRet,NULL,NULL);memset(&Remote,0,sizeof(Remote);Remote.sin_family=AF_INET;Remote.sin_addr.s_addr=inet_addr(m_JoinDlg.m_IPAddress);Remote.sin_port=htons(m_JoinDlg.m_nPort);file:/加入到指定的多播組,并指定為既作為發(fā)送者又作為接收者(JL_BOTH)SockM二WSAJoinLeaf(Sock,(sockaddr*)&Remote,sizeof(Remote),NULL,NULL,NULL,NULL,JL_BOTH);WSAAsyncSelect(Sock,m_hWnd,WM_SOCK_MSG,FD_READ); file:/注冊(cè)網(wǎng)絡(luò)消息 及其網(wǎng)絡(luò)事件bJoin=TRUE; void CCMulticastSocketDlg:OnBnClickedSendButton() file:/多播發(fā)送(if(bJoin)(UpdateData(TRUE);const

溫馨提示

  • 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論