MFC FTP文件傳輸_第1頁(yè)
MFC FTP文件傳輸_第2頁(yè)
MFC FTP文件傳輸_第3頁(yè)
MFC FTP文件傳輸_第4頁(yè)
MFC FTP文件傳輸_第5頁(yè)
已閱讀5頁(yè),還剩19頁(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、大學(xué)研究生堂下考試答卷2014-2015學(xué)年第 1 學(xué)期考試科目 姓 名 年 級(jí) 專 業(yè) 2014年 12月 28日 面向?qū)ο蟪绦蛟O(shè)計(jì)課程報(bào)告學(xué)號(hào): 姓名: 學(xué)院: 題目基于MFC的聊天室與FTP文件傳輸系統(tǒng)選題背景首先經(jīng)過(guò)一個(gè)學(xué)期關(guān)于C+的學(xué)習(xí),我們希望能夠運(yùn)用所學(xué)的知識(shí)做出一些具有使用價(jià)值的產(chǎn)品。另外,由于本身專業(yè)是通信工程,基于對(duì)通信軟件編程方面興趣,希望能夠在完成課程設(shè)計(jì)的同時(shí)能夠加深自己對(duì)通信底層原理的理解。因此我們選擇的題目是基于MFC的網(wǎng)絡(luò)聊天室與FTP文件傳輸?shù)木幊?。并且希望最后編寫好的程序能夠在同學(xué)之間進(jìn)行交流以及文件共享方面具有一定的實(shí)用價(jià)值。最后,希望在完成編程的過(guò)程中提

2、高自己C+方面的能力以適應(yīng)今后的學(xué)習(xí)與發(fā)展。 實(shí)現(xiàn)的功能:1支持多個(gè)客戶端與服務(wù)器端之間的連接。2支持客戶端與客戶端之間的通信。3支持服務(wù)器端與客戶端之間的通信。4FTP客戶端方面支持文件的下載、上傳、以及刪除的功能。5FTP文件傳輸方面擁有兩個(gè)客戶端,一個(gè)是用于單線程的,另一個(gè)是用于多線程的,本實(shí)例對(duì)兩個(gè)客戶端的工作方式進(jìn)行了對(duì)比。實(shí)現(xiàn)環(huán)境及開發(fā)工具:1.windows 7/8.1操作系統(tǒng)(實(shí)現(xiàn)環(huán)境)2.visual studio2010/2013(開發(fā)工具)3.MSDN2008(幫組文檔)4.StarUML(UML制圖工具)基礎(chǔ)知識(shí)由于本實(shí)例是通信網(wǎng)絡(luò)編程,使用到了很多網(wǎng)絡(luò)通信方面的知識(shí),

3、其中包括WinSock編程以及WinInet編程。下面介紹一下兩類編程的基礎(chǔ)知識(shí)。一、WinSock編程1.介紹套接字是支持TCP/IP網(wǎng)絡(luò)通信的基本操作單元。多個(gè)TCP連接或多個(gè)應(yīng)用程序進(jìn)程可能需要通過(guò)同一個(gè) TCP協(xié)議端口傳輸數(shù)據(jù)。為了區(qū)別不同的應(yīng)用程序進(jìn)程和連接,許多計(jì)算機(jī)操作系統(tǒng)為應(yīng)用程序與TCP/IP協(xié)議交互提供了稱為套接字(Socket)的接口。套接字為不同的應(yīng)用進(jìn)程使用網(wǎng)絡(luò)協(xié)議進(jìn)行數(shù)據(jù)交換提供了接口,主要用于應(yīng)用層與傳輸層之間。套接字分為三類:流式套接字、報(bào)文套接字以及原始套接字。其中最常使用的是流式套接字與報(bào)文套接字。流式套接字是面向連接的,在數(shù)據(jù)傳輸之前需要在雙方之間建立起連

4、接,主要用于TCP業(yè)務(wù);報(bào)文套接字是面向無(wú)連接的,在數(shù)據(jù)傳輸之間無(wú)需建立連接,只需要知道對(duì)方的IP網(wǎng)絡(luò)地址已經(jīng)對(duì)應(yīng)的業(yè)務(wù)端口就可以把業(yè)務(wù)發(fā)送到目的端,報(bào)文套接字主要是用于傳輸基于UDP的業(yè)務(wù)。由于Windows提供了SOCKET的API函數(shù),因此簡(jiǎn)化了整個(gè)套接字應(yīng)用編程的難度,但是對(duì)于一般的初學(xué)者來(lái)說(shuō)使用SOCKET API函數(shù)進(jìn)行編程還是具有一定的難度,其主要適用于對(duì)整個(gè)協(xié)議工作過(guò)程有深入了解的專業(yè)人士使用。因此為了降低編程的門檻,微軟公司將SOCKET API函數(shù)封裝為了一個(gè)新的類CAsyncSocket類,通過(guò)調(diào)用CasyncSocket類的成員函數(shù)就能夠完成網(wǎng)絡(luò)編程的功能。但是,Cas

5、yncSocket的封裝性對(duì)于一般用戶來(lái)說(shuō)還是太過(guò)于復(fù)雜,對(duì)于一般人的使用還是有一定的難度,因此微軟又在CAsyncSocket類的基礎(chǔ)上派生了CSocekt類,極大地簡(jiǎn)化了套接字的編程。本實(shí)例采用的就是CSocket編程。2.套接字工作過(guò)程由于本實(shí)例是采用C/S模式進(jìn)行編程,是由客戶端與服務(wù)器端組成的。流式套接字與報(bào)文套接字編程的原理是不一樣的。流式套接字原理流式套接字是面向連接的,在進(jìn)行數(shù)據(jù)傳輸之前需要在服務(wù)器與客戶端之間先建立起連接。其建立連接的過(guò)程主要分為四步。i服務(wù)器端初始化套接字并綁定端口。ii.服務(wù)器端套接字啟動(dòng)監(jiān)聽(tīng)狀態(tài),調(diào)用Listen()函數(shù)。iii客戶端端建立套接字并綁定端

6、口。iv.客戶端請(qǐng)求連接。v.服務(wù)器端接受連接請(qǐng)求。其工作過(guò)程見(jiàn)圖1.1。圖1.1:流式套接字工作過(guò)程報(bào)文套接字工作原理報(bào)文套接字不需要在數(shù)據(jù)傳輸之間建立連接,只需綁定對(duì)應(yīng)的端口然后將數(shù)據(jù)發(fā)往對(duì)應(yīng)的網(wǎng)絡(luò)地址即可。其工作過(guò)程見(jiàn)圖1.2。圖1.2:報(bào)文套接字工作過(guò)程二、WinInet編程WinInet是windows internet擴(kuò)展應(yīng)用程序高級(jí)編程接口,是專為開發(fā)具有Internet功能的客戶機(jī)端應(yīng)用程序而提供的。它有兩種形式:WinInet API包含一個(gè)C語(yǔ)言的函數(shù)集,MFC WinInet類則是對(duì)前者的面向?qū)ο蟮姆庋b。WinInet主要用于Internet關(guān)于FTP文件傳輸協(xié)議,HTT

7、P超文本傳輸協(xié)議以及Gopher文件傳輸協(xié)議。MFC中WinInet包含的類i.CinternetSession類:由CObject類派生,代表應(yīng)用程序的一次Internet會(huì)話,每個(gè)訪問(wèn)Internet的應(yīng)用程序都需要一個(gè)CInternetSession類對(duì)象。ii.連接類:連接類主要包括CinternetConnection類以及它的派生類CFtpConnection類、CHttpConnection類和CGopherConnection類。iii.文件類:包括CInternetFile類以及它派生的CHttpFile類和CGopherFile類,另外文件查找類CFileFind也是文件類

8、。iv.CInternetException類:MFC WinInet類的成員函數(shù)在執(zhí)行時(shí)所發(fā)生的錯(cuò)誤或異常,往往用try/catch邏輯結(jié)構(gòu)來(lái)處理異常。WinInet編程的步驟i.創(chuàng)建CInternetSession類對(duì)象,創(chuàng)建并初始化Internet會(huì)話ii.創(chuàng)建連接對(duì)象類,建立CInternetSession對(duì)象與網(wǎng)絡(luò)服務(wù)器的連接,也就是應(yīng)用程序與服務(wù)器的連接。本實(shí)例創(chuàng)建CFtpConnection類。iii.創(chuàng)建文件檢索類,對(duì)文件進(jìn)行檢索。iv.創(chuàng)建異常類CInetnetException類,處理錯(cuò)誤。v.關(guān)閉各種類,釋放資源。三、多線程編程Windows本身是一個(gè)多進(jìn)程多線程的操作系

9、統(tǒng),因此在日常的應(yīng)用編寫中最好能夠使用多線程的技術(shù)。在windows環(huán)境下開發(fā)多線程應(yīng)用程序可以利用提供的Win32API接口函數(shù),也可以利用微軟提供的MFC類庫(kù)進(jìn)行開發(fā)。兩種方式對(duì)于多線程編程原理是一樣的,用戶可以根據(jù)需要選擇相應(yīng)的工具。本實(shí)例主要用到的是MFC類庫(kù)實(shí)現(xiàn)多線程調(diào)度與處理。MFC類庫(kù)提供了對(duì)多線程編程的支持,使得多線程能方便的實(shí)現(xiàn)。MFC區(qū)分兩種類型的線程:工作線程和用戶接口線程。工作線程沒(méi)有消息機(jī)制,通常用來(lái)執(zhí)行后臺(tái)計(jì)算和維護(hù)任務(wù)。MFC為用戶接口線程提供消息機(jī)制,用來(lái)處理用戶的輸入,響應(yīng)用戶產(chǎn)生的事件消息。但對(duì)于Win32的API來(lái)說(shuō),這兩種線程并沒(méi)有區(qū)別,它只需要線程的啟

10、動(dòng)地址便啟動(dòng)線程執(zhí)行任務(wù)。用戶接口線程的一個(gè)典型應(yīng)用就是類CWinApp,類CWinApp是CWinThread類的派生類,應(yīng)用程序的主線程是由它提供,并由它負(fù)責(zé)處理用戶產(chǎn)生的事件和消息。系統(tǒng)設(shè)計(jì)本實(shí)例借用StarUML軟件繪制了整個(gè)程序的UML類視圖,這個(gè)類視圖在前期的代碼編寫上提供了很多幫助。UML類視圖能夠清晰地表明類與類之間的關(guān)系以及各個(gè)類所具有成員函數(shù)與成員變量。1.客戶端類視圖2.服務(wù)器端類視圖系統(tǒng)實(shí)現(xiàn)FTP文件傳輸客戶端一、單線程FTP客戶端設(shè)計(jì)步驟1.之前在CClientDlg類中已經(jīng)添加了兩個(gè)對(duì)話框的資源,為IDD_DIALOG_FTP對(duì)話框添加控件以及為控件添加成員變量。其

11、界面布局以及成員變量之間的關(guān)系分別如圖2.1表2.1所示。在頭文件中添加頭文件#include<afxinet.h>。圖2.1:FTP客戶端表2.1:?jiǎn)尉€程客戶端添加成員變量控件類型ID變量名控件類型ID變量名CButtonIDC_BUTTON_DOWNLOADm_btnDownloadCButtonIDC_BUTTON_RMOVEm_btnremoveCButtonIDC_BUTTON_UPLOADm_btnUploadCStringIDC_EDIT_PWDm_strPwdCStringIDC_EDIT_USERNAMEm_strUsernameCStringIDC_EDIT_S

12、ERVERNAMEm_strServernameCListBoxIDC_LIST_FIELm_listFileCButtonIDOKm_btnquery2.為按鈕添加消息響應(yīng):為“查詢”按鈕添加消息響應(yīng)void CFtpDlg:OnQuery(),用于查詢FTP服務(wù)器端上的文件。具體代碼如下:void CFtpDlg:OnQuery()/ TODO: 在此添加控件通知處理程序代碼/m_btnDownload.EnableWindow(TRUE);strflag = ""/初始化初始路徑UpdateData(TRUE);while (m_listFile.GetCount()

13、 != 0)m_listFile.DeleteString(0);/清空列表框List("");/查詢服務(wù)器上的文件m_btnUpload.EnableWindow(TRUE);m_btnDownload.EnableWindow(FALSE);m_btnremove.EnableWindow(FALSE);為“下載”按鈕添加消息響應(yīng)void CFtpDlg:OnDownload(),用于下載FTP服務(wù)器端的文件。具體代碼如下:void CFtpDlg:OnDownload()/ TODO: 在此添加控件通知處理程序代碼int sel = m_listFile.GetCur

14、Sel();CString strfilename;m_listFile.GetText(sel, strfilename);/獲取要下載文件的文件名if (strfilename.GetAt(0) !='')/判斷是否為文件夾,如果不為文件夾便下載CString strpathname;CFileDialog dlg(FALSE, "", strfilename);/新建一個(gè)文件對(duì)話框,F(xiàn)ALSE表示為存儲(chǔ)類型對(duì)話框,詳情見(jiàn)MSDNif (dlg.DoModal() = IDOK)strpathname = dlg.GetPathName();/保存文件要

15、存儲(chǔ)的路徑strfilename = strflag + strfilename;if (Download(strfilename, strpathname)/調(diào)用download函數(shù)下載文件MessageBox("下載成功");elseMessageBox("下載失敗");elseMessageBox("不能下載目錄");為“上傳”按鈕添加消息響應(yīng)void CFtpDlg:OnUpload(),用于上傳文件到FTP服務(wù)器。具體代碼如下:void CFtpDlg:OnUpload()/ TODO: 在此添加控件通知處理程序代碼Upda

16、teData(TRUE);CString strfilename;CString strpathname;CFileDialog dlg(TRUE);/創(chuàng)建用于上傳類型的文件對(duì)話框if (dlg.DoModal() = IDOK)strfilename = dlg.GetFileName();/保存文件名strpathname = dlg.GetPathName();/保存文件路徑if (Upload(strpathname, strfilename)/調(diào)用上傳函數(shù)MessageBox("上傳成功");elseMessageBox("上傳失敗");els

17、eMessageBox("請(qǐng)選擇文件");為“刪除”按鈕添加消息響應(yīng)void CFtpDlg:OnRemove(),用于刪除FTP服務(wù)器上的文件。具體代碼如下:void CFtpDlg:OnRemove()/刪除文件/ TODO: 在此添加控件通知處理程序代碼UpdateData(TRUE);CInternetSession* psession;CFtpConnection* pconnect;pconnect = NULL;psession = new CInternetSession(AfxGetAppName(), 1, PRE_CONFIG_INTERNET_ACC

18、ESS);trypconnect = psession->GetFtpConnection(m_strServername, m_strUsername, m_strPwd);catch (CInternetException* e)e->Delete();pconnect->Close();int sel = m_listFile.GetCurSel();CString strfilename;m_listFile.GetText(sel, strfilename);if (strfilename.GetAt(0) != '')int flag=Messag

19、eBox("是否刪除文件", "刪除", MB_YESNO);if (flag = IDYES)pconnect->Remove(strfilename);MessageBox("刪除成功");elseMessageBox("不能刪除文件夾");3.為CFtpDlg類添加成員函數(shù)添加用于查詢服務(wù)器文件的函數(shù)void CFtpDlg:List(CString strsourcename),具體代碼:void CFtpDlg:List(CString strsourcename)CInternetSession*

20、 psession;/新建一個(gè)Internet會(huì)話CFtpConnection* pconnect;/建立一個(gè)用于ftp連接的指針CFtpFileFind* pfilefind;/建立一個(gè)用于文件查詢的指針CString strfilename;pconnect = NULL;pfilefind = NULL;BOOL bContinue;psession = new CInternetSession();/初始化internet會(huì)話對(duì)象trypconnect = psession->GetFtpConnection(m_strServername, m_strUsername, m_s

21、trPwd);/通過(guò)internet會(huì)話對(duì)象調(diào)用函數(shù)創(chuàng)建ftp連接catch (CInternetException* e)e->Delete();pconnect = NULL;if (pconnect != NULL)pfilefind = new CFtpFileFind(pconnect);/初始化文件查找指針if (strsourcename = "")bContinue = pfilefind->FindFile("*");/如果為初始路徑查找全部文件,返回值為bool型elsebContinue = pfilefind->

22、FindFile(strsourcename);/查找相應(yīng)路徑文件if (!bContinue)pfilefind->Close();pfilefind = NULL;while (bContinue)bContinue = pfilefind->FindNextFileA();/繼續(xù)查找下一個(gè)文件strfilename = pfilefind->GetFileName();/獲得文件名if (pfilefind->IsDirectory()/判斷是否為目錄strfilename = "" + strfilename + ""/如

23、果為目錄則加上中括號(hào)顯示m_listFile.AddString(strfilename);/將文件名加入到列表框中if (pfilefind != NULL)pfilefind->Close();pfilefind = NULL;delete pfilefind;if (pconnect != NULL)pconnect->Close();delete pconnect;delete psession;添加響應(yīng)單擊列表框的消息效應(yīng)void CFtpDlg:OnDblclkListFile(),用于獲取列表框文件的信息。具體代碼:void CFtpDlg:OnSelchangeLi

24、stFile()/ TODO: 在此添加控件通知處理程序代碼m_btnquery.EnableWindow(TRUE);m_btnremove.EnableWindow(TRUE);m_btnDownload.EnableWindow(TRUE);添加響應(yīng)雙擊列表框的消息響應(yīng)void CFtpDlg:OnSelchangeListFile(),用于雙擊列表框時(shí)獲取信息。代碼如下:void CFtpDlg:OnDblclkListFile()/ TODO: 在此添加控件通知處理程序代碼CString strfilename;int sel = m_listFile.GetCurSel();/獲得

25、雙擊文件在列表框中的位置索引m_listFile.GetText(sel, strfilename);/調(diào)用gettext獲得文件名并將其存入字符串中int length = strfilename.GetLength();/獲取文件名的長(zhǎng)度if (strfilename.GetAt(0) = '')/判斷是否為文件夾strfilename = strfilename.Mid(1, length - 2);strflag += strfilename + "/"/保存新的路徑while (m_listFile.GetCount() != 0) m_listF

26、ile.DeleteString(0);/清空列表框List(strflag);/調(diào)用列表框查詢新路徑下的文件添加下載文件函數(shù),用于下載服務(wù)器端的文件BOOL CFtpDlg:Download(CString strfilename, CString strpathname)。BOOL CFtpDlg:Download(CString strfilename, CString strpathname)UpdateData(TRUE);CInternetSession* psession;CFtpConnection* pconnect;pconnect = NULL;psession = ne

27、w CInternetSession(AfxGetAppName(), 1, PRE_CONFIG_INTERNET_ACCESS);trypconnect = psession->GetFtpConnection(m_strServername, m_strUsername, m_strPwd);catch (CInternetException* e)e->Delete();pconnect->Close();return FALSE;if (pconnect != NULL)if (!pconnect->GetFile(strfilename, strpathna

28、me)/調(diào)用getfile文件下載文件pconnect->Close();delete pconnect;delete psession;return FALSE;if (pconnect != NULL)pconnect->Close();delete pconnect;delete psession;return TRUE;添加上傳文件函數(shù),用于上傳文件到服務(wù)器端BOOL CFtpDlg:Upload(CString strpathname, CString strfilename)。代碼如下:BOOL CFtpDlg:Upload(CString strpathname, C

29、String strfilename)UpdateData(TRUE);CInternetSession* psession;CFtpConnection* pconnect;pconnect = NULL;psession = new CInternetSession(AfxGetAppName(), 1, PRE_CONFIG_INTERNET_ACCESS);trypconnect = psession->GetFtpConnection(m_strServername, m_strUsername, m_strPwd);catch (CInternetException* e)e

30、->Delete();pconnect->Close();return FALSE;if (pconnect != NULL)if (!pconnect->PutFile(strpathname, strfilename)/上傳文件pconnect->Close();delete pconnect;delete psession;return FALSE;if (pconnect != NULL)pconnect->Close();delete pconnect;delete psession;return TRUE;4.為CFtpDlg類添加成員變量CStrin

31、g strflag,用于存儲(chǔ)查詢文件的路徑。二、多線程FTP文件傳輸客戶端設(shè)計(jì)步驟由于MFC中的多線程分為用戶接口線程和工作線程,本實(shí)例主要用到的是工作線程。工作線程主要作用是在需要啟動(dòng)該線程函數(shù)的時(shí)候只需調(diào)用AfxBeginThread()函數(shù)即可。此函數(shù)的作用是調(diào)用對(duì)應(yīng)的線程函數(shù)以實(shí)現(xiàn)對(duì)應(yīng)的功能。功能函數(shù)的函數(shù)原型如下:UINT ThreadFunc(LPVOID pParam)if(pParam=NULL)AfxEndThread(NULL);其中參數(shù)pParam是一個(gè)空指針,其可以指向任意的數(shù)據(jù)類型,只需在對(duì)應(yīng)的線程函數(shù)下編寫函數(shù)的功能即可。1.為IDD_DIALOG_MTFTP對(duì)話框

32、添加相應(yīng)的控件,然后為相應(yīng)的控件添加成員變量。界面布局與成員變量的添加均與之前單線程FTP客戶端一樣,詳情見(jiàn)圖2.1和表2.1。2為按鈕添加消息響應(yīng)為“查詢”按鈕添加消息響應(yīng)void MTFtpDlg:OnQuery(),用于啟動(dòng)查詢文件的線程函數(shù)。為“下載”按鈕添加消息響應(yīng)void MTFtpDlg:OnDownload(),用于啟動(dòng)下載文件的線程函數(shù)。為“上傳”按鈕添加消息響應(yīng)void MTFtpDlg:OnUpload(),用于啟動(dòng)上傳文件的線程函數(shù)。為“刪除”按鈕添加消息響應(yīng)void MTFtpDlg:OnRemove(),用于啟動(dòng)刪除文件的線程函數(shù)。3.為CMTFtpDlg類添加成員

33、函數(shù)和成員變量添加成員變量CString strhold,用于存儲(chǔ)查詢路徑,添加成員函數(shù)void MTFtpDlg:OnDblclkListFilemt(),用于響應(yīng)鼠標(biāo)雙擊列表框消息,用于獲取問(wèn)價(jià)信息。4.功能函數(shù)編寫在MTFtpDlg類中添加一個(gè)頭文件mtftp.h,用于編寫各個(gè)線程函數(shù),其各功能函數(shù)的編程與之前的單線程FTP客戶端的編程幾乎一樣,只需在各個(gè)對(duì)應(yīng)的線程函數(shù)內(nèi)編寫即可。由于mtftp.h中使用了MFC的類庫(kù)和WinInet的函數(shù),所以需要在mtftp.h中添加頭文件#include"MTFtpDlg.h",#include<afxinet.h>

34、。三、運(yùn)行結(jié)果課程小結(jié) 由于自己之前自學(xué)過(guò)C+編程,大學(xué)本科時(shí)也開設(shè)了相關(guān)MFC編程的課程,所以對(duì)C+編程有一定的了解。但是因?yàn)閷?duì)于C+編程的基本語(yǔ)法是通過(guò)自學(xué)的,還是有一定的局限性,因此在上面向?qū)ο蟪绦蛟O(shè)計(jì)這門課的過(guò)程中老師還是幫助我解決了許多之前一直困擾我的疑惑。在上課的過(guò)程中以及在課后關(guān)于程序的編寫我都花了大量的精力,雖然比較辛苦但是我還是比較快樂(lè),特別滿足于當(dāng)遇到困難之后通過(guò)各種方法將其解決之后的快感。在做課程設(shè)計(jì)的過(guò)程中和組員一起收獲了很多的快樂(lè),不僅能夠鞏固C+語(yǔ)言的基本理論知識(shí),而且還能夠發(fā)現(xiàn)自己的不足,在整個(gè)過(guò)程中感覺(jué)C+語(yǔ)言具有語(yǔ)言簡(jiǎn)潔、使用靈活、執(zhí)行效率高等特點(diǎn)。另外也發(fā)現(xiàn)

35、了理論知識(shí)和實(shí)際動(dòng)手操作還是有一定的區(qū)別,在整個(gè)過(guò)程中更加深刻地理解了C+的抽象性、封裝性、繼承性、和多態(tài)性。通過(guò)本次的課程設(shè)計(jì)我對(duì)整個(gè)程序設(shè)計(jì)的具體流程以及其中的原理有了更加深刻的理解。由于本次課程設(shè)計(jì)是以小組的形式完成的,我深刻體會(huì)到了團(tuán)隊(duì)的重要性,當(dāng)我遇到困難時(shí)總是和組內(nèi)成員一起討論解決方案,多數(shù)情況下問(wèn)題會(huì)得到解決,即使有時(shí)問(wèn)題無(wú)法當(dāng)場(chǎng)解決,但是通過(guò)大家的討論也會(huì)對(duì)問(wèn)題有更深一步地理解。在此,我要感謝我的組員薛堯、李玉菱兩位同學(xué),感謝他們和我一起共同面對(duì)問(wèn)題,共同解決問(wèn)題。接下來(lái)我希望對(duì)課程提一點(diǎn)小小的建議,我希望在以后的課程中能夠增加實(shí)踐環(huán)節(jié),老師在課堂上可以布置一定的任務(wù)讓同學(xué)們自己動(dòng)手操作,由于本身課程的學(xué)時(shí)比較少,只有通過(guò)這樣的方式才能夠推動(dòng)同學(xué)更加主動(dòng)的去學(xué)習(xí)。另外還要特別感謝一下甘玲老師,老師在課堂上講課清晰、明確,知識(shí)點(diǎn)的講解非常生動(dòng)、準(zhǔn)確,講課的過(guò)程非常幽默、易于接受。在學(xué)習(xí)的過(guò)程中曾經(jīng)遇到過(guò)許多問(wèn)題也向老師請(qǐng)教過(guò),感謝老師耐心的解答。填表日期: 2014.12.24 聊天室操作手冊(cè)本次基于MFC開發(fā)的聊天室主要由服務(wù)器和客戶端構(gòu)成,不同用戶可以通過(guò)客戶端進(jìn)行對(duì)話,服務(wù)器也可以發(fā)送服務(wù)器消息,在客戶端還可以進(jìn)行文件傳輸,文件傳輸有單線程和多線程的區(qū)別。一、 界面介紹1.

溫馨提示

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