版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、第4章 WinInet編程,WinInet是Windows Internet擴展應用程序高級編程接口,是專為開發(fā)具有Internet功能的客戶端應用程序而提供的。 WinInet有兩種形式: WinInet API包含一個C語言的函數(shù)集(Win32 Internet functions); MFC WinInet類層次則是對前者的面向?qū)ο蟮姆庋b。 WinInet支持FTP、HTTP、Gopher協(xié)議。 使用WinInet可以使客戶端應用程序輕松地與這三種服務器通信,而無需考慮底層通信細節(jié)。,4.1 使用WinInet API的共性問題,使用WinInet API,應用程序可以與Internet
2、服務器建立連接、查詢或接收服務器文件、向服務器發(fā)送文件、打開服務器上的文件,等等。 進行操作時可以使用同步方式或異步方式。 WinInet API的函數(shù)原型定義在Wininet.h頭文件中,對應的函數(shù)實現(xiàn)在Wininet.lib庫文件中。 要想成功地編譯使用WinInet API的應用程序, 正在使用的C/C+的include目錄中必須有Wininet.h頭文件,library目錄中必須有Wininet.lib庫文件。,4.1.1 WinInet API函數(shù)使用的HINTERNET句柄 HINTERNET句柄是一種特殊的數(shù)據(jù)類型,由少數(shù)WinInet API函數(shù)創(chuàng)建,大多數(shù)WinInet AP
3、I函數(shù)通過使用HINTERNET類型的句柄來實現(xiàn)函數(shù)的操作。 HINTERNET句柄可以代表Internet會話,也可以代表應用程序與Internet上特定服務器的連接,還可以代表各種打開的文件或查詢結(jié)果。 HINTERNET句柄與普通的Win32句柄相似。 區(qū)別在于處于不同層次的HINTERNET句柄形成了一個樹形體系,且只有少數(shù)函數(shù)能夠創(chuàng)建HINTERNET句柄。,圖4.1 各種HINTERNET句柄形成的樹形體系結(jié)構(gòu),各種HINTERNET句柄都有相應的數(shù)據(jù)結(jié)構(gòu),記錄句柄的屬性信息,并提供通過該句柄可以實現(xiàn)的操作。 下層句柄是由上層句柄派生出來的,下層句柄繼承上層句柄的屬性。 當用戶調(diào)用
4、InternetCloseHandle函數(shù)來關(guān)閉一個句柄時,由該句柄派生的所有下層句柄都將被關(guān)閉。 HINTERNET句柄有許多選項,這些選項決定了句柄的行為和屬性,如句柄的操作方式、超時設(shè)置、異步操作時的回調(diào)函數(shù)、環(huán)境上下文ID、緩沖區(qū)大小等。 句柄的類型不同,選項也不同。應用程序可以調(diào)用InternetQueryOption函數(shù)來查詢句柄的選項設(shè)置,調(diào)用InternetSetOption函數(shù)來改變句柄的選項設(shè)置。,圖4.2 依賴由InternetOpenUrl所創(chuàng)建句柄的三個函數(shù),4.1.2 典型的操作流程和它們使用的句柄 1. 使用InternetOpenUrl直接打開因特網(wǎng)上指定的文件
5、,2FTP操作的層級結(jié)構(gòu) (1) 對FTP服務器的目錄和文件進行操作,圖4.3 對FTP服務器的目錄和文件進行操作的流程,(2) 使用內(nèi)存緩沖區(qū)來操作FTP服務器上的文件.,圖4.4 使用內(nèi)存緩沖區(qū)來操作FTP服務器上的文件,(3) 查詢FTP服務器上的文件,圖4.5 查詢FTP服務器上的文件,4.1.3 如何獲取WinInet API函數(shù)執(zhí)行的錯誤信息 從函數(shù)的返回值來說,WinInet API主要有兩種類型。 一種函數(shù)的返回值類型是HINTERNET句柄型; 一種函數(shù)的返回值類型是布爾型。 應用程序可以根據(jù)函數(shù)執(zhí)行后的返回值來判斷函數(shù)的執(zhí)行是否成功。 對于前一種函數(shù),當函數(shù)執(zhí)行成功時,返回
6、一個有效的句柄;當函數(shù)失敗時,則返回NULL。 對于后一種函數(shù),當函數(shù)執(zhí)行成功時,返回TRUE;當函數(shù)失敗時,返回FALSE。 在函數(shù)調(diào)用失敗后,用戶往往需要了解出錯的具體原因,應用程序可以隨即調(diào)用GetLastError函數(shù)來獲取更具體的錯誤信息。,4.1.4 關(guān)于返回信息的緩沖區(qū)參數(shù) 許多WinInet API函數(shù)使用兩個參數(shù)來向應用程序返回信息。 lpszBuffer是指向數(shù)據(jù)緩沖區(qū)的指針(LPVOID lpszBuffer),可以為NULL。 lpdwBufferLength是指向緩沖區(qū)長度的指針(LPDWORD lpdwBufferLength),它在函數(shù)開始執(zhí)行時指示緩沖區(qū)的大小,
7、不能為NULL。,函數(shù)執(zhí)行完畢時,作為函數(shù)的出口參數(shù),返回一個長度可變的信息。 若調(diào)用成功 lpszBuffer指向的緩沖區(qū)中存儲著返回的信息內(nèi)容。 lpdwBufferLength所指的雙字就被設(shè)置為實際存入緩沖區(qū)的數(shù)據(jù)的字節(jié)長度。 若lpszBuffer指針為NULL,或lpdwBufferLength指示的緩沖區(qū)大小不足以容納返回的數(shù)據(jù),函數(shù)調(diào)用將失敗,并在函數(shù)返回時將lpdwBufferLength所指的值設(shè)置為接受返回數(shù)據(jù)所需的緩沖區(qū)字節(jié)數(shù)。 用戶可以使用這個返回值,重新分配一個更大的緩沖區(qū),并重新調(diào)用函數(shù)。,4.1.5 WinInet API的異步操作模式 WinInet API的
8、函數(shù)在進行I/O操作時,默認的方式是同步操作,即對于每一個不能及時完成的I/O操作,會一直等下去,直到操作完成。 異步操作,無論成功與否函數(shù)調(diào)用都會立即返回,這樣就允許一個單線程的應用程序最充分地利用CPU,而不必等待網(wǎng)絡I/O的完成。 當調(diào)用異步操作模式的函數(shù)時,應檢查返回值。 若函數(shù)調(diào)用返回FALSE或NULL,并且調(diào)用GetLastError返回一個ERROR_IO_PENDING錯誤,說明該函數(shù)調(diào)用已經(jīng)異步的完成了。 并且當函數(shù)執(zhí)行完畢時,會使用INTERNET_STATUS_REQUEST_COMPLETE狀態(tài)碼來自動的調(diào)用應用程序的回調(diào)函數(shù)。,為了使WinInet以異步方式操作,應
9、用程序需要做四件事。 設(shè)置異步方式標志 在調(diào)用InternetOpen函數(shù)來創(chuàng)建Inernet根句柄時,將參數(shù)dwFlags設(shè)置為INTERNET_FLAG_ASYNC異步標志。 這表示接下來針對根句柄及其派生句柄的操作都以異步方式進行。 任何調(diào)用在異步結(jié)束后均返回一個對話句柄或由此而派生的句柄。,設(shè)置非零的環(huán)境值 WinInet中創(chuàng)建句柄的函數(shù)都有一個稱為環(huán)境值的入口參數(shù),名字總是dwContext。 如果要求針對某個句柄的函數(shù)以異步的方式來操作,在調(diào)用創(chuàng)建該句柄的函數(shù)時,對dwContext參數(shù)必須指定一個非零的環(huán)境值。 如果把環(huán)境值指定為0,即使在上一步操作中設(shè)置了INTERNET_FL
10、AG_ASYNC標志,依賴該句柄的函數(shù)也只能以同步方式來操作。,定義并實現(xiàn)一個狀態(tài)回調(diào)函數(shù)(status callback function) 對于長時間操作的WinInet函數(shù),回調(diào)函數(shù)可以給應用程序返回一些關(guān)于操作進展情況的反饋,并主要是與網(wǎng)絡操作有關(guān)的情況。 eg:解析了一個域名、正在連接服務器、正在接收數(shù)據(jù) 異步操作完成時將調(diào)用回調(diào)函數(shù),給出某種指示. INTERNET_STATUS_HANDLE_CLOSING是對于一個句柄最后做的狀態(tài)指示; INTERNET_STATUS_HANDLE_CREATED是當句柄初始創(chuàng)建時的指示; INTERNET_STATUS_REQUEST_COM
11、PLETE是當一個異步操作完成時的指示。 當接收到一個INTERNET_STATUS_REQUEST_COMPLETE指示時,應用程序必須檢查INTERNET_ASYNC_RESULT結(jié)構(gòu),來決定操作是成功還是失敗。,為句柄注冊有效的回調(diào)函數(shù) 通過調(diào)用InternetSetStatusCallback函數(shù)可以建立一個回調(diào)函數(shù)與一個句柄的關(guān)聯(lián),稱為注冊。 一旦建立了這種關(guān)聯(lián),所有對于這個句柄的異步操作就都調(diào)用這個回調(diào)函數(shù),產(chǎn)生狀態(tài)指示,匯報函數(shù)的操作情況。 回調(diào)函數(shù)被該句柄派生的句柄繼承,對于其派生句柄的異步操作也都將調(diào)用這個回調(diào)函數(shù)。 使用InternetSetStatusCallback函數(shù)
12、也可以改變一個句柄關(guān)聯(lián)的回調(diào)函數(shù),但是改變了一個句柄關(guān)聯(lián)的回調(diào)函數(shù)并不改變其派生句柄的關(guān)聯(lián)回調(diào)函數(shù). 異步操作在調(diào)用回調(diào)函數(shù)時,會將所操作的句柄創(chuàng)建時指定的非零環(huán)境值,以及對這個句柄操作的狀態(tài)指示等信息,作為入口參數(shù)傳遞給回調(diào)函數(shù),利用傳入的環(huán)境值,可以核查向回調(diào)函數(shù)產(chǎn)生調(diào)用的操作,從而判別出這此回調(diào)是哪個異步操作引起的,進而做出不同的處理。,4.1.6 回調(diào)函數(shù)的定義實現(xiàn)與注冊 1回調(diào)函數(shù)的原型 VOID (CALLBACK * INTERNET_STATUS_CALLBACK)( IN HINTERNET hInternet, IN DWORD dwContext, IN DWORD dw
13、InternetStatus, IN LPVOID lpvStatusInformation, IN DWORD dwStatusInformationLength );,2INTERNET_ASYNC_RESULT結(jié)構(gòu)的定義 此結(jié)構(gòu)包含異步回調(diào)函數(shù)的結(jié)果。 typedef struct DWORD dwResult; DWORD dwError; INTERNET_ASYNC_RESULT, * LPINTERNET_ASYNC_RESULT;,3注冊句柄的回調(diào)函數(shù) 調(diào)用InternetSetStatusCallback函數(shù)可以建立回調(diào)函數(shù)與句柄的關(guān)聯(lián)。 INTERNET_STATUS_CA
14、LLBACK InternetSetStatusCallback( IN HINTERNET hInternet, IN INTERNET_STATUS_CALLBACK lpfnInternetCallback );,4舉例 下面給出了一個回調(diào)函數(shù)的例子,和一個調(diào)用InternetSetStatusCallback來注冊回調(diào)函數(shù)的例子. /定義了一個回調(diào)函數(shù),函數(shù)名是用戶自己定義的。 void CALLBACK CInternet:InternetCallback( HINTERNET hInternet, / 其它參數(shù)原樣照抄 DWORD dwcontext, DWORD dwIntern
15、etStatus, LPVOID lpvStatusInformation, DWORD dwStatusInformationLength ) / 在這里插入回調(diào)函數(shù)的實現(xiàn)代碼。. ; /定義INTERNET_STATUS_CALLBACK型的變量 INTERNET_STATUS_CALLBACK dwISC; / 建立句柄與回調(diào)函數(shù)的關(guān)聯(lián) dwISC = InternetSetStatusCallback(hInternet, (INTERNET_STATUS_CALLBACK) InternetCallback);,4.2 使用WinInet API編制FTP客戶程序的要點,4.2.1
16、一般步驟 FTP客戶端應用程序的一般步驟是: 調(diào)用InternetAttemptConnect函數(shù)測試主機與Internet的連接狀態(tài); 調(diào)用InternetOpen函數(shù),創(chuàng)建HINTERNET會話根句柄; 創(chuàng)建FTP會話句柄,調(diào)用函數(shù)時需要服務器名、FTP端口號、用戶名和口令,設(shè)置INTERNET_SERVICE_FTP標志,若將端口號設(shè)置為HINTERNT_INVALID_PORT_NUMBER,則使用默認端口號; 對于FTP服務器執(zhí)行需要的操作:,對于FTP服務器執(zhí)行需要的操作: 搜尋并列舉FTP服務器上的文件和目錄 使用FtpFindFirstFile和InternetFindNext
17、File函數(shù)。 查知或改變FTP服務器的當前目錄 使用FtpGetCurrentDirectory和FtpSetCurrentDirectory函數(shù)。 操作服務器上的目錄 使用FtpCreateDirectory和FtpRemoveDirectory函數(shù). 下載FTP服務器中的文件 使用FtpOpenFile和InternetReadFile函數(shù) 下載和上傳文件 使用FtpGetFile和FtpPutFile函數(shù)。,4.2.2 搜尋并列舉FTP服務器上的文件和目錄 使用FTP的主要目的是操作文件,經(jīng)常要在FTP服務器上查找符合一定條件的目錄或文件,稱為目錄列舉. 符合條件的對象可能有很多,需要
18、使用兩個WinInet函數(shù)才能把所有的都搜索出來。 首先,調(diào)用FtpFindFirstFile函數(shù),找到服務器上第一個匹配的文件或目錄,并返回一個HINTERNET句柄。 在此基礎(chǔ)上,可以使用這個句柄,反復調(diào)用InternetFindNextFile函數(shù),搜尋到其它的匹配文件或目錄,直到返回ERROR_NO_MORE_FILES時,說明所有匹配的對象都找到了。,FtpFindFirstFile函數(shù)的原型: HINTERNET FtpFindFirstFile( IN HINTERNET hFtpSession, / 指定FTP會話句柄 IN LPCSTR lpszSearchFile, / 指
19、定要尋找的目錄或文件路徑 OUT LPWIN32_FIND_DATA lpFindFileData, / 返回的搜尋結(jié)果 IN DWORD dwFlags, / 設(shè)置影響函數(shù)執(zhí)行的標志 IN DWORD dwContext / 環(huán)境值 ); 如果函數(shù)執(zhí)行成功,返回一個有效的句柄,用于InternetFindNextFile,繼續(xù)查詢,否則返回NULL。 如果函數(shù)找不到匹配對象,則調(diào)用GetLastError函數(shù)返回一個ERROR_NO_MORE_FILES錯誤。,在一個FTP會話期內(nèi),只可以調(diào)用一次FtpFind FirstFile函數(shù),此后應使用InternetFindNextFile函數(shù)列
20、舉出其余符合條件的目錄和文件。 并將結(jié)果返回到WIN32_FIND_DATA結(jié)構(gòu)中。 InternetFindNextFile函數(shù)比較簡單,其原型是: BOOL InternetFindNextFile( IN HINTERNET hFind, / 查找句柄 OUT LPVOID lpvFindData); / 查找的結(jié)果 函數(shù)返回值是BOOL型,如果執(zhí)行成功返回TRUE,否則返回NULL。 如果函數(shù)找不到匹配對象,則調(diào)用GetLastError函數(shù)返回一個ERROR_NO_MORE_FILES錯誤。,4.2.3 查知或改變FTP服務器的當前目錄 應用程序?qū)τ贔TP服務器上的當前目錄的控制稱為
21、目錄導航。 調(diào)用FtpGetCurrentDiretory函數(shù)能夠查知FTP服務器上的當前目錄是哪一個; 調(diào)用FtpSetCurrentDiretory函數(shù)能夠?qū)TP服務器上的當前目錄改變到指定目錄。,FtpGetCurrentDiretory函數(shù)的原型: BOOL FtpGetCurrentDirectory( IN HINTERNET hFtpSession, / FTP會話句柄 OUT LPSTR lpszCurrentDirectory, / 返回當前目錄的緩沖區(qū)指針 IN OUT LPDWORD lpdwCurrentDirectory / 緩沖區(qū)的字符長度。 ); FtpSetC
22、urrentDirectory函數(shù)的原型: BOOL FtpSetCurrentDirectory( IN HINTERNET hFtpSession, / 有效的FTP會話句柄 IN LPCSTR lpszDirectory / 要設(shè)置的新當前目錄路徑 ); 返回值是BOOL型的,成功返回TRUE,失敗返回FALSE.,4.2.4 操作服務器上的目錄 使用WinInet API函數(shù)可以在FTP服務器上創(chuàng)建和刪除目錄,當然應用程序應當具有相應的權(quán)限。 在調(diào)用InternetConnect時,指定具有相應權(quán)限的用戶名和口令,正確地登錄到FTP服務器。 調(diào)用FtpCreateDirectory可以
23、在FTP服務器上創(chuàng)建新的目錄,函數(shù)原型是: BOOL FtpCreateDirectory( IN HINTERNET hFtpSession, /有效的FTP會話句柄 IN LPCSTR lpszDirectory /字符串指針,用于指定要創(chuàng)建的目錄路徑(名) );,調(diào)用FtpRemoveDirectory可以刪除FTP服務器上的指定的目錄,函數(shù)原型是: BOOL FtpRemoveDirectory( IN HINTERNET hFtpSession, /有效的FTP會話句柄 IN LPCSTR lpszDirectory /字符串指針,用于指定要刪除的目錄路徑(名) ); 以上兩函數(shù)的返
24、回值是BOOL型,調(diào)用成功,返回TRUE,否則返回FALSE。 應用程序可以使用FtpGetCurrentDirectory函數(shù)來決定遠方FTP站點的當前工作目錄。,FtpCreateDirectory函數(shù)的原型是 BOOL FtpCreateDirectory( IN HINTERNET hFtpSession, / 有效的FTP會話句柄. IN LPCSTR lpszDirectory / 要創(chuàng)建的目錄路徑. ); FtpRemoveDirectory函數(shù)的原型是 BOOL FtpRemoveDirectory( IN HINTERNET hFtpSession, / 有效的FTP會話句柄
25、. IN LPCSTR lpszDirectory / 要刪除的目錄路徑. );,31,4.2.5 下載FTP服務器中的文件 WinInet為客戶端應用程序提供了三種從FTP服務器上獲取文件的方法。 (1)使用InternetOpenURL和InternetReadFile函數(shù) 如果用戶確切的知道文件有效的URL,并且應用程序想要更緊密的控制下載的過程,同時在FTP服務器上不需要進行其它的操作,可以使用這種方法。 應用程序直接調(diào)用InternetOpenURL函數(shù)打開由RUL指定的服務器文件,創(chuàng)建文件句柄,再調(diào)用InternetReadFile函數(shù)下載文件的內(nèi)容,這種方法允許應用程序?qū)ο螺d有更
26、強的控制,是通用的下載方法。,(2)使用FtpOpenFile和InternetReadFile函數(shù) 如果應用程序已經(jīng)調(diào)用InternetConnect函數(shù)創(chuàng)建了一個到服務器的FTP會話句柄,可以首先調(diào)用FtpOpenFile函數(shù)打開服務器上的現(xiàn)存文件,再調(diào)用InternetReadFile來下載文件,并保持與FTP服務器的連接,因此允許執(zhí)行更多的其他命令。 在如下兩種情況應使用這種下載方法: 應用程序需要從服務器獲得一個文件,并把文件信息首先裝入應用程序控制的內(nèi)存緩沖區(qū),而不是直接寫到磁盤的一個文件中; 應用程序需要對文件的傳送過程進行很好的控制,如下載過程中顯示進度指示器。,FtpOpen
27、File函數(shù)原型是: HINTERNET FtpOpenFile( IN HINTERNET hFtpSession, / Ftp會話句柄. IN LPCSTR lpszFileName, / 字符串指針,指向要訪問的遠程文件名 IN DWORD fdwAccess, /對文件做的操作,只讀或?qū)?IN DWORD dwFlags, /傳送方法與緩存方法. IN DWORD dwContext, /環(huán)境值. ); 函數(shù)返回HINTERNET句柄,初始化對遠地文件的訪問,如果成功返回一個句柄,供InternetReadFile或InternetWriteFile使用,如果失敗返回NULL。,在使用
28、FtpOpenFile函數(shù)打開了FTP服務器上的一個文件,并成功地返回了一個文件句柄之后,應用程序必須使用InternetReadFile函數(shù)下載文件的內(nèi)容。 InternetReadFile函數(shù)的原型是: BOOL InternetReadFile( IN HINTERNET hFile, / FtpOpenFile返回的文件句柄. IN LPCVOID lpBuffer, / 接收數(shù)據(jù)的內(nèi)存緩沖區(qū)指針. IN DWORD dwNumberOfByetesToWrite, /要讀的字節(jié)數(shù). OUT LPDWORD lpdwNumberOfByetesWriten , /實際讀到的字節(jié)數(shù). )
29、; 函數(shù)成功執(zhí)行返回TRUE,否則返回FALSE。 如果返回值是TRUE,并且讀到的字節(jié)數(shù)是0,說明傳送已經(jīng)完成,可調(diào)用InternetCloseHandle釋放連接。,lpBuffer緩沖區(qū)應足夠大,下載一個服務器文件往往要多次調(diào)用InternetReadFile函數(shù),直到把數(shù)據(jù)都讀完。 每次調(diào)用時,函數(shù)會盡量多讀數(shù)據(jù),如果網(wǎng)絡上的數(shù)據(jù)尚未到達,函數(shù)會等待,直到讀夠數(shù)據(jù)。 在一個FTP會話中,僅僅可以打開一個文件,只能同時存在一個文件句柄。 如果在未調(diào)用InternetCloseHandle關(guān)閉前面的文件句柄時,就繼續(xù)調(diào)用FtpOpenFile,會產(chǎn)生ERROR_FTP_TRANSFER_I
30、N_PROGRESS錯誤。,(3)使用FtpGetFile函數(shù)。 如果應用程序并不需要緊密地控制下載,可以使用FtpGetFile函數(shù),直接指定服務器上的遠程文件名和下載后在本地存儲的文件名,來獲得文件。 函數(shù)同樣要求已經(jīng)用InternetConnect建立了到服務器的FTP會話連接。,應用程序可以調(diào)用FtpGetFile函數(shù)將遠程文件存為本地系統(tǒng)中的文件,此函數(shù)將文件從遠程FTP服務器中讀出,并以指定的文件名存在本地系統(tǒng)中。 FtpGetFile函數(shù)的原型是: BOOL FtpGetFile( IN HINTERNET hFtpSession, / Ftp會話句柄. IN LPCSTR lp
31、szRemoteFile, / 服務器上的遠程文件名 IN LPCSTR lpszNewFile, / 存在本地的文件名. IN BOOL fFailIfExists, /如何處理同名文件. IN DWORD dwLocalFlagsAndAttributes, /新創(chuàng)建的文件的屬性. IN DWORD dwInternetFlags, /傳送方法與緩存方法. IN DWORD dwContext, /環(huán)境值. ); 函數(shù)成功執(zhí)行返回TRUE,否則返回FALSE。,4.2.6 上傳文件 上傳文件是指在FTP服務器上放置一個文件。 在WinInet中有兩種方法。 (1)使用FtpOpenFile
32、和InternetWriteFile 如果應用程序要發(fā)送一些數(shù)據(jù)到FTP服務器,并且要把這些數(shù)據(jù)作為一個文件存在服務器上,而應用程序并沒有一個本地文件包含這些數(shù)據(jù),數(shù)據(jù)在內(nèi)存緩沖區(qū)內(nèi),可以使用FtpOpenFile以寫的方式打開文件,創(chuàng)建文件句柄,然后再調(diào)用InternetWriteFile將數(shù)據(jù)發(fā)送到服務器的文件中。 (2)使用FtpPutFile 如果本地文件已經(jīng)存在,應用程序可以緊密地控制文件的傳送。,(1)使用FtpOpenFile和InternetWriteFile FtpOpenFile的用法與下載文件基本相同,區(qū)別在于必須以寫的方式打開。 然后調(diào)用InternetWriteFile將本地內(nèi)存
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二四年工業(yè)用地買賣合同
- 2025年度綠色能源儲煤場建設(shè)與運營管理合作協(xié)議3篇
- 二零二四年廣告發(fā)布合同標的及發(fā)布內(nèi)容
- 二零二五年度房地產(chǎn)項目合作開發(fā)合同6篇
- 2024銷售云服務超兔一體云CRM系統(tǒng)實施合同3篇
- 2025年園林景觀草籽草坪種植與維護合同3篇
- 2025年度房地產(chǎn)項目融資財產(chǎn)保全及監(jiān)管合同3篇
- 2025年度高速公路綠化帶建設(shè)及養(yǎng)護服務合同4篇
- 二零二五版房地產(chǎn)營銷推廣甲乙戰(zhàn)略合作合同
- 現(xiàn)代文學史自考知識點:曹禺作品考點總結(jié)
- 2024-2025學年八年級上學期1月期末物理試題(含答案)
- 2025年國新國際投資有限公司招聘筆試參考題庫含答案解析
- 制造車間用洗地機安全操作規(guī)程
- 2025河南省建筑安全員-A證考試題庫及答案
- MOOC 有機化學(上)-北京師范大學 中國大學慕課答案
- 《風電場項目經(jīng)濟評價規(guī)范》(NB-T 31085-2016)
- 五年級上冊脫式計算100題及答案
- 中央廣播電視大學畢業(yè)生登記表-6
- 招商部人員績效考核辦法最全方案
- 醫(yī)療設(shè)備報廢申請表
- CAD快速看圖破解安裝步驟
評論
0/150
提交評論