VisualC++網(wǎng)絡(luò)編程案例實(shí)戰(zhàn)之FTP客戶端_第1頁(yè)
VisualC++網(wǎng)絡(luò)編程案例實(shí)戰(zhàn)之FTP客戶端_第2頁(yè)
VisualC++網(wǎng)絡(luò)編程案例實(shí)戰(zhàn)之FTP客戶端_第3頁(yè)
VisualC++網(wǎng)絡(luò)編程案例實(shí)戰(zhàn)之FTP客戶端_第4頁(yè)
VisualC++網(wǎng)絡(luò)編程案例實(shí)戰(zhàn)之FTP客戶端_第5頁(yè)
已閱讀5頁(yè),還剩46頁(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)介

第4章FTP客戶端本章將帶著大家編寫一個(gè)簡(jiǎn)單的FTP客戶端程序,實(shí)現(xiàn)簡(jiǎn)單的功能:登錄FTP效勞器,處理效勞器上的文件,如上傳、下載,最后平安退出效勞器。先弄清楚原理,然后我們?cè)倏紤]怎樣去實(shí)現(xiàn)。4.1

FTP工作原理FTP的工作原理跟TCP一樣,客戶端需要先與效勞器連接,等待效勞器的應(yīng)答,最后再建立數(shù)據(jù)通道。所以,F(xiàn)TP瀏覽器在和效勞器建立連接時(shí)也需要經(jīng)過(guò)“三次握手”的過(guò)程。這表示客戶端與效勞器之間的連接是可靠、平安的,這也為數(shù)據(jù)傳輸提供了可靠的保證。FTP的工作原理如圖4.1所示。圖4.1FTP工作原理圖4.1.1FTP數(shù)據(jù)結(jié)構(gòu)進(jìn)行FTP編程之前,用戶首先需要知道FTP有哪些數(shù)據(jù)結(jié)構(gòu)。由于在某些主機(jī)上保存的文件是面向字節(jié)的,某些是面向記錄的。所以在FTP中,除了有不同的數(shù)據(jù)類型以外,還有幾種不同的文件結(jié)構(gòu)類型。這樣做的目的是為了在不同的主機(jī)之間傳送文件時(shí)能夠相互識(shí)別。二進(jìn)制結(jié)構(gòu):文件中沒(méi)有內(nèi)部結(jié)構(gòu),一般被看作二進(jìn)制流。文件式結(jié)構(gòu):由許多記錄組成的文件。頁(yè)面結(jié)構(gòu):由不同的索引頁(yè)組成文件。注意:一般情況下,如果沒(méi)有使用FTP命令去設(shè)置文件的結(jié)構(gòu),那么默認(rèn)的結(jié)構(gòu)是文件式結(jié)構(gòu)。4.1.2FTP數(shù)據(jù)傳輸模式在FTP的數(shù)據(jù)傳輸中,傳輸模式將決定文件數(shù)據(jù)會(huì)以什么方式被發(fā)送出去。一般情況下,網(wǎng)絡(luò)傳輸模式有3種:將數(shù)據(jù)格式化后傳送、壓縮后傳送、不做任何處理進(jìn)行傳送。當(dāng)然不管用什么模式進(jìn)行傳送,在數(shù)據(jù)的結(jié)尾處都是以EOF結(jié)束。在FTP中定義的傳輸模式有以下幾種。1.二進(jìn)制模式二進(jìn)制模式就是將發(fā)送數(shù)據(jù)的內(nèi)容轉(zhuǎn)換為二進(jìn)制表示后再進(jìn)行傳送。這種傳輸模式下沒(méi)有數(shù)據(jù)結(jié)構(gòu)類型的限制。在二進(jìn)制結(jié)構(gòu)中,發(fā)送方發(fā)送完數(shù)據(jù)后,會(huì)在關(guān)閉連接時(shí)標(biāo)記EOF。如果是文件結(jié)構(gòu),EOF被表示為雙字節(jié)。其中第一個(gè)字節(jié)為0,而控制信息包含在后一個(gè)字節(jié)內(nèi)。本書中如無(wú)特別說(shuō)明,均采用該模式進(jìn)行傳輸數(shù)據(jù)。2.文件模式文件模式就是以文件結(jié)構(gòu)的形式進(jìn)行數(shù)據(jù)傳輸。文件結(jié)構(gòu)是指用一些特定標(biāo)記來(lái)描述文件的屬性以及內(nèi)容。一般情況下,文件結(jié)構(gòu)都有自己的信息頭,其中包括計(jì)數(shù)信息和描述信息。信息頭大多以結(jié)構(gòu)體的形式出現(xiàn)。計(jì)數(shù)信息:計(jì)數(shù)指明了文件結(jié)構(gòu)中的字節(jié)總數(shù)。描述信息:描述信息是負(fù)責(zé)對(duì)文件結(jié)構(gòu)中的一些數(shù)據(jù)進(jìn)行描述。例如,其中的數(shù)據(jù)校驗(yàn)標(biāo)記是為了在不同主機(jī)間交換特定的數(shù)據(jù)時(shí),不管本地文件是否發(fā)生錯(cuò)誤都進(jìn)行發(fā)送。但在發(fā)送時(shí)發(fā)送方需要給出校驗(yàn)碼,以確定數(shù)據(jù)發(fā)送到接收方時(shí)的完整性、準(zhǔn)確性。在文件結(jié)構(gòu)中,既可以用記錄結(jié)構(gòu),也可以用相對(duì)應(yīng)的數(shù)據(jù)表示。文件的信息頭結(jié)構(gòu)如表4.1所示。表4.1文件的信息頭結(jié)構(gòu)描述信息是由字節(jié)中的位特定標(biāo)記值來(lái)說(shuō)明。列舉幾個(gè)特定標(biāo)記值及其意義,如表4.2所示。文件信息頭計(jì)數(shù)信息大小文件信息頭描述信息大小計(jì)數(shù)信息占16位字節(jié)描述信息占8位字節(jié)表4.2特定標(biāo)記值及意義由表4.2可知,描述信息中可能存在多個(gè)標(biāo)記值,所以必須將需要用到的標(biāo)記都進(jìn)行設(shè)置。標(biāo)

值意

義64表示文件的結(jié)束符標(biāo)記EOF32表示文件中有可疑錯(cuò)誤16表示具有重發(fā)標(biāo)記的文件3.壓縮模式在這種模式下,需要傳送的信息包括一般數(shù)據(jù)、壓縮數(shù)據(jù)和控制命令。一般數(shù)據(jù):以字節(jié)的形式進(jìn)行傳送。壓縮數(shù)據(jù):包括數(shù)據(jù)副本和數(shù)據(jù)過(guò)濾器??刂泼睿河脙蓚€(gè)轉(zhuǎn)義字符進(jìn)行傳送。注意:此種傳輸模式請(qǐng)參考其他相關(guān)書籍,本書不再進(jìn)行深入講解。在FTP數(shù)據(jù)傳輸時(shí),發(fā)送方必須把數(shù)據(jù)轉(zhuǎn)換為文件結(jié)構(gòu)指定的形式再傳送出去,而接收方那么相反。因?yàn)檫M(jìn)行這樣的轉(zhuǎn)換很慢,所以一般在相同的系統(tǒng)中傳送文本文件時(shí)都采用二進(jìn)制流表示比較適宜。4.1.3與效勞器進(jìn)行連接FTP客戶端需要與效勞器連接成功后,才能進(jìn)行文件數(shù)據(jù)的傳輸。當(dāng)連接時(shí),客戶端需要用戶指定端口、連接模式等操作。1.連接所使用的端口在連接端口的使用上,F(xiàn)TP與HTTP不同。因?yàn)镕TP在與效勞器連接時(shí)需要用到兩個(gè)端口:其中一個(gè)端口〔FTP的默認(rèn)端口是21〕作為控制連接端口,它主要用于發(fā)送命令給效勞器以及等待效勞器的響應(yīng);另一個(gè)端口是數(shù)據(jù)傳輸端口,端口號(hào)為20或者任意有效端口號(hào),用來(lái)建立數(shù)據(jù)傳送通道。2.連接模式FTP客戶端連接效勞器的模式有兩種:PORT模式和PASV模式。PORT模式:PORT是主動(dòng)模式。當(dāng)客戶端選擇這種模式與效勞器進(jìn)行連接的時(shí)候,它需要向效勞器提供一個(gè)IP地址和一個(gè)端口號(hào)。PASV模式:PASV是被動(dòng)模式。中選擇這種模式連接時(shí),效勞器需要提供給客戶端一個(gè)IP地址和一個(gè)端口號(hào)。用戶平時(shí)從網(wǎng)上一個(gè)指定的FTP地址和端口下載文件就是這種模式的一種實(shí)際應(yīng)用,相反那么為PORT模式。注意:在本章中如無(wú)特別說(shuō)明,所選用的連接模式均是被動(dòng)模式。4.1.4登錄驗(yàn)證在連接FTP效勞器成功之后,用戶需要發(fā)送相關(guān)命令或者是數(shù)據(jù)流到效勞器進(jìn)行身份驗(yàn)證或其他操作。在本章的小節(jié)中,給出了一些常用的FTP命令。1.登錄方式在登錄FTP時(shí),登錄方式有匿名登錄、代理登錄或者是通過(guò)用戶名登錄等。各種登錄方式的不同在于訪問(wèn)文件的權(quán)限〔只讀、只寫或者讀寫〕,這也是FTP的一個(gè)重要特點(diǎn)。注意:在本章中涉及到的登錄方式主要是以用戶名登錄為主。2.驗(yàn)證客戶端將用戶名和密碼以命令的方式發(fā)送到效勞器進(jìn)行驗(yàn)證,例如,用戶名為“l(fā)ymlrl”,密碼為“123456”的用戶在進(jìn)行驗(yàn)證時(shí),將其轉(zhuǎn)換成命令流:“USER”+lymlrl+“PASS”+123456;這個(gè)命令將作為字符串被發(fā)送到效勞器,這個(gè)工作是通過(guò)CArchive等類中的函數(shù)實(shí)現(xiàn)的〔具體內(nèi)容將在4.3節(jié)中講解〕。效勞器在驗(yàn)證之后會(huì)返回結(jié)果給客戶端。如果返回值的第一個(gè)數(shù)字為1、2或者是3,那么表示返回值正確,否那么發(fā)生錯(cuò)誤。然后提取當(dāng)前位置的下一條命令值,如果為EROR表示出現(xiàn)用戶名或密碼錯(cuò)誤;為SUSS那么表示驗(yàn)證成功。4.1.5關(guān)閉數(shù)據(jù)連接通常情況下,效勞器只負(fù)責(zé)進(jìn)行數(shù)據(jù)連接,并對(duì)它進(jìn)行初始化和關(guān)閉。除非客戶端在命令控制中主動(dòng)要求關(guān)閉連接時(shí),效勞器才會(huì)關(guān)閉連接。當(dāng)然效勞器也會(huì)在以下情況下關(guān)閉數(shù)據(jù)連接。當(dāng)效勞器發(fā)送數(shù)據(jù)結(jié)束時(shí),會(huì)通過(guò)EOF終止傳送;客戶端發(fā)送ABORT命令;客戶端改變了端口號(hào);控制連接通道被關(guān)閉;傳輸過(guò)程中發(fā)生嚴(yán)重錯(cuò)誤。但是,在一般情況下客戶端與效勞器之間的連接都是在數(shù)據(jù)正常處理完成以后關(guān)閉的。4.1.6FTP常用命令在實(shí)際編程中,有些復(fù)雜的操作,只是需要客戶端發(fā)送相關(guān)的指令到效勞器執(zhí)行即可。所以,對(duì)于用戶來(lái)說(shuō)掌握常用的FTP命令是非常重要的。下面列舉了一些常用的FTP命令,如表4.3所示。表4.3常用FTP命令及意義在表4.3中,已經(jīng)列舉了局部常用的FTP命令。通常情況下,客戶端通過(guò)CArchive類的成員函數(shù)WriteString()可以將這些命令以字符串的形式發(fā)送到效勞器執(zhí)行。然后,客戶端使用CArchive類的成員函數(shù)ReadString()來(lái)獲取效勞器返回的數(shù)據(jù)。關(guān)于這兩個(gè)函數(shù)的一些用法將在下一節(jié)實(shí)例中進(jìn)行講解。FTP命令意

義LIST發(fā)送當(dāng)前工作目錄下的文件名列表到客戶端PWD顯示服務(wù)器的當(dāng)前工作目錄名RETR從服務(wù)器下載一個(gè)文件STOR上傳文本文件到服務(wù)器,如果文件存在會(huì)被覆蓋STOU上傳文本文件到服務(wù)器,但不會(huì)覆蓋已經(jīng)存在的文件STRU設(shè)置文件的結(jié)構(gòu)MODE指定數(shù)據(jù)的傳輸模式ABORT通知服務(wù)器關(guān)閉連接4.1.7數(shù)據(jù)校驗(yàn)與重發(fā)控制FTP是屬于TCP/IP簇中的一種具體應(yīng)用,所以FTP也具有數(shù)據(jù)重發(fā)機(jī)制。但在FTP中,數(shù)據(jù)重發(fā)僅用于文件和壓縮模式。一般情況下,重發(fā)機(jī)制都要求發(fā)送者在發(fā)送數(shù)據(jù)時(shí)參加特定標(biāo)記來(lái)描述數(shù)據(jù)的重要信息。并且該標(biāo)記只針對(duì)發(fā)送者有意義,其內(nèi)容大多是用來(lái)校驗(yàn)數(shù)據(jù)的完整性。特定標(biāo)記可以表示任何可以標(biāo)記的屬性或其他信息。如果接收方也支持重發(fā)機(jī)制,那么接收方系統(tǒng)中將會(huì)保存這一特定標(biāo)記。當(dāng)系統(tǒng)重新啟動(dòng)或者其他原因造成系統(tǒng)重啟,用戶均可以根據(jù)原來(lái)的標(biāo)記繼續(xù)傳送數(shù)據(jù)。其實(shí),用戶經(jīng)常用到的斷點(diǎn)續(xù)傳就是很好的一個(gè)例子。當(dāng)接收方收到一段數(shù)據(jù)后,記下標(biāo)記,如果傳送過(guò)程中出現(xiàn)錯(cuò)誤,那么發(fā)送方將會(huì)從這個(gè)標(biāo)記點(diǎn)重新傳送數(shù)據(jù)。4.2FTP客戶端實(shí)例接下來(lái)我將帶著大家一步步完成FTP客戶端的編寫,畢竟這才是本章最主要局部。4.2.1創(chuàng)立工程創(chuàng)立基于對(duì)話框的應(yīng)用程序,命名為FTP_client。程序的界面設(shè)計(jì)及各個(gè)關(guān)鍵控件的ID如圖4.2所示。圖4.2客戶端程序界面及控件ID局部控件關(guān)聯(lián)的變量如圖4.3所示。圖4.3局部控件ID及關(guān)聯(lián)的變量為類CFTP_clientDlg定義兩個(gè)公有的成員變量,如下:4.2.2連接和登陸驗(yàn)證用戶需要通過(guò)客戶端來(lái)連接FTP效勞器,然后登錄。這樣才能對(duì)FTP效勞器上的文件進(jìn)行操作。1.實(shí)現(xiàn)連接和登陸驗(yàn)證添加“連接效勞器”按鈕的消息響應(yīng)函數(shù)OnConnect(),代碼如下:用戶使用該軟件時(shí)首先應(yīng)該填寫主機(jī)、端口、用戶名和密碼信息,便于與指定的效勞器連接,然后完成登陸驗(yàn)證。連接和登陸的驗(yàn)證過(guò)程如圖4.4所示。圖4.4連接和登陸驗(yàn)證過(guò)程示意圖響應(yīng)函數(shù)OnConnect()用到了MFC中的類CSocket的對(duì)象sock_client,它的大局部功能繼承自類CAsyncSocket,實(shí)際上代碼中sock_client對(duì)象調(diào)用的函數(shù)都繼承自CAsyncSocket。功能實(shí)現(xiàn)過(guò)程:〔1〕調(diào)用成員函數(shù)Create()創(chuàng)立了socket,用于向效勞器發(fā)送命令和接收來(lái)自FTP效勞器的響應(yīng)。〔2〕調(diào)用成員函數(shù)Connect()連接FTP效勞器,需要向函數(shù)提供FTP效勞器的IP和端口號(hào)?!?〕調(diào)用我們自己將要封裝的2個(gè)函數(shù)MySockSend()和MySockRecv(),發(fā)送用戶名和密碼,并接收來(lái)自FTP效勞器的響應(yīng)。〔4〕禁用相關(guān)的文本編輯框和按鈕,防止用戶再做修改困擾我們的程序。2.封裝發(fā)送命令函數(shù)為類CFTP_clientDlg添加公有成員函數(shù)MySockSend(),用于發(fā)送命令信息,代碼如下:函數(shù)MySockSend()以發(fā)送的命令為參數(shù),功能包括:調(diào)用類CSocket的成員函數(shù)Send()發(fā)送命令;添加命令到ListBox上,方便用戶知道程序做了什么,這里用到了類CListBox的成員函數(shù)AddString()。3.封裝接收響應(yīng)函數(shù)為類CFTP_clientDlg添加公有成員函數(shù)MySockRecv(),用于接收來(lái)自FTP效勞器的響應(yīng)消息,代碼如下:函數(shù)MySockRecv()沒(méi)有參數(shù),功能包括:調(diào)用類CSocket的成員函數(shù)Receive()接收來(lái)自FTP效勞器的響應(yīng)消息;添加響應(yīng)消息到ListBox上,方便用戶知道效勞器的應(yīng)答。程序連接FTP效勞器的運(yùn)行效果如圖4.5所示。圖4.5程序連接FTP效勞器的運(yùn)行效果4.2.3更新文件列表客戶端可以發(fā)送命令LIST到FTP效勞器,效勞器會(huì)告知客戶端:用戶的根目錄下到底有哪些文件。文件的信息是通過(guò)客戶端與效勞器端建立的數(shù)據(jù)連接傳送的,傳完連接會(huì)被關(guān)閉。1.讓效勞器進(jìn)入被動(dòng)模式〔PASV〕在主動(dòng)模式〔PORT〕下,F(xiàn)TP的客戶端只是告訴效勞器自己的端口號(hào),讓效勞器來(lái)連接客戶端指定的端口。對(duì)于客戶端的防火墻來(lái)說(shuō),這是從外部到內(nèi)部的連接,可能會(huì)被阻塞。為了解決效勞器發(fā)起到客戶的連接問(wèn)題,有了另一種FTP連接方式,即被動(dòng)方式。命令連接和數(shù)據(jù)連接都由客戶端發(fā)起,這樣就解決了從效勞器到客戶端的數(shù)據(jù)端口的連接被防火墻過(guò)濾的問(wèn)題。下面我們要在類CFTP_clientDlg中添加公有的成員函數(shù)Pasv_mode(),用來(lái)實(shí)現(xiàn)這一功能,函數(shù)封裝如下:雖然代碼看起來(lái)有些多〔至少我這么認(rèn)為〕,但客戶端和效勞器端的交互還是很簡(jiǎn)單的,如圖4.6所示。圖4.6客戶端和效勞器端的交互但函數(shù)Pasv_mode()實(shí)現(xiàn)的功能還是比較簡(jiǎn)單的:〔1〕發(fā)送命令讓FTP效勞器進(jìn)入被動(dòng)模式〔PASV〕,效勞器會(huì)新開(kāi)一個(gè)端口號(hào)等待客戶端的連接。〔2〕從效勞器返回的響應(yīng)中取出數(shù)據(jù),然后計(jì)算端口號(hào)?!?〕客戶端創(chuàng)立一個(gè)臨時(shí)的套接字sock_temp連接效勞器新開(kāi)的端口。2.更新列表添加“更新文件列表”按鈕的消息響應(yīng)函數(shù)OnUpdate(),代碼如下:響應(yīng)函數(shù)OnUpdate()功能的實(shí)現(xiàn)過(guò)程:調(diào)用我們之前封裝的函數(shù)Pasv_mode使效勞器進(jìn)入被動(dòng)模式,再向效勞器發(fā)送LIST命令,用新建立的連接接收文件信息數(shù)據(jù)〔封裝在了函數(shù)Parse_list()中〕,接收到的數(shù)據(jù)信息如圖4.7所示。最后關(guān)閉數(shù)據(jù)連接。圖4.7由數(shù)據(jù)連接接收的文件信息在類CFTP_clientDlg中添加公有的成員函數(shù)Parse_list(),實(shí)現(xiàn)解析文件信息,獲取文件列表的功能,代碼如下:函數(shù)Parse_list()功能的實(shí)現(xiàn)過(guò)程:用臨時(shí)的數(shù)據(jù)連接sock_temp接收數(shù)據(jù)〔文件信息〕,從數(shù)據(jù)中篩選出文件名,添加到文件名列表中。文件信息的每一行由“\r\n”結(jié)束,每行的各個(gè)信息由空格“”連接,文件名放在最后。我是依據(jù)以上特征遍歷信息查找到文件名的。程序窗口“更新文件列表”按鈕的運(yùn)行效果如圖4.8所示。圖4.8單擊“更新文件列表”按鈕的運(yùn)行效果4.2.4文件上傳添加“文件上傳”按鈕的消息響應(yīng)函數(shù)OnStorefile(),實(shí)現(xiàn)選擇文件上傳到效勞器的功能,代碼如下:用戶單擊“文件上傳”按鈕后,會(huì)首先彈出文件“翻開(kāi)”對(duì)話框,用戶選擇要上傳的文件,單擊確定,由客戶端完成與效勞器接下來(lái)的交互如圖4.9所示〔假定用戶選擇了know1.txt文件〕。圖4.9客戶端上傳文件時(shí)與效勞器的交互過(guò)程響應(yīng)函數(shù)OnStorefile()的實(shí)現(xiàn)過(guò)程:〔1〕彈出“翻開(kāi)”文件對(duì)話框,供用戶從中選擇需要上傳的文件?!?〕使FTP效勞器進(jìn)入被動(dòng)模式,建立數(shù)據(jù)連接〔在Pasv_mode()函數(shù)中完成〕,向效勞器發(fā)送上傳文件的命令〔STOR文件名〕.〔3〕客戶端翻開(kāi)文件讀取其內(nèi)容,依靠數(shù)據(jù)連接傳輸內(nèi)容,文件傳輸結(jié)束時(shí)關(guān)閉文件和連接,彈出“上傳完畢”的提示信息對(duì)話框。單擊程序“文件上傳”按鈕的運(yùn)行效果如圖4.10所示。圖4.10程序“文件上傳”按鈕的運(yùn)行效果4.2.5文件下載用戶可以通過(guò)兩種操作來(lái)實(shí)現(xiàn)“文件下載”的功能:雙擊效勞器文件列表中的文件名;單擊效勞器文件列表中的文件名,再單擊“文件下載”按鈕。為文件名列表框添加鼠標(biāo)雙擊事件的響應(yīng)函數(shù)OnDblclkListfile(),實(shí)現(xiàn)相應(yīng)文件下載的功能,代碼如下:用戶通過(guò)兩種方式下載文件,都會(huì)彈出文件“另存為”對(duì)話框,選擇好保存位置后,客戶端開(kāi)始下載FTP效勞器上的相應(yīng)文件,客戶端與FTP效勞器的交互如圖4.11所示〔假定要下載的文件是welcome.txt〕。圖4.11客戶端上傳文件時(shí)與效勞器的交互過(guò)程響應(yīng)函數(shù)OnDblclkListfile()的實(shí)現(xiàn)過(guò)程:〔1〕使FTP效勞器進(jìn)入被動(dòng)模式,建立數(shù)據(jù)連接〔在Pasv_mode()函數(shù)中完成〕,獲取用戶選擇下載的文件名,向效勞器發(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ù)網(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)論