網(wǎng)絡(luò)程序設(shè)計(jì)第10章附錄源代碼清單、項(xiàng)目工程文件10.6pop3客戶端pop_第1頁(yè)
網(wǎng)絡(luò)程序設(shè)計(jì)第10章附錄源代碼清單、項(xiàng)目工程文件10.6pop3客戶端pop_第2頁(yè)
網(wǎng)絡(luò)程序設(shè)計(jì)第10章附錄源代碼清單、項(xiàng)目工程文件10.6pop3客戶端pop_第3頁(yè)
網(wǎng)絡(luò)程序設(shè)計(jì)第10章附錄源代碼清單、項(xiàng)目工程文件10.6pop3客戶端pop_第4頁(yè)
網(wǎng)絡(luò)程序設(shè)計(jì)第10章附錄源代碼清單、項(xiàng)目工程文件10.6pop3客戶端pop_第5頁(yè)
已閱讀5頁(yè),還剩12頁(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、10.6 接收電子郵件的程序?qū)嵗募夹g(shù)要點(diǎn)10.6.1 實(shí)例程序的目的通過這個(gè)實(shí)例,讀者可以進(jìn)一步了解POP3 的有關(guān)原理和內(nèi)容。程序的用戶界面如圖10-9所示:圖 10-9 pop3 電子郵件接收程序的用戶界面這個(gè)實(shí)例不太復(fù)雜,用戶可以利用某個(gè) 的 pop3 電子郵件接收服務(wù)器來(lái)接收你在該網(wǎng)站的電子郵箱里的信件。首先填入 pop3 服務(wù)器地址、郵箱用戶名和口令,并決定是否要?jiǎng)h除郵箱里的郵件;然后點(diǎn)擊“連接”按鈕,程序會(huì)與服務(wù)器建立 TCP 連接,然后發(fā)送用戶名和口令,經(jīng)過驗(yàn)證,進(jìn)入 POP3 會(huì)話。通過命令交互,將郵箱中的所有郵件取回。在此過程中,左下方的多文本列表框(RichTextBox

2、)會(huì)顯示全部的會(huì)話信息。信件全部完畢后,左上方的組合列表框中就有了所有信件的標(biāo)題字段。用戶可以從中選擇然后可以斷開連接。件,查看或者。實(shí)例只介紹了接收郵件,提取信頭標(biāo)題字段的有關(guān)內(nèi)容,能正確顯示符合 Rfc822 規(guī)范的郵件。由于目前郵件結(jié)構(gòu)非常復(fù)雜,限于篇幅,程序沒有對(duì)收到的信件作進(jìn)一步的分析,也沒有對(duì)編碼的信息進(jìn)行譯碼,讀者看到的是收信的原始信息,有的功能,例如,對(duì)信件進(jìn)行 MIME 格式分析,將附件提取出來(lái)。程序?qū)崿F(xiàn)的技術(shù)要點(diǎn)是:的讀者可以進(jìn)一步擴(kuò)展程序1運(yùn)用 Windows 的消息驅(qū)制除了由 MFC 創(chuàng)建的應(yīng)用程序類和框類以外,程序從 CAsyncSocket 類派生了自己的套接字類,

3、并為它添加了 OnConnect()、OnClose()和 OnReceive()三個(gè)事件處理函數(shù)。程序的會(huì)話過程幾乎完全是由 FD_READ 消息驅(qū)動(dòng)的。建立連接后,服務(wù)器會(huì)返回信息,接到命令后,服務(wù)器也會(huì)返回信息。當(dāng)信息到達(dá)客戶端套接字的接收緩沖區(qū)時(shí),會(huì)觸發(fā) FD_READ消息,并自動(dòng)執(zhí)行 OnReceive()函數(shù)。該函數(shù)接收服務(wù)器發(fā)來(lái)的信息,進(jìn)行分析處理,然后再發(fā)送相應(yīng)令。這命令又會(huì)引來(lái)服務(wù)器的響應(yīng),又會(huì)觸發(fā)客戶端的 FD_READ 消息。如此周而復(fù)始,完成 POP 會(huì)話的全過程。2通過狀態(tài)轉(zhuǎn)換來(lái)控制會(huì)話命令的發(fā)布順序程序定義了一個(gè)枚舉類型 SE,并為套接字類定義了一個(gè) SE 類型的變

4、量 se,用來(lái)表示 POP 會(huì)話的實(shí)際狀態(tài)。容易看出,枚舉的成員符號(hào)是客戶端向 POP3 服務(wù)器發(fā)送的命令。typedef enumEs=0,USe;ASS,SLIST,RETR,ENDRETR,DELE,GOON SE;S當(dāng)用戶點(diǎn)擊“連接”按鈕與服務(wù)器建立 TCP 連接時(shí),將 se 置為初值;然后,每當(dāng)收到服務(wù)器的信息,一方面根據(jù)會(huì)話的當(dāng)前狀態(tài)作響應(yīng)的分析處理,決定應(yīng)當(dāng)繼續(xù)發(fā)送哪條命令,另一方面發(fā)出下一個(gè)命令以后,改變 se 的值,將它置為該命令的狀態(tài)對(duì)應(yīng)的值,這就實(shí)現(xiàn)了會(huì)話過程中的狀態(tài)轉(zhuǎn)換,會(huì)話按照既定的順序進(jìn)行。讀者可仔細(xì)分析mySock:yzeMsg()函數(shù)。3用結(jié)構(gòu)向量來(lái)緩存信件信息

5、首先程序定義了一個(gè)結(jié)構(gòu)類型,用來(lái)緩存typedef struct件信息。CStringtext;msgSize; retrSize; MESSAGEPROP;/信件的文本/信件的大小/信件實(shí)際的大小,在過程中動(dòng)態(tài)變化然后為套接字類定義了一個(gè)向量型的成員變量,相當(dāng)于一個(gè)數(shù)組,其成員是上述的結(jié)構(gòu)。vector msgs;在 pop 會(huì)話中,地將信箱中所有信件的信息轉(zhuǎn)入這個(gè)向量,然后可以查閱,到文件中,或者進(jìn)行其他處理。10.6.2 創(chuàng)建應(yīng)用程序的過程1使用 MFC AppWizard 創(chuàng)建應(yīng)用程序框架工程名是 pop3,應(yīng)用程序的類型是基于框的,框的標(biāo)題是“接收電子郵件客戶端程序”,需要 Wind

6、ows Sockets 的支持,其它部分接受系統(tǒng)的默認(rèn)設(shè)置就可以。向?qū)ё詣?dòng)為應(yīng)用程序創(chuàng)建了兩個(gè)類:應(yīng)用程序類:CPop3App,基類是 CWinApp,對(duì)應(yīng)的文件是 pop3.h 和 pop3.cpp??蝾悾篊Pop3Dlg,基類是 CDialog,對(duì)應(yīng)的文件是 pop3Dlg.h 和 pop3Dlg.cpp。2為框添加控件框界面中按照?qǐng)D 10-9 添加相應(yīng)的可視控件對(duì)象,并按照表 10-10 修改在程序的主控件的屬性。表 10-10框中的控件屬性控件類型控件 IDCaption靜態(tài)文本 sic textIDC_SICpop3 服務(wù)器地址3定義控件的成員變量按照表 10-11,用類向?qū)?Cla

7、ss Wizard)為框中的控件對(duì)象定義相應(yīng)的成員變量。表 10-11控件對(duì)象的成員變量4為框中的控件對(duì)象添加事件響應(yīng)函數(shù)按照表 10-12,用類向?qū)?Class Wizard )為框中的控件對(duì)象添加事件響應(yīng)函數(shù)。表 10-12框控件的事件響應(yīng)函數(shù)控件類型對(duì)象標(biāo)識(shí)ObjectID消息 Message函數(shù)Member functions命令按鈕IDC_BTN_CONNBN_CLICKEDOnBtnConn命令按鈕IDC_BTN_DISCBN_CLICKEDOnBtnDisc命令按鈕IDC_BTN_VIEWBN_CLICKEDOnBtnView命令按鈕IDC_BTN_SAVEBN_CLICKEDO

8、nBtnSave控件 ID Control IDs變量名稱 Member Variable Name變量類別Category變量類型Variable TypeIDC_EDIT_SERVERm_strServerValueCStringIDC_EDIT_USERm_strUserValueCStringIDC_EDIT_PASSm_strPassValueCStringIDC_CHECK_DELm_bolDelValueBOOLB_LISTm_ctrListControlCComboBoxIDC_RICH_INFOm_InfoValueCStringm_ctrlnfoControlCRichEd

9、itCtrl靜態(tài)文本 sic textIDC_SIC用戶名靜態(tài)文本 sic textIDC_SIC口令編輯框edit boxIDC_EDIT_SERVER編輯框edit boxIDC_EDIT_USER編輯框edit boxIDC_EDIT_PASS復(fù)選框Check BoxIDC_CHECK_DEL刪除郵箱中的郵件多文本框 RichEdit BoxIDC_RICH_INFO組合選擇框 ComboBoxB_LIST(Drop List 型)命令按鈕 buttonIDC_BTN_CONN連接命令按鈕 buttonIDC_BTN_DISC斷開命令按鈕 buttonIDCANCAL取消命令按鈕 but

10、tonIDC_BTN_VIEW查看郵件命令按鈕 buttonIDC_BTN_SAVE存 儲(chǔ)為 Cpop3Dlg 類添加其它的成員void Disp(LONG flag); /在不同的會(huì)話階段顯示不同的信息 mySock pop3Socket;/套接字類對(duì)象實(shí)例創(chuàng)建從 CAsyncSocket 類繼承的派生類為了能夠捕獲并響應(yīng) socket 事件,應(yīng)創(chuàng)建用戶自己的套接字類,可利用類向?qū)砑印lass Type 選擇 MFC Class,類名為 mySock,基類是 CAsyncSocket 類,創(chuàng)建后對(duì)應(yīng)的文件是 mysock.h 和 mysock.cpp。在利用類向?qū)?mysock 類添加

11、 OnConnect, OnClose 和 OnReceive 三個(gè)事件處理函數(shù),并為它添加一般的成員函數(shù)和變量??蓞⒖聪乱恍」?jié)的程序代碼。手工添加包含語(yǔ)句以及事件函數(shù)和成員函數(shù)的代碼8分階段編譯執(zhí)行,進(jìn)試10.6.3程序1CPop3App 應(yīng)用程序類對(duì)應(yīng)的文件pop3.h 不動(dòng),在 pop3.cpp 的 InitInstance()函數(shù)中添加一句初始化多文本框控件的函數(shù)。BOOL CPop3App:InitInstance()if (!AfxSocketInit()AfxMessageBox(IDP_SOCKETS_INIT_FAILED); return FALSE;AfxEnableCo

12、ntrolContainer(); /MFC 自動(dòng)創(chuàng)建的代碼AfxInitRichEdit();./用戶添加的2CPop3Dlg框類對(duì)應(yīng)的文件(1)pop3Dlg.h 包含文件.#include mySock.h/添加套接字類的包含文件.class CPop3Dlg : public CDialog/ Construction public:void Disp(LONG flag);/在不同的會(huì)話階段顯示不同的信息mySock pop3Socket;/套接字類對(duì)象實(shí)例CPop3Dlg(CWnd* pParent = NULL); / standard constructor.(2)pop3Dl

13、g.cpp 實(shí)現(xiàn)文件 #include stdafx.h #include pop3.h#include pop3Dlg.h#include mySock.h./手工添加的包含語(yǔ)句BOOL CPop3Dlg:OnInitDialog()./ TODO: Add extra initialization here/用戶在這里添加控件成員變量的初始化代碼m_strServer = _T(m_strUser = _T();/POP3 服務(wù)器地址/郵箱的用戶名/口令le);m_strPass = _T(123456); m_bolDel = FALSE;m_Info = _T();return TRU

14、E;/ return TRUE/郵件后不刪除/多文本框清空unless you set the focus to a control./以下是事件處理函數(shù)和其他成員函數(shù)的代碼/當(dāng)用戶點(diǎn)擊連接按鈕時(shí),執(zhí)行此函數(shù) void CPop3Dlg:OnBtnConn()/設(shè)定 pop3 類的框指針變量,使之指向本框,以便傳遞信息pop3Socket.SetParent(this);UpdateDaRUE);/取來(lái)用戶在框中輸入的數(shù)據(jù)pop3Socket.Create();/創(chuàng)建套接字對(duì)象的底層套接字pop3Socket.Connect(LPCSTR)m_strServer,110); /連接 pop3

15、服務(wù)器m_Info = ;UpdateData(FALSE);/多文本列表框清空/更新用戶界面/當(dāng)用戶點(diǎn)擊斷開按鈕時(shí),執(zhí)行此函數(shù)void CPop3Dlg:OnBtnDisc()pop3Socket.Close();/當(dāng)用戶點(diǎn)擊查看郵件按鈕時(shí),執(zhí)行此函數(shù) void CPop3Dlg:OnBtnView()i;i = m_ctrList.GetCurSel();/獲得用戶在組合框中的選擇/獲得并顯示指定信件的基本屬性及信件內(nèi)容 m_Info += pop3Socket.GetMsgStuff(i); m_Info += pop3Socket.GetMsgBody(i);/在不同的情況下,向用戶顯

16、示不同的信息 void CPop3Dlg:Disp(LONG flag)CString s; switch(flag)case S_CONNECT: /已連接到服務(wù)器,顯示信息 s = 已連接到+m_strServer+.rn; m_Info+=s;/禁用連接按鈕GetDlgItem(IDC_BTN_CONN)-EnableWindow(FALSE);/啟用斷開按鈕GetDlgItem(IDC_BTN_DISC)-EnableWindow(TRUE);/禁用查看郵件按鈕GetDlgItem(IDC_BTN_VIEW)-EnableWindow(FALSE); break;case S_RECE

17、IVE:/收到服務(wù)器發(fā)來(lái)的響應(yīng),顯示它的內(nèi)容 m_Info+=pop3Socket.lastMsg;break;case S_CLOSE: /顯示關(guān)閉連接的信息 m_Info+=pop3Socket.error;s = 連接已經(jīng)關(guān)閉rn; m_Info+=s;/啟用連接按鈕GetDlgItem(IDC_BTN_CONN)-EnableWindow(TRUE);/禁用斷開按鈕GetDlgItem(IDC_BTN_DISC)-EnableWindow(FALSE); break;case S_GETNUM: /已經(jīng)知道了郵箱中信件的總數(shù)s.Format(郵箱m_Info+=s; break;有 %

18、d 封信rn,pop3Socket.numMsg);case S_GETSIZE: /顯示信件的大小s.Format(信箱中信件大小為:%d 字節(jié)rn,pop3Socket.sizeMsg); m_Info+=s;break;case S_ENDRETR: /所有信件已完畢,顯示信息s.Format(共 m_Info+=s;/如果有信件了 %d 封信件rn,pop3Socket.msgs.size();,啟用查看郵件按鈕if(pop3Socket.msgs.size()0) GetDlgItem(IDC_BTN_VIEW)-EnableWindow(TRUE);break;UpdateData

19、(FALSE);/更新用戶界面/當(dāng)點(diǎn)擊“”按鈕時(shí),執(zhí)行此函數(shù)。void CPop3Dlg:OnBtnSave()i; CString s;i = m_ctrList.GetCurSel();/獲得指定信件的基本屬性及信件內(nèi)容 s = pop3Socket.GetMsgStuff(i);s += pop3Socket.GetMsgBody(i);CFileDialog dlg(FALSE); if(dlg.DoModal()=IDOK)CFile file(dlg.GetPathName(),CFile:modeCreate | CFile:modeWrite | CFile:typeBinar

20、y);file.Write(LPCSTR)s,s.GetLength();file.Close();3 mySock 套接字類對(duì)應(yīng)的文件(1)mysock.h 包含文件.#include #include #include using namespatd;classCPop3Dlg;/顯示不同信息的標(biāo)志 #define S_CLOSE1/當(dāng)關(guān)閉連接時(shí),顯示關(guān)閉信息/當(dāng)連接成功時(shí),顯示連接信息/當(dāng)收到服務(wù)器發(fā)來(lái)的信息時(shí),顯示該信息#define S_CONNECT 2#define S_RECEIVE #define S_GETNUM #define S_GETSIZE#define S_END

21、RETR3456/當(dāng)所有信件/當(dāng)所有信件/當(dāng)所有信件完畢后,顯示信箱中的信件總數(shù)完畢后,顯示信箱中的信件總大小完畢后,顯示相關(guān)信息/描述 pop3 會(huì)話狀態(tài)的枚舉類型typedef enum=0,USASS,SLIST,RETR,ENDRETR,DELE,GOON SE;/用來(lái)緩存 typedef structCStringtext;msgSize; retrSize; MESSAGEPROP;件信息的結(jié)構(gòu)/信件的文本/信件的大小/信件實(shí)際的大小,在過程中動(dòng)態(tài)變化/自己的套接字類class mySock : public CAsyncSocket/ Attributes public:CStr

22、ing lastMsg; CString error;numMsg, sizeMsg, retrMsg;vector msgs; /盛放信件信息的向量/ Operations public:/獲得基本的郵件信頭字段: From, To, Date, Subject, BodyCString GetMsgStuff( CString GetMsgBody(CString GetMsgSubject(i);i);/獲得信件體/獲得信件標(biāo)題/獲得整封信的內(nèi)容/退出服務(wù)器i);CString GetMsg(void Close();i);void SetParent(CPop3Dlg * mySock

23、();virtual mySock();pDlg);/ Overrides public:/ ClassWizard generated virtual function overrides/AFX_VIRTUAL(mySock) public:virtual void OnConnect(nErrorCode);virtual void OnClose(nErrorCode);virtual void OnReceive(/AFX_VIRTUALnErrorCode);/ Generated message map functions/AFX_MSG(mySock)/ NOTE - the

24、ClassWizard will add and remove member functions here./AFX_MSG/ Implemen protected:private:ionvoid ReadLn(index,CString src, CString &dst);voidyzeMsg();CPop3Dlg* m_pDlg;SE se;deg;.(2)mysock.cpp 實(shí)現(xiàn)文件 #include stdafx.h #include pop3.h #include mySock.h #includepop3Dlg.h.#define MAX_BUFF 20000/自己添加的包含語(yǔ)

25、句/構(gòu)造函數(shù),對(duì)某些成員變量初始化 mySock:mySock()m_pDlg = NULL;se=;error=Not connected to serverrn;mySock:mySock()m_pDlg = NULL;./如果連接成功,執(zhí)行此函數(shù)。/接到此消息僅僅顯示了一句話,開關(guān)了一些按鈕連接成功后,服務(wù)器發(fā)來(lái)響應(yīng),因此/又立即收到了 OnReceive 消息,后來(lái)的會(huì)話過程中,一來(lái)一往,程序總是收到/OnReceive 消息,所以真正的事情在那里作。void mySock:OnConnect(nErrorCode)if(nErrorCode=0)m_pDlg-Disp(S_CONNE

26、CT);/服務(wù)器端關(guān)閉連接,才會(huì)收到此消息。void mySock:OnClose(nErrorCode)if(nErrorCode=0)m_pDlg-Disp(S_CLOSE);/套接字收到服務(wù)器發(fā)來(lái)的數(shù)據(jù)時(shí),執(zhí)行此函數(shù)void mySock:OnReceive(if(nErrorCode=0)nErrorCode)char buffMAX_BUFF;/接收緩沖區(qū)rec=Receive(buff,MAX_BUFF); /接收服務(wù)器發(fā)來(lái)的數(shù)據(jù)buffrec=NULL; lastMsg=buff;yzeMsg();else/結(jié)尾置為 NULL。/分析收到的數(shù)據(jù),作不同的處理error=在接收數(shù)據(jù)

27、時(shí)發(fā)送了錯(cuò)誤!rn;m_pDlg-Disp(S_CLOSE);/顯示信息/設(shè)置套接字類的框指針變量void mySock:SetParent(CPop3Dlg *pDlg)m_pDlg = pDlg;/獲得第 i 封信件的標(biāo)題信息CString mySock:GetMsgStuff(CString ret;i)where=msgsi.text.Find(From:);ReadLn(where,msgsi.text,ret); ret+=rn;where=msgsi.text.Find(To:); if (where!=-1)ReadLn(where,msgsi.text,ret); ret+=

28、rn;where=msgsi.text.Find(Date:); if (where!=-1)ReadLn(where,msgsi.text,ret); ret+=rn;ret+=GetMsgSubject(i); ret+=rn;return ret;/獲得第 i 封信件的信件體CString mySock:GetMsgBody(CString ret;i)where=msgsi.text.Find(rnrn);if(where!=-1) where+=4;elsewhere=0;ret=msgsi.text.Right(msgsi.text.GetLength()-where); ret=

29、ret.Left(ret.GetLength()-3);return ret;/獲得第 i 封信件的標(biāo)題CString mySock:GetMsgSubject(i)where=msgsi.text.Find(Subject:); CString ret;if (where!=-1) ReadLn(where,msgsi.text,ret);return ret;/獲得第 i 封信整封信的內(nèi)容CString mySock:GetMsg(return msgsi.text;i)/從 src 串中,從 index 所指的位置開始,取子字串,直到行末符r為止。/dst 是一個(gè)串的地址,取出的行追加在

30、該串的原內(nèi)容之后void mySock:ReadLn(CString comp; comp=srcindex; while(comp!=r)p;index,CString src, CString &dst)comp=src+index;/退出服務(wù)器void mySock:Close()CString str; str.Format(quit%c%c,13,10); Send(LPCSTR)str,str.GetLength();m_pDlg-Disp(S_CLOSE);se=;CAsyncSocket:Close();error=Not connected to serverrn;void

31、mySock:yzeMsg()CString s; strstream str; string check;strcheck; if(check=-ERR)/將收到的信息拷貝到字符流變量中/提取所收到信息的第一段代碼/如果有錯(cuò)誤error=Received -ERR from server :+lastMsg;Close(); /斷開連接,然后關(guān)閉 return;/如果沒有錯(cuò)誤,則根據(jù)不同的會(huì)話階段響應(yīng)來(lái)處理switch(scasee): /如果已經(jīng)連接成功,類初始化的時(shí)候 se 為msgs.clear();/顯示連接成功后服務(wù)器返回的消息 m_pDlg-Disp(S_RECEIVE);/發(fā)送

32、 user 用戶名 命令s.Format(user %s%c%c,m_pDlg-m_strUser,13,10); Send(LPCSTR)s,s.GetLength(); /發(fā)送用戶帳號(hào)se=USER;break;case USER:/顯示服務(wù)器對(duì)于 user 命令的響應(yīng)m_pDlg-Disp(S_RECEIVE);/發(fā)送 pass 口令 命令,發(fā)送s.Format(pass %s%c%c,m_pDlg-m_strPass,13,10); Send(LPCSTR)s,s.GetLength();se=PASS;break;case PASS:/顯示服務(wù)器對(duì) pass 命令的響應(yīng)m_pDlg-

33、Disp(S_RECEIVE);/發(fā)送 s命令,請(qǐng)求服務(wù)器返回信箱中/郵件的數(shù)量和所占空間的大小s.Format(s%c%c,13,10);Send(LPCSTR)s,s.GetLength();se=S;break;case Sstring s1;str.seekg(0);/將字符流的當(dāng)前指針置為 0 strs1numMsgsizeMsg; /獲得數(shù)量和大小flush(str);m_pDlg-Disp(S_GETNUM); m_pDlg-Disp(S_GETSIZE);if(numMsg0) /如果有郵件,則發(fā)送 RETR 獲得郵件信息retrMsg=1; MESSAGEPROP prop;prop.msg

溫馨提示

  • 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)論