版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、課課 程程 設(shè)設(shè) 計(jì)計(jì) 報(bào)報(bào) 告告課程名稱 Vc 環(huán)境下的 Windows 編程 題 目 聊天通訊軟件 指導(dǎo)教師 侯 霞 設(shè)計(jì)起止日期 系 別 計(jì)算機(jī)學(xué)院 專 業(yè) 計(jì)算機(jī)科學(xué)與技術(shù) 學(xué)生姓名 李杜松 班級/學(xué)號 計(jì) 0402/12 成 績 一、功能說明.3二、課程設(shè)計(jì)開發(fā)環(huán)境:.31、套接字的介紹.32、WIN SOCK的介紹.4、Socket API.4、CAsyncSocket.5、CSocket.63、CSOCKET使用.6三、工程及設(shè)計(jì).81、需求分析.8任務(wù)概述.8功能需求.81.3 性能需求.8運(yùn)行需求.82、概要設(shè)計(jì).8總體設(shè)計(jì).8數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì).9運(yùn)行設(shè)計(jì).9出錯(cuò)處理設(shè)計(jì).10出
2、錯(cuò)處理對策:.103、詳細(xì)設(shè)計(jì).10總體設(shè)計(jì).10需求概述.10軟件結(jié)構(gòu).10界面總接口.11程序描述效勞器端.11程序描述客戶端.164、程序?qū)崿F(xiàn).18運(yùn)行界面及其效果圖.18運(yùn)行說明.195、測試方案.19測試用例 1連接與斷開.19測試用例 2用戶名傳輸.21測試用例 3發(fā)送與過濾.226、總結(jié)報(bào)告.24技術(shù)方案評價(jià).24軟件質(zhì)量評價(jià).24課程設(shè)計(jì)過程中軟件開發(fā)時(shí)間分配評價(jià).25經(jīng)驗(yàn)與教訓(xùn).25總結(jié)與體會(huì).257、程序附錄.26主要運(yùn)行界面.26主要程序代碼.26四、 參考文獻(xiàn).38一、功能說明一、功能說明1、 支持多個(gè)客戶段在同時(shí)連接,在效勞器和多個(gè)客戶段之間進(jìn)行數(shù)據(jù)傳輸;2、 接受客
3、戶端發(fā)送信息顯示在一個(gè)列表框內(nèi);3、 在用戶進(jìn)入和離開時(shí),發(fā)布適當(dāng)?shù)膯柡蚝蜌g送信息;4、 將接受的某一客戶段的信息發(fā)給所有其他客戶端程序,實(shí)現(xiàn)聊天室信息同步;5、 當(dāng)效勞器停止效勞,向每個(gè)連接客戶端發(fā)送效勞終止通告。二、課程設(shè)計(jì)開發(fā)環(huán)境:二、課程設(shè)計(jì)開發(fā)環(huán)境:操作系統(tǒng):Windows XP開發(fā)工具:Visual C+網(wǎng)絡(luò)環(huán)境:互聯(lián)網(wǎng),局域網(wǎng),本機(jī)自聯(lián)均可1、套接字的介紹、套接字的介紹隨著計(jì)算機(jī)網(wǎng)絡(luò)的普及和 Internet 的迅速開展,越來越多的程序具備了網(wǎng)上與其它程序通信的能力。無論是在局域網(wǎng)還是廣域網(wǎng),軟件的通信都采取同樣的原那么。類似如下列圖:TCP/IP首先,一臺計(jì)算機(jī)中某個(gè)程序等帶著
4、一個(gè)程序的連接請求,這個(gè)應(yīng)用程序正在“監(jiān)聽種種連接請求,就像你在等待某人來 時(shí)守在 機(jī)旁一樣。同時(shí),另一個(gè)應(yīng)用程序試圖與第一個(gè)程序連接。這種翻開連接的做法與你打 類似。就像在打 時(shí)你必須知道對方的 號碼一樣,應(yīng)用程序要建立連接也必須知道對方網(wǎng)絡(luò)地址。但是你的電腦程序從邏輯上從邏輯上不可能只用這一個(gè)地址來完成成千上萬個(gè)程序的通信,所以除了網(wǎng)絡(luò)地址ip端口孕育而生。每一個(gè)端口從邏輯上就解決了對每一個(gè)程序使用網(wǎng)絡(luò)接口通信的問題。套接子,就等于是把端口,ip 等網(wǎng)絡(luò)接口這功能和在一起的一個(gè)網(wǎng)絡(luò)編程接口。通過他從邏輯的角度簡化了通訊的接口。這樣套接口通過下面的方法工作,事實(shí)上我的程序也是類似這么做的。發(fā)
5、送連接請求發(fā)送連接請求發(fā)送連接請求效勞器監(jiān)控客戶機(jī)效勞器端這樣,我們只要了解學(xué)習(xí)套接口的原理和類方法,就可輕松實(shí)現(xiàn)程序網(wǎng)絡(luò)互聯(lián)通信。2、Win sock 的的介紹介紹因?yàn)槌绦虻暮诵木褪且揽?MFC 封裝類 CSocket 來實(shí)現(xiàn)。所以下面把 CSocket 類以及它的周邊作一些介紹。首先 Socket 有同步阻塞方式和異步非阻塞方式兩種使用,事實(shí)上同步和異步在我們編程的生涯中可能遇到了很多,而 Socket 也沒什么特別。雖然同步好用,不費(fèi)力,但不能滿足一些應(yīng)用場合,其效率也很低。也許初涉編程的人不能理解“同步(或阻塞)和“異步(或非阻塞),其實(shí)簡單兩句話就能講清楚,同步和異步往往都是針對一
6、個(gè)函數(shù)來說的, “同步就是函數(shù)直到其要執(zhí)行的功能全部完成時(shí)才返回,而“異步那么是,函數(shù)僅僅做一些簡單的工作,然后馬上返回,而它所要實(shí)現(xiàn)的功能留給別的線程或者函數(shù)去完成。例如,SendMessage 就是“同步函數(shù),它不但發(fā)送消息到消息隊(duì)列,還需要等待消息被執(zhí)行完才返回;相反 PostMessage 就是個(gè)異步函數(shù),它只管發(fā)送一個(gè)消息,而不管這個(gè)消息是否被處理,就馬上返回。、Socket API首先應(yīng)該知道,有 Socket1.1 提供的原始 API 函數(shù),和 Socket2.0 提供的一組擴(kuò)展函數(shù),兩套函數(shù)。這兩套函數(shù)有重復(fù),但是 2.0 提供的函數(shù)功能更強(qiáng)大,函數(shù)數(shù)量也更多。這兩套函數(shù)可以靈
7、活混用,分別包含在頭文件 Winsock.h,Winsock2.h,分別需要引入庫 wsock32.lib、Ws2_32.lib。1、默認(rèn)用作同步阻塞方式,那就是當(dāng)你從不調(diào)用 WSAIoctl()和 ioctlsocket()來改變 Socket IO 模式,也從不調(diào)用 WSAAsyncSelect()和 WSAEventSelect()來選擇需要處理的 Socket 事件。正是由于函數(shù) accept(),WSAAccept(),connect(),WSAConnect(),send(),WSASend(),recv(),WSARecv()等函數(shù)被用作阻塞方式,所以可能你需要放在專門的線程里,
8、這樣以不影響主程序的運(yùn)行和主窗口的刷新。2、如果作為異步用,那么程序主要就是要處理事件。它有兩種處理事件的方法:客戶端客戶端套接口效勞器套接口群客戶端客戶端套接口客戶端客戶端套接口客戶端客戶端套接口第一種,它常關(guān)聯(lián)一個(gè)窗口,也就是異步 Socket 的事件將作為消息發(fā)往該窗口,這是由 WinSock 擴(kuò)展標(biāo)準(zhǔn)里的一個(gè)函數(shù) WSAAsyncSelect()來實(shí)現(xiàn)和窗口關(guān)聯(lián)。最終你只需要處理窗口消息,來收發(fā)數(shù)據(jù)。第二種,用到了擴(kuò)展標(biāo)準(zhǔn)里另一個(gè)關(guān)于事件的函數(shù) WSAEventSelect(),它是用事件對象的方式來處理 Socket 事件,也就是,你必須首先用 WSACreateEvent()來創(chuàng)立
9、一個(gè)事件對象,然后調(diào)用 WSAEventSelect()來使得 Socket 的事件和這個(gè)事件對象關(guān)聯(lián)。最終你將要在一個(gè)線程里用 WSAWaitForMultipleEvents()來等待這個(gè)事件對象被觸發(fā)。這個(gè)過程也稍顯復(fù)雜。2.2、CAsyncSocket看類名就知道,它是一個(gè)異步非阻塞 Socket 封裝類,CAsyncSocket:Create()有一個(gè)參數(shù)指明了你想要處理哪些 Socket 事件,你關(guān)心的事件被指定以后,這個(gè)Socket 默認(rèn)就被用作了異步方式。那么 CAsyncSocket 內(nèi)部到底是如何將事件交給你的呢?CAsyncSocket 的 Create()函數(shù),除了創(chuàng)立
10、了一個(gè) SOCKET 以外,還創(chuàng)立了個(gè)CSocketWnd 窗口對象,并使用 WSAAsyncSelect()將這個(gè) SOCKET 與該窗口對象關(guān)聯(lián),以讓該窗口對象處理來自 Socket 的事件(消息),然而 CSocketWnd 收到 Socket事件之后,只是簡單地回調(diào) CAsyncSocket:OnReceive(),CAsyncSocket:OnSend(),CAsyncSocket:OnAccept(),CAsyncSocket:OnConnect()等虛函數(shù)。所以CAsyncSocket 的派生類,只需要在這些虛函數(shù)里添加發(fā)送和接收的代碼。然而,最不容易被初學(xué) Socket 編程的
11、人理解的,也是本文最要提醒的一點(diǎn)是,客戶方在使用 CAsyncSocket:Connect()時(shí),往往返回一個(gè) WSAEWOULDBLOCK 的錯(cuò)誤(其它的某些函數(shù)調(diào)用也如此),實(shí)際上這不應(yīng)該算作一個(gè)錯(cuò)誤,它是 Socket 提醒我們,由于你使用了非阻塞 Socket 方式,所以(連接)操作需要時(shí)間,不能瞬間建立。既然如此,我們可以等待呀,等它連接成功為止,于是許多程序員就在調(diào)用Connect()之后,Sleep(0),然后不停地用 WSAGetLastError()或者CAsyncSocket:GetLastError()查看 Socket 返回的錯(cuò)誤,直到返回成功為止。這是一種錯(cuò)誤的做法,
12、斷言,你不能到達(dá)預(yù)期目的。事實(shí)上,我們可以在 Connect()調(diào)用之后等待 CAsyncSocket:OnConnect()事件被觸發(fā),CAsyncSocket:OnConnect()是要說明 Socket 要么連接成功了,要么連接徹底失敗了。至此,我們在CAsyncSocket:OnConnect()被調(diào)用之后就知道是否 Socket 連接成功了,還是失敗了。類似的,Send()如果返回 WSAEWOULDBLOCK 錯(cuò)誤,我們在 OnSend()處等待,Receive()如果返回 WSAEWOULDBLOCK 錯(cuò)誤,我們在 OnReceive()處等待,以此類推。還有一點(diǎn),也許是個(gè)難點(diǎn),
13、那就是在客戶方調(diào)用 Connect()連接效勞方,那么效勞方如何 Accept(),以建立連接的問題。簡單的做法就是在監(jiān)聽的 Socket 收到OnAccept()時(shí),用一個(gè)新的 CAsyncSocket 對象去建立連接,于是,上面的 pSocket 和客戶方建立了連接,以后的通信就是這個(gè) pSocket 對象去和客戶方進(jìn)行,而監(jiān)聽的 Socket 仍然繼續(xù)在監(jiān)聽,一旦又有一個(gè)客戶方要連接效勞方,那么上面的 OnAccept()又會(huì)被調(diào)用一次。當(dāng)然 pSocket 是和客戶方通信的效勞方,它不會(huì)觸發(fā) OnAccept()事件,因?yàn)樗皇潜O(jiān)聽 Socket。2.3、CSocketCSocket
14、是 MFC 在 CAsyncSocket 根底上派生的一個(gè)同步阻塞 Socket 的封裝類。它是如何又把 CAsyncSocket 變成同步的,而且還能響應(yīng)同樣的 Socket 事件呢?其實(shí)很簡單,CSocket 在 Connect()返回 WSAEWOULDBLOCK 錯(cuò)誤時(shí),不是在 OnConnect(),OnReceive()這些事件終端函數(shù)里去等待。你先必須明白 Socket事件是如何到達(dá)這些事件函數(shù)里的。這些事件處理函數(shù)是靠 CSocketWnd 窗口對象回調(diào)的,而窗口對象收到來自 Socket 的事件,又是靠線程消息隊(duì)列分發(fā)過來的??傊?,Socket 事件首先是作為一個(gè)消息發(fā)給 C
15、SocketWnd 窗口對象,這個(gè)消息肯定需要經(jīng)過線程消息隊(duì)列的分發(fā),最終 CSocketWnd 窗口對象收到這些消息就調(diào)用相應(yīng)的回調(diào)函數(shù)(OnConnect()等)。所以,CSocket 在調(diào)用 Connect()之后,如果返回一個(gè) WSAEWOULDBLOCK錯(cuò)誤時(shí),它馬上進(jìn)入一個(gè)消息循環(huán),就是從當(dāng)前線程的消息隊(duì)列里取關(guān)心的消息,如果取到了 WM_PAINT 消息,那么刷新窗口,如果取到的是 Socket 發(fā)來的消息,那么根據(jù) Socket 是否有操作錯(cuò)誤碼,調(diào)用相應(yīng)的回調(diào)函數(shù)(OnConnect()等)。這樣就能保證技能接收到信息,又能保險(xiǎn)證界面的響應(yīng)。3、CSocket 使用使用我前兩
16、天編的是 FTP 客戶端,但是因?yàn)槌松蠙C(jī)時(shí)間外都在家里編程,沒有可用的效勞器供我連接,并且現(xiàn)在的效勞器加了各種各樣的東西不讓你舒服連上,所以我最后也只好選擇了聊天程序。接觸了 FTP 之后再作聊天程序,才發(fā)現(xiàn) FTP 是要比聊天程序多了使用 CSocketFile 類和 CArchive 類FTP 必須使用這兩個(gè)類,而聊天工具如果不是為了保存信息就用不到 。類似下列圖:CSocketFileCArchiveCSocketCSocketCArchiveCSocketFile文件文件文件文件效勞器端效勞器端網(wǎng)絡(luò)網(wǎng)絡(luò)客戶端客戶端命令命令命令命令CSocketCSocket可見 FTP 需要至少兩個(gè)
17、端口,一個(gè)提供命令交換也就是 21 端口 ,一個(gè)提供文件數(shù)據(jù)交換上圖省略了上傳文件的路徑,只有下載文件的路徑 。這樣實(shí)現(xiàn)起來比聊天程序要困難一些。主要對于沒有接觸過 CSocket 類的我就是難上加難。所以我選擇了只使用 CSocket 類的聊天編程。聊天程序只需要下面局部的交換即:聊天信息聊天信息聊天信息聊天信息CSocketCSocket網(wǎng)絡(luò)網(wǎng)絡(luò)效勞器端效勞器端客戶端客戶端但是真正細(xì)化編碼會(huì)發(fā)現(xiàn),其實(shí)要比想象的要復(fù)雜許多。當(dāng)然我說的是邏輯上。見下列圖:注: 為觸發(fā),并不是直接調(diào)用客戶端客戶端客戶端客戶端Socket()Bind()Conect()Socket()Bind()Listen()
18、OnAccept偵聽套接字偵聽套接字Socket()OnReceive()Send()Close()連接套接字連接套接字Close()Close()Send()OnReceive()網(wǎng)絡(luò)網(wǎng)絡(luò)CString 可省略CString 可省略三、工程及設(shè)計(jì)三、工程及設(shè)計(jì)1、需求分析、需求分析任務(wù)概述任務(wù)概述目標(biāo):實(shí)現(xiàn)完成效勞器-客戶傳輸,客戶-客戶傳輸,群傳,單傳功能。運(yùn)行環(huán)境:使用 MFC 開發(fā)功能需求功能需求1、效勞器建立與停止可在不同端口建立;斷開時(shí)要對客戶發(fā)送信息2、客戶連接和斷開可對不同效勞器ip進(jìn)行連接同時(shí)向其他客戶發(fā)送信息;斷開時(shí)要對效勞器和其他用戶發(fā)送信息。3、識別客戶昵稱防止重名功能
19、;4、發(fā)送信息可選擇單一發(fā)送,或者群發(fā);5、接受信息時(shí)間和信息顯示在屏幕上。6、保存信息功能保存聊天信息7、客戶端過濾功能只接受個(gè)人信息8、效勞端強(qiáng)行關(guān)閉客戶功能踢人的功能性能需求性能需求數(shù)據(jù)精度:數(shù)據(jù)精度:1、消息數(shù)據(jù)可以隨意長2、命令數(shù)據(jù)固定,但是交換客戶姓名的時(shí)候除外。3、大多數(shù)據(jù)都是 CString 類型有少數(shù) char*類時(shí)間特性:時(shí)間特性:適應(yīng)網(wǎng)絡(luò)特點(diǎn),應(yīng)當(dāng)注意軟件的響應(yīng)時(shí)間。傳輸數(shù)據(jù)要經(jīng)可能的小。軟件適應(yīng)性:軟件適應(yīng)性:可在任意 Windows 操作系統(tǒng)執(zhí)行移植性:移植性: 軟件本身沒有移植性,但是其類可以反復(fù)調(diào)用。運(yùn)行需求運(yùn)行需求用戶界面需要人性化外。硬件接口、軟件接口、故障處
20、理均并沒有的要求2、概要設(shè)計(jì)、概要設(shè)計(jì)總體設(shè)計(jì)總體設(shè)計(jì)軟件只分兩層界面層和邏輯層,因?yàn)闀r(shí)間有限,所以沒有參加數(shù)據(jù)庫來保存數(shù)據(jù)。效勞器端:效勞器端:界面層:界面層:主要都是提供主要都是提供邏輯層:邏輯層:主要是接受主要是接受客戶端:客戶端:邏輯層:邏輯層:界面層:界面層:端口信息端口信息輸出窗口信息輸出窗口信息輸入窗口信息輸入窗口信息輸出對象窗口信息輸出對象窗口信息效勞開始模塊效勞開始模塊發(fā)信息模塊發(fā)信息模塊偵聽套接口偵聽套接口對應(yīng)客戶套接口對應(yīng)客戶套接口轉(zhuǎn)發(fā)客戶信息模塊轉(zhuǎn)發(fā)客戶信息模塊客戶對應(yīng)效勞器套接口客戶對應(yīng)效勞器套接口效勞器地址效勞器地址端口端口輸出窗口信息輸出窗口信息輸入窗口信息輸入窗
21、口信息輸出對象窗口信息輸出對象窗口信息客戶連接離開模塊客戶連接離開模塊聊天開始模塊聊天開始模塊昵稱昵稱接受信息模塊接受信息模塊發(fā)送信息模塊發(fā)送信息模塊網(wǎng)絡(luò)局部由網(wǎng)絡(luò)局部由 CSocket 自己解決自己解決聊天關(guān)閉模塊聊天關(guān)閉模塊效勞關(guān)閉模塊效勞關(guān)閉模塊模塊之間的通信已經(jīng)省略模塊之間的通信已經(jīng)省略數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)邏輯結(jié)構(gòu):邏輯結(jié)構(gòu):主要依靠 CSocket 完成網(wǎng)絡(luò)局部,所以所有邏輯結(jié)構(gòu)都是基于 CSokcet 的。見上圖,首先需要偵聽套接口,之后得到消息后,為客戶創(chuàng)立新的對應(yīng)的套接口,以后通信使用這個(gè)。而偵聽套接口新的用戶的接入。物理結(jié)構(gòu)設(shè)計(jì):物理結(jié)構(gòu)設(shè)計(jì):沒有物理層面上的設(shè)計(jì)數(shù)據(jù)結(jié)構(gòu)
22、與程序的關(guān)系:數(shù)據(jù)結(jié)構(gòu)與程序的關(guān)系:CSocket 套接口結(jié)構(gòu)是整個(gè)軟件的核心當(dāng)然還有 MFC 其他根本結(jié)構(gòu) 。除此之外本軟件再?zèng)]有其他數(shù)據(jù)結(jié)構(gòu)。值得提出來的是。我們需要 CSocket 的派生類。出于某種需要,我們必須產(chǎn)生以CSocket 為父類的派生類如:CListeningSocket CClientSocket CChatSocket。這些類的OnReceive(),OnAccept(),是自動(dòng)調(diào)用的,我們只需要 Override 它們,就可實(shí)現(xiàn)我們的信息聯(lián)通。運(yùn)行設(shè)計(jì)運(yùn)行設(shè)計(jì)事實(shí)上,本軟件實(shí)在太小,沒有什么可劃分的模塊勉強(qiáng)的劃分一下,如上頁的接口模塊圖。在運(yùn)行的時(shí)候它們彼此聯(lián)系緊密,
23、耦合性很大,所以倒不如說是一個(gè)整體。但是出于想讓軟件的介紹更加明確,我們還是把它分成幾個(gè)模塊。這些模塊需要先運(yùn)行“開始模塊,最后執(zhí)行“關(guān)閉模塊,其他模塊都能在這兩個(gè)模塊調(diào)用之間調(diào)用。出錯(cuò)處理設(shè)計(jì)出錯(cuò)處理設(shè)計(jì)出錯(cuò)輸出信息出錯(cuò)輸出信息:客戶端客戶端:1、連接失敗信息2、ip 錯(cuò)誤信息3、端口錯(cuò)誤信息4、昵稱錯(cuò)誤信息5、輸入為空信息6、套接口創(chuàng)立失敗信息7、套接口自身檢查出錯(cuò)信息效勞器效勞器1、 效勞開啟失敗信息2、 套接口創(chuàng)立失敗信息3、 偵聽失敗信息4、 輸入為空信息5、 套接口自身檢查出錯(cuò)信息出錯(cuò)處理對策:出錯(cuò)處理對策:根本采用出錯(cuò)就繞過的方法。比方,現(xiàn)在你輸入非法數(shù)值,馬上 AfxMessa
24、geBox(“錯(cuò)誤信息);return;關(guān)閉操作;這樣做防止了不必要的操作。3、詳細(xì)設(shè)計(jì)、詳細(xì)設(shè)計(jì)總體設(shè)計(jì)總體設(shè)計(jì)需求概述需求概述本局部需要把上面的理論復(fù)制與實(shí)際編碼軟件結(jié)構(gòu)軟件結(jié)構(gòu)根本定義已經(jīng)不變,此局部與概要設(shè)計(jì)相同。值得注意的是值得注意的是 MFC 提供了 WinSock 的初始化包括頭文件:“還有調(diào)用AfxSocketInit()他在主 cpp 文件的 InitInstance()里調(diào)用只有他調(diào)用成功,才能正常使用 Socket。界面總接口界面總接口效勞器端:效勞器端:變量 ID變量類型 變量名稱用處按鍵開始效勞按鍵關(guān)閉效勞按鍵發(fā)送信息按鍵復(fù)制信息按鍵清空按鍵踢人組合框發(fā)送對象編輯框輸
25、入編輯框輸出顯示編輯框端口記錄客戶端:客戶端:變量 ID變量類型 變量名稱用處按鍵連接效勞器按鍵發(fā)送信息按鍵斷開效勞器按鍵保存信息按鍵清空信息復(fù)選框過濾信息組合框發(fā)送對象文本框發(fā)送信息文本框記錄效勞器 ip文本框記錄端口文本框記錄昵稱文本框用來顯示程序描述程序描述效勞器端效勞器端CListeningSocket 類類主要功能:主要功能:用于偵聽,創(chuàng)立保存客戶 CClientSocket 。主要參數(shù):主要參數(shù):m_client 就是 CClientSocket數(shù)組 。它從 10 是空的,用于群發(fā)信息時(shí)的標(biāo)志開始保存客戶 CSocket(實(shí)際上是下面介紹的 CClientSocket)。 m_cl
26、ientnum 記錄客戶數(shù)量。類似指針長度。并且在 OnAccept 時(shí)候當(dāng)作分配CClientSocket:m_clientNO 的根據(jù)。m_pDlg 就是主窗體句柄。方便互相調(diào)用。m_nMsgCount 原本意記錄信息量條數(shù) ,但后來沒有用上。主要成員函數(shù):主要成員函數(shù):OnAcceptint nErrorCode主要功能:主要功能:重載父類 OnAccept(int nErrorCode)用于在偵聽后,接受客戶端 Connect()時(shí)自行調(diào)用的函數(shù)。里面有產(chǎn)生新的 CClientSocket的構(gòu)造函數(shù)和初始化函數(shù)。輸入項(xiàng)輸入項(xiàng):int nErrorCode。因?yàn)槭侵剌d函數(shù)具體這個(gè)東西做什
27、么用還不太清楚,看上去像是錯(cuò)誤類別號。輸出項(xiàng):輸出項(xiàng):void算法:算法: 使用簡單的判斷語句,沒有使用任何算法。程序邏輯:程序邏輯:構(gòu)造函數(shù):構(gòu)造函數(shù):CListeningSocketCServerDlg *pDlg功能:功能:就是初始化類參數(shù)輸入項(xiàng):輸入項(xiàng):CServerDlg *pDlg析構(gòu)函數(shù):析構(gòu)函數(shù):CListeningSocket ;保持默認(rèn)CClientSocket 類類主要功能:主要功能:對應(yīng)每一個(gè)用戶的套接口,實(shí)現(xiàn)接受功能。當(dāng)然也實(shí)現(xiàn)發(fā)送功能(發(fā)送功能沒有重載是因?yàn)樵趯υ捒蝾悆?nèi)進(jìn)行了修改)。主要參數(shù):主要參數(shù):m_clentName 用于記錄昵稱,在首次傳輸中得到。m_cl
28、ientNO 用于記錄當(dāng)前客戶在 m_client 的位置,以確定刪除和發(fā)送信息。m_isfirst 判斷是否為第一次傳輸如果是那么顯示 True。父類 OnAccept(nErrorCode)增加用戶創(chuàng)立對應(yīng)用戶的 CClientSocket 實(shí)例,放入 client 數(shù)組里新建的客戶套接口Accept設(shè)置新建客戶套接口的代號成功失敗很少發(fā)生結(jié)束刪除對應(yīng)套接口較少用戶數(shù)量開始創(chuàng)立失敗忽略!assert:絕對不會(huì)失敗m_pDlg 用法同樣在 CListeningSocket主要成員函數(shù)主要成員函數(shù)OnReceive(int nErrorCode)主要功能:主要功能:重載父類 OnReceive
29、(int nErrorCode)在接受信息時(shí)觸發(fā),自動(dòng)處理轉(zhuǎn)發(fā)給其他用戶。當(dāng)然也給自己的 ListBox 加信息。輸入項(xiàng)輸入項(xiàng):int nErrorCode輸出項(xiàng):輸出項(xiàng):void算法:算法:使用簡單的判斷語句,沒有使用任何算法。程序邏輯:程序邏輯:構(gòu)造函數(shù):構(gòu)造函數(shù):CClientSocketCServerDlg *pDlg功能:就是初始化類參數(shù)輸入項(xiàng):CServerDlg *pDlg析構(gòu)函數(shù):析構(gòu)函數(shù):CClientSocket ;保持默認(rèn)CServerDlg 類類對話框主類對話框主類主要功能:主要功能:創(chuàng)立對話框,完成界面所有模塊的具體功能。主要參數(shù):主要參數(shù):m_BS 開始效勞按鈕變量
30、用于禁用選擇。 m_BSt 終止效勞按鈕變量用于禁用選擇父類 OnReceive (nErrorCode)Receive 讀取信息得到發(fā)送對象如果是第一次是否傳輸已登錄用戶信息增加用戶昵稱群發(fā)信息客戶昵稱重名否開始開始是否關(guān)閉命令否是是否過濾命令否是是否為群發(fā)否是單發(fā)信息設(shè)置過濾項(xiàng)群發(fā)此用戶關(guān)閉信息刪除操作結(jié)束效勞器端顯示返回昵稱重名錯(cuò)誤結(jié)束是群發(fā)新登錄用戶信息效勞器端顯示m_BtnSend 發(fā)送按鈕變量用于禁用選擇m_in 輸入框變量m_nServerPort 端口框變量m_out 輸出框變量m_pSocket 偵聽套接口指針m_to 發(fā)送對象變量主要成員函數(shù):主要成員函數(shù):void Add
31、StringCString str主要功能:把字符串顯示在編輯框內(nèi),增加了時(shí)間和換行。int Getto(CString name)主要功能:把字符串對應(yīng)的套接口編號找出來返回。void OnOK()主要功能:編輯框按 Enter 默認(rèn)調(diào)用 OnOK()。如果不重載,將會(huì)造成關(guān)閉對話框的情況。所以修改成傳送輸入框的信息到OnBtnSend(),這樣就類似 QQ 的直接按 Enter 發(fā)送信息的模式。程序邏輯:見右- void Deletem_to(CString str);主要功能:刪除對應(yīng)字符串的組合框記錄傳送對象值。BOOL SameName(CString str);主要功能:查找是否有
32、與輸入串相同的遠(yuǎn)程(已登錄)客戶昵稱。void DeleteOne(int NO);主要功能:刪除對應(yīng)號碼的登錄客戶套接口。void SendTo(CString str,int NO);主要功能:把消息送給 NO 號碼的套接口用戶。void SendAll(CString str,int NO);主要功能:把消息傳送給除了除了 NO 號碼套接口客戶外號碼套接口客戶外的所有用戶。程序邏輯:見右- afx_msg void OnBtnstart();OnOK()得到當(dāng)前焦點(diǎn)assert 焦點(diǎn)非空uID 是發(fā)送編輯框框是否得到焦點(diǎn) uID發(fā)送按鍵可用是否發(fā)送到發(fā)送按鍵事件結(jié)束否否標(biāo)記小于最大用戶數(shù)
33、是SendAll();初始華標(biāo)記標(biāo)記自加 1標(biāo)記是 NO是否標(biāo)記用戶是過濾用戶是結(jié)束發(fā)送信息主要功能:開始效勞。程序邏輯:類似最開始總體設(shè)計(jì)局部的邏輯,在此就不多說。afx_msg void OnBtnstop();主要功能:停止效勞,并通知所有用戶。afx_msg void OnBtnSend();主要功能:發(fā)送信息。afx_msg void OnCopyAll();主要功能:拷貝顯示用編輯框內(nèi)所有內(nèi)容。afx_msg void OnClear();主要功能:清空顯示用編輯框。afx_msg void OnKick();主要功能:刪除當(dāng)前組合框內(nèi)的用戶,并通知其它用戶。程序邏輯:見右- 程序
34、描述程序描述客戶端客戶端CChatSocket 類類主要功能:主要功能:發(fā)送和接收效勞器信息的套接口類,繼承CSocket.主要參數(shù):主要參數(shù):m_pDlg 跟效勞器端樣不贅述m_needUpdate 其實(shí)和效勞器端 isfirst 一個(gè)性質(zhì),首次傳輸由此判斷主要成員函數(shù):主要成員函數(shù):OnReceive(int nErrorCode)主要更能:主要更能:同效勞器,主要能夠判別系統(tǒng)來的信息和命令。CChatClientDlg 類類對話框主類對話框主類是否OnKick();得到當(dāng)前組合框內(nèi)用戶名稱名稱是“所有人給出不能刪除信息刪除組合框內(nèi)對應(yīng)信息組合框歸位得到用戶 client 中位置號群發(fā)用戶
35、被踢信息對用戶發(fā)送關(guān)閉信息顯示信息刪除操作結(jié)束主要功能:主要功能:主要負(fù)責(zé)對話框的構(gòu)造初始化,連接效勞器及實(shí)現(xiàn)其它所有功能主要參數(shù):主要參數(shù):m_pSocket CChatSocket*類型變量來保存套接口m_out 顯示用編輯框 m_Btnsend 發(fā)送按鍵變量m_to 發(fā)送對象m_ip 效勞器地址編輯框m_port 效勞器端口編輯框m_name 用戶昵稱編輯框m_in 輸入編輯框m_lv 過濾設(shè)置變量主要成員函數(shù):主要成員函數(shù):void AddString(CString str);主要功能:在顯示編輯框中怎加時(shí)間,信息,換行。void OnOK();主要功能:重載 OnOK(),在編輯框
36、中默認(rèn) Enter 調(diào)用函數(shù)。如果是發(fā)送編輯框那么調(diào)用發(fā)送按鈕函數(shù)。void Deletem_to(char* str,int length);主要功能:刪除對應(yīng)用戶名稱。void CopytoClipboard(CString str);主要功能:調(diào)用系統(tǒng)剪貼板,粘貼字符串。void newName(char* str,int length);主要功能:從信息中找到新用戶的名字。void Disconnect();主要功能:與效勞器斷開連接操作。為了效勞器發(fā)來的斷開信息單獨(dú)分開。主要是操作空間的 Enable。afx_msg void OnBtnconnect();主要功能:連接操作。串標(biāo)志
37、位自加 1串是否結(jié)束是否是否為開關(guān)符是否開關(guān)已開是否開關(guān)反置是否為名結(jié)束符是Deletem_to 開始開始保存名字非空是刪除對應(yīng)尋找對應(yīng)名稱在對象框結(jié)束否否保存一個(gè)字符afx_msg void OnBtnSend();主要功能:發(fā)送功能。afx_msg void OnDisConnect();主要功能:自主斷開連接時(shí)調(diào)用,會(huì)現(xiàn)象效勞器發(fā)送信息,之后斷開。afx_msg void OnCopyAll();主要功能:全部拷貝。afx_msg void OnButton5();主要功能:清空顯示編輯框。afx_msg void OnCheck1();主要功能:當(dāng)點(diǎn)擊過濾選擇框時(shí),發(fā)送信息到效勞器來更
38、改自己過濾狀態(tài)。4、程序?qū)崿F(xiàn)、程序?qū)崿F(xiàn)運(yùn)行界面及其效果圖運(yùn)行界面及其效果圖效勞器界面效勞器界面由于時(shí)間原因,界面布置的并不是十分漂亮。并且很多按鍵布置的可能不太合理。但總的來說,應(yīng)該能很好的完成任務(wù)了。按鍵開始效勞按鍵關(guān)閉效勞按鍵發(fā)送信息按鍵復(fù)制信息按鍵清空按鍵踢人組合框發(fā)送對象編輯框輸入OnBtnSend 開始開始接受界面數(shù)據(jù)結(jié)束串為空提示出錯(cuò)是否得到發(fā)送對象組合對象和內(nèi)容發(fā)送內(nèi)容顯示框顯示發(fā)送框清空編輯框輸出顯示編輯框端口記錄客戶端界面客戶端界面按鍵連接效勞器按鍵發(fā)送信息按鍵斷開效勞器按鍵保存信息按鍵清空信息復(fù)選框過濾信息組合框發(fā)送對象文本框發(fā)送信息文本框記錄效勞器ip文本框記錄端口文本框
39、記錄昵稱文本框用來顯示運(yùn)行說明運(yùn)行說明需要先運(yùn)行效勞器端的“開始效勞,之后是客戶端的“連接,軟件才能正常工作。5、測試方案、測試方案測試用例測試用例 1連接與斷開連接與斷開目的:目的:測試連接建立和斷開情況步驟及操作步驟及操作:1、 效勞器端“效勞開始按鈕 客戶端“連接按鈕2、 效勞器端“效勞開始按鈕 客戶端“連接按鈕效勞器端“效勞中止按鈕3、 效勞器端“無操作 客戶端“連接按鈕4、 客戶端:“連接按鈕效勞器端“效勞開始按鈕客戶端“連接按鈕5、 效勞器端“效勞開始按鈕 “停止效勞按鈕 客戶端“連接按鈕6、 效勞器端“效勞開始按鈕 “停止效勞按鈕 “效勞開始按鈕 客戶端“連接按鈕7、 效勞器端“
40、效勞開始按鈕 客戶端“連接按鈕 “斷開按鈕8、 效勞器端“效勞開始按鈕 客戶端“連接按鈕 “斷開按鈕 “連接按鈕9、 多用戶效勞器端“效勞開始按鈕 客戶端 1“連接按鈕客戶端2“連接按鈕客戶端 3“連接按鈕10、9 之后,依次“關(guān)閉11、9 之后,效勞器“停止效勞結(jié)果:結(jié)果:下面序號對應(yīng)上面試驗(yàn)用例下面序號對應(yīng)上面試驗(yàn)用例1、結(jié)果正常,說明正常順序下的單用戶登錄沒有問題效勞器端:10:39:40效勞開始!10:39:43:lidusong:進(jìn)入聊天室!他是第1 位客人。客戶端:10:39:43您已經(jīng)成功登陸!2、結(jié)果正常,說明效勞器關(guān)閉不會(huì)導(dǎo)致客戶端錯(cuò)誤效勞器端:10:39:40效勞開始!10
41、:39:43:lidusong:進(jìn)入聊天室!他是第1 位客人。10:41:20效勞終止!客戶端:10:39:43您已經(jīng)成功登陸!10:41:20效勞關(guān)閉!結(jié)果正常,說明客戶端檢測不到效勞器不會(huì)出現(xiàn)崩潰??蛻舳耍簾o法連接效勞對話框,提示重連 3、結(jié)果正常,說明客戶端建立連接撤銷后,在進(jìn)行連接不會(huì)出錯(cuò)。4、結(jié)果正常,客戶端提示無法找到效勞器。說明效勞器確實(shí)關(guān)閉了。5、結(jié)果正常,說明效勞器關(guān)閉后再起不會(huì)出現(xiàn)錯(cuò)誤。效勞器端:0:48:30效勞開始!10:48:30效勞終止!10:48:31效勞開始!10:48:33:lidusong:進(jìn)入聊天室!他是第 1 位客人??蛻舳耍?0:48:33您已經(jīng)成功登
42、陸!6、結(jié)果正常,說明客戶可以正常斷開連接。效勞器端:10:48:33:lidusong:進(jìn)入聊天室!他是第1 位客人。10:50:12:lidusong:退出聊天室客戶端:10:48:33您已經(jīng)成功登陸!10:50:12您與效勞器斷開!7、結(jié)果正常,說明客戶端在斷開連接后,再登錄不會(huì)出錯(cuò)。效勞器端:10:56:03:lidusong:進(jìn)入聊天室!他是第1 位客人。10:56:04:lidusong:退出聊天室10:56:04:lidusong:進(jìn)入聊天室!他是第1 位客人??蛻舳耍?0:56:03您已經(jīng)成功登陸!10:56:04您與效勞器斷開!10:56:04您已經(jīng)成功登陸!8、結(jié)果正常,特
43、意測試了重命名登錄,系統(tǒng)會(huì)提示給用戶,軟件正常效勞器端:10:57:41效勞開始!10:57:45:lidusong:進(jìn)入聊天室!他是第 1 位客人。10:57:47:2:進(jìn)入聊天室!他是第 2 位客人。10:57:49有客戶重名名登陸!已經(jīng)斷開10:57:51:1:進(jìn)入聊天室!他是第 3 位客人??蛻舳?1:10:57:45您已經(jīng)成功登陸!10:57:47:2:進(jìn)入聊天室!他是第 2 位客人。10:57:51:1:進(jìn)入聊天室!他是第 3 位客人??蛻舳?2:10:57:47您已經(jīng)成功登陸!10:57:51:1:進(jìn)入聊天室!他是第 3 位客人??蛻舳?3:10:57:49您已經(jīng)成功登陸!10:
44、57:49您已經(jīng)與系統(tǒng)斷開!10:57:49您的昵稱與其他人重名,請更改!10:57:51您已經(jīng)成功登陸!9、結(jié)果正常,說明在多用戶下,客戶的退出沒有問題。并且通知其他客戶很及時(shí)。效勞器端:11:01:24:lidusong:退出聊天室11:01:26:2:退出聊天室11:01:27:1:退出聊天室客戶端 1:11:01:24您與效勞器斷開!客戶端 2:11:01:24:lidusong:退出聊天室11:01:26您與效勞器斷開!客戶端 3:11:01:24:lidusong:退出聊天室11:01:26:2:退出聊天室11:01:27您與效勞器斷開!10、結(jié)果正常,效勞器端,客戶端都關(guān)閉了連接
45、,并且都不能互相通信。效勞器端:11:02:49效勞終止!所有客戶端:11:02:49效勞關(guān)閉!評價(jià)評價(jià)此工程測試完全通過,因?yàn)樘崾惧e(cuò)誤和錯(cuò)誤處理做得很完善,所以沒有出現(xiàn)意外情況。測試用例測試用例 2用戶名傳輸用戶名傳輸目的:目的:測試連接建立后用戶名稱的傳遞和更新。步驟及操作:步驟及操作:1、效勞器端“開始效勞客戶端“連接2、效勞器端“開始效勞客戶端 1“連接客戶端 2“連接3、1 之后 客戶端“斷開4、2 之后 客戶端 1“斷開客戶端 2“斷開結(jié)果:結(jié)果:下面序號對應(yīng)上面試驗(yàn)用例下面序號對應(yīng)上面試驗(yàn)用例1、結(jié)果正常,說明正常順序下的單用戶登錄,效勞器端會(huì)紀(jì)錄客戶信息,而客戶不會(huì)受到別的信息
46、。效勞器端:客戶端:2、結(jié)果正常,說明正常順序下的多用戶登錄,效勞器端會(huì)紀(jì)錄客戶信息,并向心登錄客戶發(fā)送現(xiàn)在已經(jīng)登錄的客戶信息。當(dāng)新用戶登錄時(shí),效勞器還會(huì)轉(zhuǎn)發(fā),新用戶登錄信息給別的用戶。效勞器端:客戶端 1:客戶端 1:3、結(jié)果正常,說明登錄后,正常退出,效勞器會(huì)正常刪除登錄客戶信息。效勞器端:客戶端:4、結(jié)果正常,說明所有客戶正常退出后,都正常。效勞器端:客戶端 1:客戶端 2:評價(jià):評價(jià):所有功能正常,說明在傳送名稱上的編程,還算成功。雖然方法土了一點(diǎn)全部是拿字符串傳輸 。測試用例測試用例 3發(fā)送與過濾發(fā)送與過濾目的:目的:測試連接建立后用戶名間,或者效勞器與用戶的信息傳遞和客戶的信息過濾
47、。步驟及操作:步驟及操作:1、效勞器端“開始效勞客戶端“連接 “發(fā)送信息效勞器端:“發(fā)送信息2、效勞器端“開始效勞客戶端 1:“連接客戶端 2“連接 “發(fā)送信息客戶端 1“發(fā)送信息效勞器端:“發(fā)送信息3、2 之后 客戶端 4 連接客戶端 1 向“客戶端 2“發(fā)送“信息客戶端 2 向“客戶端 1“發(fā)送“信息效勞器向“客戶端 1“發(fā)送“信息4、2 之后 客戶端 2“群發(fā)屏蔽效勞器端:“發(fā)送信息客戶端 1“發(fā)送群發(fā)信息向“客戶端 2” “發(fā)送信息結(jié)果:結(jié)果:下面序號對應(yīng)上面試驗(yàn)用例下面序號對應(yīng)上面試驗(yàn)用例1、結(jié)果正常,說明單用戶于效勞器聊天正常效勞器端:02:19:21效勞開始!02:19:24:l
48、idusong:進(jìn)入聊天室!他是第1 位客人。02:19:53lidusong 對 大家 說 你好02:20:02效勞器 對 所有人 說 你好客戶端:02:19:24您已經(jīng)成功登陸!02:19:53我對 所有人 說 你好02:20:02效勞器 對 所有人 說 你好2、結(jié)果正常,說明多用戶群聊正常效勞器端:02:21:13效勞開始!02:21:15:lidusong:進(jìn)入聊天室!他是第1 位客人。02:21:16:123:進(jìn)入聊天室!他是第 2 位客人。02:21:37123 對 大家 說 大家好02:21:46lidusong 對 大家 說 大家好02:21:48效勞器 對 所有人 說 大家好
49、客戶端 1:02:21:15您已經(jīng)成功登陸!02:21:16:123:進(jìn)入聊天室!他是第 2 位客人。02:21:37123 對 大家 說 大家好02:21:46我對 所有人 說 大家好02:21:48效勞器 對 所有人 說 大家好客戶端 2:02:21:16您已經(jīng)成功登陸!02:21:37我對 所有人 說 大家好02:21:46lidusong 對 大家 說 大家好02:21:48效勞器 對 所有人 說 大家好3、結(jié)果正常,說明多用戶,單聊得實(shí)現(xiàn),效勞器可以看見所有人的信息??蛻糁g能看見傳給自己的單聊。4、效勞器端:02:24:36效勞開始!02:24:37:lidusong:進(jìn)入聊天室!
50、他是第 1 位客人。02:24:38:123:進(jìn)入聊天室!他是第 2 位客人。02:24:41:4:進(jìn)入聊天室!他是第 3 位客人。02:25:47lidusong 對 123 說 hallo!02:25:56123 對 lidusong 說 hallo!02:26:04效勞器 對 lidusong 說 hallo02:26:10效勞器 對 123 說 hallo客戶端 1:02:24:37您已經(jīng)成功登陸!02:24:38:123:進(jìn)入聊天室!他是第 2 位客人。02:24:41:4:進(jìn)入聊天室!他是第 3 位客人。02:25:47我對 123 說 hallo!02:25:56123 對 li
51、dusong 說 hallo!02:26:04效勞器 對 lidusong 說 hallo 客戶端 2:客戶端 2:02:24:38您已經(jīng)成功登陸!02:24:41:4:進(jìn)入聊天室!他是第 3 位客人。02:25:47lidusong 對 123 說 hallo!02:25:56我對 lidusong 說 hallo!02:26:10效勞器 對 123 說 hallo客戶端 3:02:24:41您已經(jīng)成功登陸!5、客戶之間屏蔽工作正常,但是效勞器的群發(fā)也被屏蔽了。這是一個(gè)錯(cuò)誤。效勞器端:02:32:12效勞開始!02:32:12:lidusong:進(jìn)入聊天室!他是第 1 位客人。02:32:1
52、3:123:進(jìn)入聊天室!他是第 2 位客人。02:32:14:4:進(jìn)入聊天室!他是第 3 位客人。02:32:22123 設(shè)置為過濾群發(fā)信息!02:32:39效勞器 對 所有人 說 這里是效勞器02:33:34lidusong 對 大家 說 這里是客戶端 102:33:40lidusong 對 123 說 你好客戶端 1:02:32:12您已經(jīng)成功登陸!02:32:13:123:進(jìn)入聊天室!他是第 2 位客人。02:32:14:4:進(jìn)入聊天室!他是第 3 位客人。02:32:39效勞器 對 所有人 說 這里是效勞器02:33:34我對 所有人 說 這里是客戶端 102:33:40我對 123
53、說 你好客戶端 2:02:32:13您已經(jīng)成功登陸!02:32:14:4:進(jìn)入聊天室!他是第 3 位客人。02:33:40lidusong 對 123 說 你好客戶端 3:02:32:14您已經(jīng)成功登陸!02:32:39效勞器 對 所有人 說 這里是效勞器02:33:34lidusong 對 大家 說 這里是客戶端 1評價(jià):評價(jià):發(fā)送功能很成功,但是屏蔽功能是后參加的,錯(cuò)誤就出現(xiàn)了。這也是軟件檢錯(cuò)局部唯一的建功點(diǎn)。6、總結(jié)報(bào)告、總結(jié)報(bào)告技術(shù)方案評價(jià)技術(shù)方案評價(jià)首先在對 CSocket 完全不了解的前提下,通過學(xué)習(xí)和實(shí)踐,把軟件做出來并完成了任務(wù),從這一點(diǎn)上,在技術(shù)方面的評獎(jiǎng)應(yīng)該很高的。但是,很
54、多書都應(yīng)用了串行化處理這一步,使用 CArchive 類。而作者,認(rèn)為 CSocket 局部還不太了解呢,這時(shí)候再引入不了解的類會(huì)對整個(gè)編程的難度有較大的增加。所以決定,想另外的方法,實(shí)現(xiàn)傳輸。結(jié)果說明,整個(gè)軟件的理解到達(dá)了一定程度。但在信息傳遞的有效性和正規(guī)方面做得很差。以至于,相對的降低了開發(fā)效率用戶姓名傳輸局部,請看代碼局部的 OnReceive 函數(shù) 。所以在整體上技術(shù)方面并不能給高分。軟件質(zhì)量評價(jià)軟件質(zhì)量評價(jià)從自己的角度,看這個(gè)軟件質(zhì)量只能是良好,而不能是優(yōu)。因?yàn)榇缶植康?Bug 處理都是CSocket 自己能夠應(yīng)對的。很大一局部大漏洞不出現(xiàn)的原因都是因?yàn)?CSocket 自己太強(qiáng)悍
55、了。其實(shí)作者對 Bug 的修補(bǔ)并不能做到盡善盡美。但是還是或多或少的做了一些修改,使得軟件用起來不會(huì)出現(xiàn)崩潰的情況。課程設(shè)計(jì)過程中軟件開發(fā)時(shí)間分配評價(jià)課程設(shè)計(jì)過程中軟件開發(fā)時(shí)間分配評價(jià)因?yàn)檎n程設(shè)計(jì),大多數(shù)時(shí)間還是用在了軟件的編碼和邏輯局部用下列圖可以表示我的分配情況;選擇題目,閱覽有關(guān)書籍,掌握必要知識根據(jù)書上的例子,一步一步跟著完成。第 1 周第 2 周周 1周 2周 3周 4周 5周 6周 1周 2周 3周 4周 5周 6脫離介紹書籍,自己發(fā)揮和想象功能。 因?yàn)闀系拇谢约河X得太難了修改 Bug 并增加一些小功能并開始寫報(bào)告。來學(xué)校向老師報(bào)告制作成果。在家里寫課程設(shè)計(jì)報(bào)告。在邏輯上,O
56、nReceive 中分辨用戶名信息的局部花的時(shí)間最長。因?yàn)檫@局部就是書上沒有介紹的局部,也是我自己獨(dú)特的局部。經(jīng)驗(yàn)與教訓(xùn)經(jīng)驗(yàn)與教訓(xùn)對于沒有接觸的領(lǐng)域,應(yīng)該在思想上弄明白,在著手去做。如果上來就忙于制作,而不把制作的內(nèi)容弄明白很容易造成返工的情況。其實(shí)地一周的前 4 天我實(shí)在做 FTP,幸好我現(xiàn)在做得軟件與 FTP 是相通著,不然我真的來不及作完了。周 5 之后我發(fā)現(xiàn)我對 CSocket 有了新的認(rèn)識。才明白她的調(diào)用原理。還有機(jī)制。和重載的意義。之后的幾天里才高速的完成了編碼。其實(shí)邏輯上很是簡單。但我卻編輯了那么長的時(shí)間??闯鰜砬皫滋煳覍χR的掌握還是很初級的階段。希望以后能吸取這樣的教訓(xùn)。總結(jié)
57、與體會(huì)總結(jié)與體會(huì)其實(shí)總的體會(huì)就是覺得軟件這個(gè)行當(dāng),以后的工作可能就是不斷地接觸新的事物,我要編程的東西,肯定我自己還不是很了解他。當(dāng)編程完了以后,才能真正地對她有了初步的認(rèn)識。所以說在這個(gè)行當(dāng),就是要多編程,才能有長進(jìn)。雖然這次編程沒有大三大二,編程量那么嚇人我記得大三自己編過了 500 行,自己有的邏輯,自己編完了都想不起來了其作用了。但是這次到?jīng)]有這種情況但是還是覺得編的時(shí)候,進(jìn)度緩慢,力不從心?;蛘哒f滿腦子想法,但就是實(shí)現(xiàn)不了。這個(gè)原因就是對 CSocket 類的理解太過于初步?,F(xiàn)在當(dāng)然也不能說就弄透了,但是起碼比 1 周前要好很多。最后其實(shí)這個(gè)報(bào)告的前局部大局部都是在制作軟件之前應(yīng)該寫
58、好的,但是 1 個(gè)人做這個(gè)東西就沒有按著這個(gè)步驟去做。所以前局部或多或少都失去了寫的價(jià)值。都是編完之后總結(jié)的內(nèi)容。軟件測試局部還是測試出很多錯(cuò)誤來的。但是都打了很多的補(bǔ)丁,在今天,寫報(bào)告的時(shí)候已經(jīng)沒什么錯(cuò)誤了。即便如此還是發(fā)現(xiàn)了一個(gè)過濾錯(cuò)誤??梢娢业能浖幊痰氖炀毘潭冗€不到家阿。希望能把這次經(jīng)驗(yàn)帶到下禮拜的新的課程設(shè)計(jì)上去。7、程序附錄、程序附錄主要運(yùn)行界面主要運(yùn)行界面 客戶端效勞器端主要程序代碼主要程序代碼效勞器端:效勞器端:void CListeningSocket:OnAccept(int nErrorCode) /connect 觸發(fā)CSocket:OnAccept(nErrorCod
59、e);/固定模式調(diào)用父類對應(yīng)方法this-m_clientnum+;/新用戶增加用戶總量this-m_clientm_clientnum=new CClientSocket(CListeningSocket:m_pDlg);/創(chuàng)立對應(yīng)客戶的套接口if(CListeningSocket:Accept(*m_clientm_clientnum)/接受!使用新創(chuàng)立的套接口m_clientm_clientnum-m_clientNO=m_clientnum;/計(jì)數(shù),把當(dāng)前數(shù)給 clientelse/如果失敗很少發(fā)生delete m_clientm_clientnum;/撤銷對應(yīng)套接口m_clientn
60、um-;/用戶減 1void CClientSocket:OnReceive(int nErrorCode) CSocket:OnReceive(nErrorCode);/同理char buffer200;/緩存int re;/個(gè)數(shù)if(re=Receive(buffer,199,0)0)/接受最長 199 字bufferre=0;/最后一位+結(jié)尾符號CString name=buffer;/用于更新用戶名稱!if(this-m_isfirst)/是否為第一次if(m_pDlg-SameName(name)/如果有重名退出連接m_pDlg-SendTo(CMD:SAMENAME,this-m_
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年度環(huán)保項(xiàng)目研發(fā)合作協(xié)議
- 2024臨時(shí)工合同模板
- 2024年度倉儲(chǔ)合同倉儲(chǔ)物及倉儲(chǔ)期限
- 2024年度軟件定制開發(fā)合同
- 2024年 衛(wèi)星發(fā)射與運(yùn)營服務(wù)合同
- 2024年商標(biāo)轉(zhuǎn)讓合同注意事項(xiàng)
- 2024年度碳排放權(quán)交易合同交易數(shù)量與交易價(jià)格
- 2(2024版)網(wǎng)絡(luò)安全風(fēng)險(xiǎn)評估合同
- 2024年度物業(yè)管理合同:住宅小區(qū)物業(yè)管理服務(wù)
- 2024年合作伙伴尋找居間合同 with 合作意向及中介費(fèi)用的規(guī)定
- 2024-2025學(xué)年上海市普陀區(qū)八年級(上)期中數(shù)學(xué)試卷
- 假期補(bǔ)課協(xié)議書
- 電子商務(wù)支付結(jié)算系統(tǒng)開發(fā)合同
- 服務(wù)質(zhì)量、保證措施
- (必練)廣東省軍隊(duì)文職(經(jīng)濟(jì)學(xué))近年考試真題試題庫(含答案)
- 含羞草天氣課件
- 2024年安全生產(chǎn)知識競賽考試題庫及答案(共五套)
- 22《鳥的天堂》課件
- 農(nóng)業(yè)灌溉裝置市場環(huán)境與對策分析
- 新疆烏魯木齊市第十一中學(xué)2024-2025學(xué)年八年級上學(xué)期期中道德與法治試卷
- 部編版小學(xué)五年級上冊道法課程綱要(知識清單)
評論
0/150
提交評論