基于CS架構(gòu)的網(wǎng)絡(luò)聊天室設(shè)計(jì)與實(shí)現(xiàn)_第1頁
基于CS架構(gòu)的網(wǎng)絡(luò)聊天室設(shè)計(jì)與實(shí)現(xiàn)_第2頁
基于CS架構(gòu)的網(wǎng)絡(luò)聊天室設(shè)計(jì)與實(shí)現(xiàn)_第3頁
基于CS架構(gòu)的網(wǎng)絡(luò)聊天室設(shè)計(jì)與實(shí)現(xiàn)_第4頁
基于CS架構(gòu)的網(wǎng)絡(luò)聊天室設(shè)計(jì)與實(shí)現(xiàn)_第5頁
已閱讀5頁,還剩48頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)專心-專注-專業(yè)精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)課題:基于C/S架構(gòu)的網(wǎng)絡(luò)聊天室設(shè)計(jì)與實(shí)現(xiàn)院 (系): 計(jì)算機(jī)工程系 專 業(yè): 計(jì)算機(jī)科學(xué)與技術(shù)(軟件工程)班 級: 學(xué)生姓名: 學(xué) 號: 指導(dǎo)教師: 2014年 05月10日摘要互聯(lián)網(wǎng)聊天服務(wù)系統(tǒng)與傳統(tǒng)的電子郵件和電話交談相比,是更有效的,實(shí)時的和快速的。隨著計(jì)算機(jī)科學(xué)與技術(shù)和Internet (互聯(lián)網(wǎng))的飛速發(fā)展, 各種網(wǎng)絡(luò)聊天工具已成為人們相互學(xué)習(xí)交流溝通的一種方式。這個程序采用軟件工程的開發(fā)方法,結(jié)合使用了網(wǎng)絡(luò)技術(shù)、以及程序設(shè)計(jì)技術(shù),并使用Visual C+ 6

2、.0作為開發(fā)工具,使用TCP / IP協(xié)議下的一個套接字連接局域網(wǎng)聊天室的開發(fā)。這個網(wǎng)聊天室采用傳統(tǒng)的客戶端與服務(wù)器(C/S)架構(gòu)和TCP連接方法實(shí)現(xiàn)的,它是由客戶(C)端和服務(wù)器(S)這兩個模塊組成的一個系統(tǒng)。聊天室的服務(wù)器模塊的作用主要是用來維護(hù)網(wǎng)絡(luò)上與用戶的信息有關(guān)的服務(wù),如用戶的登錄,消息的轉(zhuǎn)發(fā),用戶的信息,用戶退出等,聊天室的客戶端模塊主要包括用戶的注冊、登錄、發(fā)送私聊信息、群發(fā)消息、接收別人的信息、在線用戶列表等。使用結(jié)構(gòu)化的方法編譯整個工程,逐步完善整個系統(tǒng)的各個功能。系統(tǒng)采用套接口(CSocket)實(shí)現(xiàn)客戶端與服務(wù)器的鏈接。這個聊天室系統(tǒng)不僅提供基本的聊天功能,還添加了一些使用

3、的功能,比如注冊用戶、驗(yàn)證登陸、發(fā)送文件和私聊等。聊天室系統(tǒng)通過測試其操作簡單并且靈活性好而且運(yùn)行穩(wěn)定。關(guān)鍵詞語:MFC;套接字;TCP通信;聊天室; ABSTRACTNetwork chat service system compared with the traditional E-mail and telephone, chat is the more efficient, real-time with effective. With the quickly development of the computer science and the technology and the ra

4、pid development of the Internet (Internet), all kinds of network chat tool has become a way of people to learn from each other communication. This program USES the development method of software engineering, jion with the network programming technology, and technology, using Microsoft Visual c + + 6

5、.0 as developmenting instrument, using the TCP/IP protocol under a socket connection for the development of LAN chat room.The network chat room USES traditional client and server (C/S) architecture and TCP connection method, it is by the customer (C) the client and server (S) of the two modules of a

6、 system. The role of the chat room server module is mainly used to maintain the network with the users information services, such as user login, the forwarding of a message, the users information, the user exit, such as chat room client module mainly includes the user register, login, private chat m

7、essages, mass message, receive other peoples information, such as online user list. Structured method is used to compile the whole project, the various functions of the whole system to consummate gradually.System USES set of interface of the client and the server (CSocket links. This chat room syste

8、m not only provides the basic chat functionality, Also added like something functions, such as user registration, verify and send the file and private chat, etc. Chat room system by testing its easy operation and good flexibility and stable running.Key word : MFC and The socket and TCP communication

9、s and Chat rooms;目 錄 TOC o 1-3 h z u 第一章緒論如今的科技使網(wǎng)絡(luò)技術(shù)越來越發(fā)達(dá),人們使用網(wǎng)絡(luò)也越來越頻繁,從而使人們對網(wǎng)絡(luò)的依賴不斷的上升,出現(xiàn)了越來越離不開網(wǎng)絡(luò)網(wǎng)絡(luò)的情況,因此產(chǎn)生的聊天工具軟件也玲瑯滿目,比如如,國外的MSN、ICQ,國內(nèi)的YY語音和騰訊公司開發(fā)的微信與QQ等。由于VC+網(wǎng)絡(luò)編程技術(shù)的功能非常強(qiáng)大,所以我的畢業(yè)設(shè)計(jì)選擇使用VC+6.0為開發(fā)平臺開發(fā)一個聊天系統(tǒng)軟件。這個系統(tǒng)建立在微軟的VC+6.0平臺上,設(shè)計(jì)系統(tǒng)時不僅使用了C+的面向?qū)ο笤O(shè)計(jì)技術(shù)的(OOD)而且還面向?qū)ο蟮木幊蹋∣OP)原則。這個系統(tǒng)采用傳統(tǒng)的客戶端/服務(wù)器(C/S)結(jié)構(gòu)

10、模型來進(jìn)行開發(fā),并且客戶端和服務(wù)器、客戶端和客戶端之間的通信通過套接口(CSocket)進(jìn)行的。使用C/C+語言開發(fā),采用的開發(fā)工具為微軟的VC+6.0。第一節(jié)論文的目的和意義最近這寫年來以來,隨著全球信息技術(shù)在不斷的飛速發(fā)展當(dāng)中,并且互聯(lián)網(wǎng)同時也處于快速發(fā)展之中。出于經(jīng)濟(jì)、快速、有效地處理各種各樣的問題,使用局域網(wǎng)已成為很多企業(yè)的優(yōu)先選擇。在局域網(wǎng)這個平臺的幫助下,使企業(yè)的信息化流程越來越簡單了,而且人與人之間的信息交互加快了,從而提高了每個員工的工作效率。但是隨著各個企業(yè)規(guī)模的不斷發(fā)展并擴(kuò)大,業(yè)務(wù)量也跟著不斷的處于上升階段,從而造成企業(yè)內(nèi)部信息越來越機(jī)密越來越貴重,一旦泄露將造成不可估量的

11、損失,從而使企業(yè)只讓員工通過使用局域網(wǎng)進(jìn)行工作的溝通、交流與學(xué)習(xí),從而達(dá)到避免企業(yè)內(nèi)部商業(yè)秘密通過互聯(lián)網(wǎng)這個網(wǎng)絡(luò)(Internet)流入到競爭對手或者商業(yè)間諜那里去,造成不必要的損失。為了解決企業(yè)與互聯(lián)網(wǎng)之間的矛盾,各個企業(yè)提出了開發(fā)只能在公司里面使用的聊天軟件的構(gòu)想,通過開發(fā)局域網(wǎng)聊天軟件能達(dá)到企業(yè)的目的,使用局域網(wǎng)聊天軟件企業(yè)員工不僅可以隨時的發(fā)送和接收即時消息,而且還可以使用局域網(wǎng)召開會議進(jìn)行網(wǎng)絡(luò)交流等,不僅可以提高企業(yè)員工的效率同時又對企業(yè)的內(nèi)部信息進(jìn)行了保密工作措施,從而最大化避免商業(yè)信息泄露。隨著市場經(jīng)濟(jì)的不斷發(fā)展,用戶對軟件的功能需求也越來越高,需求量也越來越大,從而促進(jìn)了即時通

12、訊的網(wǎng)絡(luò)產(chǎn)品也不斷地進(jìn)行換代更新,像浪花一樣一波又一波的向前推進(jìn)。網(wǎng)絡(luò)即時通訊軟件不論是在它的基礎(chǔ)應(yīng)用聊天這方面還是在擴(kuò)展應(yīng)用方面的文件發(fā)送語音聊天方面的發(fā)展都有著很大的進(jìn)步。為了各種使用人群的需求,包括移動公司的聊天軟件飛信在內(nèi)得各種即時通訊軟件,這些軟件呢都推出了包括視頻聊天、語音聊天的功能模塊方便大家交流。我的這個課題是基于局域網(wǎng)聊天軟件,用C/C+編寫的應(yīng)用程序,程序完成基本的文字聊天模塊,可作為一個簡單局域網(wǎng)聊天工具。這個統(tǒng)采用了基于網(wǎng)絡(luò)編程技術(shù)套接口(CSocket)的方法開發(fā)并實(shí)現(xiàn)了基于局域網(wǎng)聊天的功能,基于局域網(wǎng)軟件通信產(chǎn)品很多都是使用套接口(CSocket)實(shí)現(xiàn)的,這種軟件產(chǎn)

13、品在局域網(wǎng)中使用可以有效的為企業(yè)提供一種實(shí)時,安全,優(yōu)良,的信息傳遞機(jī)制。實(shí)現(xiàn)它的功能難度不是很大并且不必要對企業(yè)局域網(wǎng)硬件做任何的更新或改動從而為企業(yè)減少了很多麻煩,并且這個軟件具有實(shí)現(xiàn)低成本的優(yōu)勢和條件,它的使用不盡能有效地降低局域網(wǎng)消息傳遞的負(fù)載量而且傳遞速度快,從而能提高局域網(wǎng)使用的效率,可以很好完成企業(yè)對于局域網(wǎng)通信的需求,使企業(yè)很好的進(jìn)行日常事務(wù)的處理,進(jìn)而提高企業(yè)工作效率。 基于套接口(CSocket)的局域網(wǎng)聊天軟件很好地解釋了套接口(CSocket)信息傳遞的原則,并且在企業(yè)的實(shí)際應(yīng)用中都具有很高的價(jià)值。局域網(wǎng)聊天軟件的信息發(fā)送和接收的速度,帶寬低,安全性好,服務(wù)器容量較低,

14、易于編程等優(yōu)點(diǎn)?;谔捉涌冢–Socket)的局域網(wǎng)通信軟件使用的人群非常廣,即可以處理一般的文字通信,又能擴(kuò)展使其適應(yīng)新興的網(wǎng)絡(luò)應(yīng)用軟件,如影音數(shù)據(jù)傳輸網(wǎng)絡(luò)教育等,這些應(yīng)用都有廣泛的前景。 局域網(wǎng)的即時信息傳遞軟件大多數(shù)都是采用UDP或者 TCP協(xié)議來完成信息傳遞的,這項(xiàng)技術(shù)已經(jīng)非常成熟。UDP是一種實(shí)時的通信協(xié)議,但是傳輸?shù)臄?shù)據(jù)是不可靠的,可能又會數(shù)據(jù)的丟失,TCP是一種可靠的通信協(xié)議,數(shù)據(jù)傳遞是有鏈接的可靠的。我的這個課題就是采用TCP通信協(xié)議完成的一個局域網(wǎng)聊天室的軟件程序。第二節(jié)國內(nèi)外研究現(xiàn)狀當(dāng)今世界范圍內(nèi)各種聊天室系統(tǒng)軟件的公司很多,產(chǎn)品也各種各種各具特色,不過大體都已聊天為中心擴(kuò)

15、展其他功能,在我們國家有YY、QQ、網(wǎng)易泡泡、新浪UC、默默等產(chǎn)品,國外的有ICQ、Skype、MSN、Facebook等。在這里我主要取用戶最多的兩個產(chǎn)品進(jìn)行研究,國內(nèi)的為騰訊公司的QQ,國外的為微軟MSN,作為開發(fā)即時通訊軟件的系統(tǒng)的一個模板。QQ作為國內(nèi)即通信軟件其市場占有率一直無人人能及,自騰訊公司1999年闖入即時通訊領(lǐng)域之后,它迅速占領(lǐng)了國內(nèi)市場,并且使國內(nèi)用戶一直都是處于最多的狀態(tài),沒有一絲一毫的動搖跡象。雖然這幾年微軟的MSN在我國有發(fā)展壯大的趨勢,但是騰訊QQ的用戶量依然在逐步增長中。騰訊的即時通訊軟件產(chǎn)品的成功是來源于它對QQ這個通信軟件的不斷更新不斷完善從而使QQ一直被使

16、用者稱好,這也算QQ這款軟件成功的基本原因。通過閱讀許多網(wǎng)絡(luò)上的書籍,以及自己使用MSN、QQ、YY等通訊軟件??梢钥隙ǖ氖球v訊的QQ微軟的MSN等都是多個服務(wù)器同時服務(wù),服務(wù)器控制客戶端與客戶端之間使用UDP協(xié)議進(jìn)行通信。在兩個客戶端之間不能建立正常連接的情況下騰訊QQ使用用服務(wù)器進(jìn)行消息的中轉(zhuǎn)以達(dá)到通信的目的。圖1.1 是我們經(jīng)常使用的QQ聊天軟件的客戶端-服務(wù)器模MSN與騰訊QQ不同的是他們使用協(xié)議的不同,微軟的MSN是使用TCP協(xié)議作為傳輸層通信協(xié)議,而QQ使用的UDP作為傳輸層得通信協(xié)議,服務(wù)器與所有的登陸在線客戶端進(jìn)行鏈接,并通過服務(wù)器進(jìn)行消息的中轉(zhuǎn)實(shí)現(xiàn)客戶端與客戶端之間的消息傳遞

17、。圖1.2 微軟的MSN客戶端-服務(wù)器模型從騰訊QQ的系統(tǒng)模型中我們可以觀察到的是,服務(wù)器的作用是處理客戶端的傳遞過來的各種狀態(tài)的請求并進(jìn)行相應(yīng)的處理響應(yīng),從而達(dá)到服務(wù)器的壓力將到最小值,但是它還是存在著一些缺點(diǎn),就是服務(wù)器客戶端之間的的協(xié)議和功能實(shí)現(xiàn)都比較復(fù)雜。然而微軟的MSN一切數(shù)據(jù)都要進(jìn)過服務(wù)器中轉(zhuǎn),由此可知道服務(wù)器承受的壓力是多么的大(所以平時使用MSN進(jìn)行語音視屏聊天很少)。上面的軟件都實(shí)現(xiàn)了在互聯(lián)網(wǎng)上的即時信息傳遞,在使用方面都具有自己獨(dú)特的一面,軟件的開發(fā)方式也各不相同,但中心思想一致。伴隨著社會的發(fā)展企業(yè)的擴(kuò)大,營業(yè)額的上漲,各個企業(yè)的競爭也越來越激烈,所以企業(yè)內(nèi)的商業(yè)信息也越

18、來越機(jī)密,為了保護(hù)商業(yè)機(jī)密企業(yè)只希望員工通過局域網(wǎng)進(jìn)行工作的商討交流與資源的共享,從而避免企業(yè)內(nèi)部商業(yè)秘密通過互聯(lián)網(wǎng)(Internet)泄露到競爭對手手里,從而使局域網(wǎng)的聊天軟件也隱藏著很大的用戶市場資源。第三節(jié) 論文的主要內(nèi)容這個課題主要研究的主要方向是使用C/C+語言進(jìn)行的局域網(wǎng)聊天室軟件的開發(fā),該聊天室軟件開發(fā)過程中采用的是精典客戶端/服務(wù)器架構(gòu)和TCP協(xié)議的有鏈接連接方法,完成用戶在客戶端與客戶端間傳遞文字信息功能。完成它的功能實(shí)現(xiàn)必須要兩個程序:一個是用于消息轉(zhuǎn)發(fā)的服務(wù)器端程序和另一個是用戶間交流的客戶端程序,調(diào)試程序時首先必須要啟動服務(wù)器等待客戶端消息的請求做,服務(wù)器需要一個固定的

19、端口號和一個固定的IP地址使客戶端能連接到固定IP地址的服務(wù)器并向固定端口發(fā)送消息,當(dāng)客戶端與服務(wù)器鏈接時,用戶需要注冊一個用戶名,但是如果用戶名已經(jīng)被其他已經(jīng)登錄過的客戶端注冊,服務(wù)器就會發(fā)送信息告訴客戶端用戶已存在,要求重新注冊。當(dāng)用戶注冊成功后可以使用賬戶進(jìn)行登錄,登陸之后客戶端之間可以通過發(fā)送文字信息進(jìn)行聊天或信息交互。服務(wù)器模塊主要是顯示用戶信息消息的轉(zhuǎn)發(fā),和用戶登錄退出的提示;客戶端的模塊主要是文字消息的發(fā)送和接收達(dá)到聊天的目的,還有文件的發(fā)送和接收,在線用戶列表的頭像和名字顯示,老用戶的登錄和新賬戶的注冊。研究這個課題的前提的必須有一定的C/C+語言基礎(chǔ),并熟練運(yùn)用VC+6.0開

20、發(fā)平臺,利用套接口(socket)網(wǎng)絡(luò)編程技術(shù)并且結(jié)合TCP網(wǎng)絡(luò)協(xié)議進(jìn)行這個局域網(wǎng)聊天軟件開發(fā)工作。在這里我選擇TCP協(xié)議卻沒有選UDP協(xié)議是為了保證可靠的信息傳遞,TCP與同于UDP協(xié)議不同的是,TCP協(xié)議往往要求在進(jìn)行可靠連接后才進(jìn)行信息的傳遞。第一章主要論述了論文的目的和意義,展示了主要的內(nèi)容和簡單的介紹。第二章主要說明了聊天系統(tǒng)在國內(nèi)外的發(fā)展具體狀況,和主流的及時通信軟件產(chǎn)品,并且將國內(nèi)外使用最多MSN聊天軟件和國內(nèi)使用最多QQ都做了簡單的介紹并進(jìn)行了一些簡單的對比,以加深我們對及時通信軟件的認(rèn)識。第三章主要說明了這個軟件所需要到的軟件開發(fā)語言極其使用平臺,和簡單描述了套接字(CSoc

21、ket)的發(fā)展歷程。第四章介紹了整個系統(tǒng)的設(shè)計(jì)和和各個模塊的作用極其功能。第五章詳細(xì)分析了如何實(shí)現(xiàn)各個功能極其作用。第六章對設(shè)計(jì)過程中可能出現(xiàn)的問題進(jìn)行可行性分析與總結(jié),分析了整個軟件的優(yōu)點(diǎn)和缺點(diǎn),并對日后軟件的完善埋下了伏筆。 第二章 開發(fā)環(huán)境及編程語言的介紹 Visual C+6.0可視化開發(fā)環(huán)境Microsoft Visual C+ 6.0是一款可視化編程工具它是微軟出品的,它使用的范圍非常廣闊。Microsoft Visual C+ 6.0這個軟件開發(fā)平臺是由很多部分組成的,它包含一個項(xiàng)目生成工具和一個增量連接器和文本編輯器和資源編輯器和一套在線文檔和源代碼瀏覽器,以及集成的調(diào)試工具。

22、使用Microsoft Visual C+ 6.0這個開發(fā)平臺,可以對程序進(jìn)行各種繁雜的操作,例如程序新建,刪除,修改,編譯,調(diào)試,運(yùn)行等。Microsoft Visual C+ 6.0開發(fā)平臺采用傳統(tǒng)的多窗口多任務(wù)Windows用戶界面方便大家學(xué)習(xí)使用這個平臺,也降低了平臺使用的復(fù)雜度,不僅這樣Microsoft Visual C+ 6.0開發(fā)平臺還添加了一些獨(dú)特的個性化的特征使用方式,從而使開發(fā)環(huán)境簡單易用方便,是我們很快就能學(xué)會并且熟練運(yùn)用?;贛icrosoft Visual C+ 6.0的原始身份是一個可視化編程的軟件開發(fā)平臺,在介紹Microsoft Visual C+ 6.0的每

23、一個不可或缺部分之初,大家應(yīng)當(dāng)了解一下可視化編程是一個怎么樣的過程。可視化編程技術(shù)是目前IT界發(fā)展最快并且最引人眼球的,它吸引人的地方表現(xiàn)在它能把一些抽象的東西用圖像、圖形的方式展現(xiàn)給大家。它的應(yīng)用之一可視化編程。我們所將的可視化編程,指的是程序員在開發(fā)軟件的時候,用我們?nèi)庋劭梢杂^察到的具有一定特殊意義的圖形,圖標(biāo),按鈕來替換以前我們手動的制作、瀏覽、運(yùn)行這些繁雜的操作,使我們從繁重的軟件開發(fā)表現(xiàn)出來給大家的映像就是按鈕的拖拽圖形化對象的設(shè)置,鼠標(biāo)的點(diǎn)擊以及特定對象的表現(xiàn)出特定屬性以及行為的過程和方法,使其體現(xiàn)出可視化編程的最大優(yōu)點(diǎn)易學(xué)易用,效率高。第二節(jié) 網(wǎng)絡(luò)編程20世紀(jì)80年代初期,美利堅(jiān)

24、政府下的高級工程研究機(jī)構(gòu)頒給加利福尼亞大學(xué)BERKELEY分校一比研究經(jīng)費(fèi),目的是讓加利福尼亞大學(xué)研究出在LINUX/UNIX操作系統(tǒng)完成TCP/IP協(xié)議的消息傳輸機(jī)制。在這個項(xiàng)目中研究人員通過很長一段時間的艱苦鉆研為網(wǎng)絡(luò)通信TCP/IP網(wǎng)絡(luò)傳輸協(xié)議開發(fā)了一個可行的應(yīng)用程序接口(API)。并將這個應(yīng)用程程接口,叫做套接字。直到現(xiàn)在,在網(wǎng)絡(luò)傳輸軟件的開發(fā)中套接字(Socket接口)依然是TCP/IP網(wǎng)絡(luò)傳輸協(xié)議中運(yùn)用最簡單使用最頻繁的API(應(yīng)用程序接口),也是互聯(lián)網(wǎng)(Internet)軟件應(yīng)用開發(fā)過程中最為常見的API接口。單詞 socket翻譯為中文為套接字, 對于每一個程序員來說, Soc

25、ket也可以看成是一個類似于文件指針的指針,只要指向指針?biāo)傅牡刂纷x寫數(shù)據(jù),那么他就可以說是實(shí)現(xiàn)了雙向通信?;谶@個特套接字是網(wǎng)絡(luò)通信編程運(yùn)用中的必不可或缺的一部分。Socket套接字是一個網(wǎng)絡(luò)互連終點(diǎn)的同時并且可以是被尋址和被命名的網(wǎng)絡(luò)通信端點(diǎn),從而看出套接字的作用是多么重要。用另一句話說,網(wǎng)路互聯(lián)就是兩臺不一樣的電腦或處理器通過網(wǎng)絡(luò)相互傳遞數(shù)據(jù)的鏈接過程。每一個網(wǎng)絡(luò)會話過程中的通信末端都被網(wǎng)絡(luò)專業(yè)人員叫做網(wǎng)絡(luò)通信節(jié)點(diǎn)。若使用套接字進(jìn)行網(wǎng)絡(luò)接口相互鏈接,那么每個程序在網(wǎng)絡(luò)鏈接的末端都都要提供一個套接字作為接口,套接字接口類似于我們平常看見文件系統(tǒng)一樣,可以通過 API接口函數(shù)在網(wǎng)絡(luò)中申請一個

26、特定套接字句柄來標(biāo)記套接字的屬性。雖然說套接口類似與文件系統(tǒng),但是套接字句柄與文件句柄的意義是不相同的,文件句柄它指向的是一個固定的設(shè)備和文件, 然而套接字句柄并不是像我們想的那樣代表的是一個目標(biāo)地址或一個特定的終點(diǎn)。套接字程序的操作順序是,首先申請一個套接口,其次將目標(biāo)的終點(diǎn)和套接字連接起來實(shí)現(xiàn)通信。套接字函數(shù)的實(shí)現(xiàn)是底層的WinInetAPI函數(shù)的其中很重要的一部分,如果使用的是Microsoft Visual C+ 6.0類庫MFC里面的 CSocket類的話,MFC里面把套接字底層運(yùn)用函數(shù)封裝起來了構(gòu)成一個類方便了我們調(diào)用。CSocket來源于 CAsyncSocket類,它是CAsy

27、ncSocket類的子類,由于使用CAsyncSocket類的編程運(yùn)用到很多底層函數(shù)所以使用比較難,它進(jìn)行通信操作需要編寫底層函數(shù)這樣的操作無疑是大大提高編程的可行性的行為,但是CSocket更抽象的封裝底層函數(shù),代替編程者操作難度較大的底層函數(shù),使套接字編程得到簡化。但是又應(yīng)為其實(shí)CSocket類還支持了一個更加高級的,使用簡單的Socket運(yùn)用方法,它熟練的通過運(yùn)用MFC類庫中序列化類的方法并運(yùn)用完成對Socket對象進(jìn)行提供和傳輸。使用Socket進(jìn)行的網(wǎng)絡(luò)編程實(shí)現(xiàn)即時通訊方式有兩種方法。一種是需要建立可靠的虛擬連接的形式叫面向連接方式或者流方式?;谶@個鏈接方式,就是兩個需要進(jìn)行通信的

28、程序在通信之前一定要先進(jìn)行建立一個虛擬的網(wǎng)絡(luò)連接環(huán)境。它的過程就像我們平時打電話,你撥打我的手機(jī)只有我點(diǎn)接聽了,我才能接收到你在那邊說話傳過來信息,這樣的有連接的通信叫做TCP通信協(xié)議。另一種方式叫數(shù)據(jù)報(bào)文 ,也可以稱為沒有連接方式 ,這種通信就像我們平時寄信那樣把信息寫在紙上然后寄出去,應(yīng)為寄信要通過不同的郵局不同的郵遞員所以在信得傳遞過程中很可能丟失或殘缺不全,但是有時候后面寄出去的信件要寄到同一地點(diǎn)也會先一步到達(dá),它使用的通信協(xié)議對應(yīng)為UDP通信協(xié)議。流方式數(shù)據(jù)傳輸特點(diǎn)是可靠的數(shù)據(jù)傳輸,對發(fā)送的數(shù)據(jù)總是進(jìn)行校驗(yàn),對出錯的數(shù)據(jù)進(jìn)行重發(fā),一般用于對出錯要求比較高的或者說不允許發(fā)送錯誤的數(shù)據(jù)傳

29、輸如 telnet、ftp、文件等;數(shù)據(jù)報(bào)文方式應(yīng)為沒有進(jìn)行校檢和數(shù)據(jù)重發(fā),所以其通信效率一般比較高,一般用于對數(shù)據(jù)發(fā)送完整性不是很高的網(wǎng)絡(luò)應(yīng)用 ,例如語音的傳輸,文字的傳輸?shù)?。因?yàn)閮蓚€客戶端之間的通信是使用客戶機(jī)/服務(wù)器的機(jī)制,為了數(shù)據(jù)傳輸?shù)目煽啃?所以采用了基于TCP協(xié)議的套接字編程來開發(fā)。第三節(jié) 客戶端/服務(wù)器模式需要進(jìn)行通信的兩個客戶端之間的相互聯(lián)系的模式是客戶機(jī)/服務(wù)器模式,相當(dāng)于客戶端給服務(wù)器發(fā)送消息,服務(wù)器接收到消息后進(jìn)行數(shù)據(jù)分析,然后給客戶端提供相應(yīng)的服務(wù)。由于是不同程序之間進(jìn)行的通信屬于網(wǎng)間進(jìn)程通信是異步的而非同步的,進(jìn)行通信的程序之間不純在相互依賴的父子關(guān)系,也沒有共享相同

30、的內(nèi)存區(qū)間,此時就需要一種通信機(jī)制為兩個進(jìn)程建立聯(lián)系從而實(shí)現(xiàn)數(shù)據(jù)的同步交換,以實(shí)現(xiàn)進(jìn)程間的通信。服務(wù)器/客戶機(jī)傳統(tǒng)的網(wǎng)絡(luò)應(yīng)用模式在實(shí)際使用過程中使用的方法是主動請求的服務(wù)模式:即服務(wù)器要最先啟動并且處于一直等待客戶端的服務(wù)請求狀態(tài),并根據(jù)接收到的客戶端請求作出相應(yīng)的服務(wù)和應(yīng)答:1) 建立通信通道,并打開通道綁定本地主機(jī)IP,并告訴主機(jī)愿意在主機(jī)IP地址上接收客戶服務(wù);2) 一直等待客戶端的發(fā)送過來的服務(wù)請求到達(dá)特定IP地址下的服務(wù)器特定端口上,除非服務(wù)器關(guān)閉或出錯;3) 根據(jù)接收到的服務(wù)請求信息,判斷客戶端需要做怎么樣的服務(wù),發(fā)送出服務(wù)信號作出相應(yīng)服務(wù),服務(wù)完成后關(guān)閉連接停止通信;4) 回到第

31、二步繼續(xù)等待下一個服務(wù);5) 服務(wù)器關(guān)閉則通信中斷??蛻舳?1) 建立一個可用的通信線路套接口,并連接到固定主機(jī)的固定IP地址和固定端口號的服務(wù)器上,才能進(jìn)行通信; 2) 通信連接步驟完成后根據(jù)自己的需要向服務(wù)器發(fā)送服務(wù)請求,并等待服務(wù)器處理接收到到消息進(jìn)行相應(yīng)的服務(wù);3) 接收到服務(wù)器應(yīng)答后關(guān)閉通信通道完成通信。由以上我們知道:1) 服務(wù)器與客戶端是不一樣的,服務(wù)器是等待連接,客戶端是請求連接,因此在編程實(shí)現(xiàn)上必然存在很大差別;2) 由于服務(wù)進(jìn)程是給客戶進(jìn)程服務(wù)的所以服務(wù)進(jìn)程必須先于客戶進(jìn)程啟動并一直存在等待客戶端服務(wù)消息,因此只要系統(tǒng)處于運(yùn)行狀態(tài),服務(wù)進(jìn)程必須處于運(yùn)行狀態(tài),直到人為的關(guān)閉服

32、務(wù)器,或者是因其他原因服務(wù)器被強(qiáng)制關(guān)閉??蛻舳朔?wù)器通信的原理圖如3所示??蛻舳丝蛻舳朔?wù)器建立服務(wù)端監(jiān)聽等待并接受連接創(chuàng)建連接套接字發(fā)送消息Send接受消息Receive關(guān)閉套接字Close向服務(wù)端發(fā)送連接請求 Connect發(fā)送消息Send接受消息Receive關(guān)閉套接字Close圖2.1 系統(tǒng)實(shí)現(xiàn)原理圖客戶端/服務(wù)器實(shí)現(xiàn)通信我們可以將它簡單的分為三個階段:一、數(shù)據(jù)連接套接口的建立。二、數(shù)據(jù)的傳輸,客戶端向服務(wù)器傳輸服務(wù)請求,服務(wù)器處理消息并把處理結(jié)果傳輸給客戶端。三、解除客戶端與服務(wù)器之間的連接。在套接字建立的通信的整個過程之間,將用到很多的函數(shù)處理不同的消息我們經(jīng)常用到的函數(shù)如下:(1

33、) AfxSocketInit():在這個函數(shù)AfxSocketInit()之中 包裝了函數(shù) WSAStartup(),通過在應(yīng)用程序的初始化的功能函數(shù)IninInstance()之中我們可以通過調(diào)用AfxSocketInit()對相應(yīng)的變量進(jìn)行初始化。(2) Create(): 其主要作用是創(chuàng)建套接字,創(chuàng)建套接字可分為本地的和網(wǎng)絡(luò)的,TCP或UDP的套接字。(3) Listen():這個函數(shù)創(chuàng)建一個并Socket并為其中申請進(jìn)入的連接套接口建立一個后備日志報(bào)表,方便后期的管理。(4) Connect(): 這個函數(shù)主要運(yùn)用于客戶端服務(wù)程序的開發(fā),用于向服務(wù)器端發(fā)送客戶端的連接請求,完成連接。

34、(5) Accept():這個函數(shù)主要用于服務(wù)器端,用于服務(wù)器端得套接字監(jiān)聽,客戶端的連接請求,如果連接成功返回新的套接字描述符與客戶端通信。(6) Send():這個函數(shù)主要是用于消息的發(fā)送,客戶端或者服務(wù)器都可以使用,是網(wǎng)絡(luò)通信中用于發(fā)送消息的最常用函數(shù)之一。(7)Recv ():這個函數(shù)主要用于接收消息,運(yùn)用于TCP連接的網(wǎng)絡(luò)通信的服務(wù)器客戶端接收send函數(shù)發(fā)送來的消息。(8) Close(): 關(guān)閉套接字描述符,使描述符不可用。在一個以MFC實(shí)現(xiàn)的Socket通信過程中,里面純在著很多的消息映射機(jī)制,當(dāng)某一消息發(fā)送時,應(yīng)用程序窗口就會收到一些特定的消息,從而自動調(diào)用響應(yīng)函數(shù),在函數(shù)中

35、我們可以運(yùn)用自己的代碼以更好的完成整個通信過程,其中常見的函數(shù)如下:(1) OnAccept():如果服務(wù)器的socket處于監(jiān)聽狀態(tài)之中,當(dāng)有客戶申請連接的時候,OnAccept函數(shù)會被運(yùn)用程序調(diào)用,你可以在函數(shù)里面添加自己的代碼根據(jù)程序的需求完成相應(yīng)的功能。(2) OnConnect():當(dāng)客戶端的套接字向服務(wù)器申請鏈接之后 ,程序就會調(diào)用OnConnect()函數(shù),我們可以正在這個函數(shù)內(nèi)添加代碼根據(jù)需求完成相應(yīng)功能。(3) OnSend(): 運(yùn)用程序調(diào)用這個消息函數(shù)通知套接字現(xiàn)在可以使用send()函數(shù)來進(jìn)行信息的交互。(4) OnReceive():運(yùn)用程序調(diào)用這個消息函數(shù)通知套接字

36、現(xiàn)在可以使用Recv()函數(shù)來進(jìn)行接收消息。(5) OnCloes():這個函數(shù)主要是在關(guān)閉套接字時觸發(fā)的用于告訴程序套接字已經(jīng)關(guān)閉。第三章 需求分析由于該課題已經(jīng)有很多現(xiàn)成的系統(tǒng),由此可以斷定系統(tǒng)開發(fā)具有一定的可行性。因此,限于篇幅的原因不對系統(tǒng)實(shí)現(xiàn)的可行性進(jìn)行敘述。需求分析是軟件開發(fā)中的非常重要的一步,我們在做需求分析的時候應(yīng)當(dāng)盡可能做到通俗、簡單、詳細(xì)。需求界定課題是開發(fā)一個滿足用戶基本需求的局域網(wǎng)聊天室系統(tǒng)。因此需要實(shí)現(xiàn)如下最基本的需求。對服務(wù)器端和客戶端兩個應(yīng)用程序進(jìn)行開發(fā),調(diào)試工作以達(dá)到以下目的。(1)客戶端可以與服務(wù)器進(jìn)行連接(2)客戶端與服務(wù)器端連接成功后可以與其他客戶端進(jìn)行中

37、轉(zhuǎn)通信(3)服務(wù)器端可以接收到連接信息并根據(jù)發(fā)來的信息做出反應(yīng)(4)客戶端之間除了可以在聊天室發(fā)送消息外,還可以進(jìn)行私聊(5)客戶端之間可以向聊天室發(fā)送文件,其他客戶端可以接受文件并保存根據(jù)上面的分析,開發(fā)的聊天室應(yīng)用程序要完成的功能概況起來包括,登錄功能、驗(yàn)證用戶名和密碼的功能、聊天室內(nèi)聊天功能、私聊功能、發(fā)送文件功能和接收文件并保存功能。在設(shè)計(jì)開發(fā)這個即時通訊軟件聊天系統(tǒng)的過程之中,要考慮到的兩個設(shè)計(jì)要點(diǎn)如下:首先,程序需要運(yùn)行于TCP/IP環(huán)境上,需要完成客戶端和服務(wù)器端這兩個運(yùn)用程序的開發(fā)。然后,為了使用套接字消息函數(shù)我們應(yīng)當(dāng)從CSocket派生出適合自己使用的套接字類,很多時候?yàn)榱朔?/p>

38、便大家閱讀程序?qū)⒈O(jiān)聽套接字和連接套接字分開,從而又派生出了監(jiān)聽套接字類和用戶套接字類供程序使用。然后利用這些派生類進(jìn)行我們的程序開發(fā)。第二節(jié) 功能界定一、簡單的系統(tǒng)模塊圖根據(jù)上面的分析可以畫出程序的初步的模塊功能模塊圖如圖四所示。圖3.1 系統(tǒng)需求分析功能模塊圖整個程序組成一個聊天室,聊天室可以分為兩個程序,一個是客戶端程序,另一個服務(wù)器端程序,客戶端程序的基本功能是:用戶的登陸,和用戶的注冊、大家都可以看到的消息群發(fā)功能、一對一的私聊功能,和文件發(fā)送模塊。服務(wù)器端主要功能是: 登錄驗(yàn)證、注冊驗(yàn)證、和各種消息的轉(zhuǎn)發(fā)、用戶成功登陸后的提示信息。這就是這個系統(tǒng)簡單的功能模塊分析。二、流程圖圖3.2

39、 系統(tǒng)流程以上為整個系統(tǒng)的流程圖,系統(tǒng)的運(yùn)行必須啟動兩個程序,首先要啟動的是服務(wù)器,然后啟動客戶端,客戶端連接服務(wù)器,向服務(wù)器發(fā)送各種請求,服務(wù)器分析客戶端發(fā)送的過來的請求,分析請求作出相應(yīng)的服務(wù),服務(wù)器就相當(dāng)于一個消息的中轉(zhuǎn)站。三、用戶數(shù)據(jù)模型(E-R圖)密碼IP頭像賬號密碼IP頭像賬號用戶用戶圖3.3用戶數(shù)據(jù)模型圖每個用戶的基本息都包含(賬號,密碼,頭像,IP),是每個客戶端登陸的必備條件。第三節(jié)網(wǎng)絡(luò)聊天室的主要實(shí)現(xiàn)一、登陸以及身份確定的功能實(shí)現(xiàn)用戶在登陸界面輸入用戶的用戶名和密碼,然后系統(tǒng)對登錄名和密碼進(jìn)行驗(yàn)證如果通過驗(yàn)證這進(jìn)入用戶聊天界面,如果沒有錄名和密碼通過驗(yàn)證,系統(tǒng)就會顯示下列錯

40、誤的信息:您輸入的密碼,或賬號錯誤,請確認(rèn)正確的賬號密碼后重新輸入。圖3.4用戶數(shù)據(jù)模型圖用戶登陸界面的設(shè)計(jì):采用文本框填寫用戶名和密碼,采用IP Address控件輸入服務(wù)器IP,并使用Extend Combo Box控件選擇頭像以及還包括了登陸、取消、注冊按鈕。其中服務(wù)器默認(rèn)顯示IP為主機(jī)的虛擬IP地址,系統(tǒng)如何實(shí)現(xiàn)默認(rèn)顯示IP的方法,將IP Address控件綁定一個相對應(yīng)的CString變量,然后給這個變量賦值為的一個字符串,然后利用系統(tǒng)功能UpdateData(false)函數(shù)的方法把變量的值更新到與變量相關(guān)聯(lián)的IP Address控件上,完成默認(rèn)IP的顯示。界面上有三個按鈕(1)、

41、取消這個一個MFC的取消按鈕,沒有進(jìn)行任何的重寫,作用為推出登陸界面。(2)、注冊作用是:彈出注冊界面注冊頁面中可以輸入用戶名、密碼、年齡。注冊的功能的完成是這樣進(jìn)行的,填寫好注冊頁面里的文本框空間以后后調(diào)用系統(tǒng)函數(shù)UpdateData(TRUE);使相應(yīng)控件的相應(yīng)變量獲取相應(yīng)的值,然后利用套接字的消息傳遞將用戶名、密碼、年齡傳遞給服務(wù)器,服務(wù)器驗(yàn)證傳過來的用戶名是否已經(jīng)注冊,如果沒有注冊則服務(wù)器向注冊頁面發(fā)送注冊成功標(biāo)志LOGIN_SUCCESS,注冊頁面接收到此消息后利用MESSAGEBOX函數(shù)彈出注冊成功,否則注冊失敗,重新輸入。在這里面我們使用的winsocket套接字的原理圖如下:圖

42、3.5winsocket套接字的原理圖Winsocket套接字的使用,有圖大家可以看到要使用套接字進(jìn)行網(wǎng)絡(luò)通信,兩個程序都必須要申請一個套接字,服務(wù)器的套接字主要用于監(jiān)聽,接受客戶端的連接申請,客戶端的套接字要用于申請連接服務(wù)器,TCP的網(wǎng)絡(luò)連接,客戶端服務(wù)器都是使用send()/recv()進(jìn)行數(shù)據(jù)交換,通信結(jié)束后關(guān)閉套接字。(3)、登陸 把用戶名,密碼和年齡利用Socket發(fā)送服務(wù)器,服務(wù)器驗(yàn)證傳遞過來的信息,如果用戶不存在或密碼錯誤,則登陸失敗,否則登陸成功,服務(wù)器給登陸界面發(fā)送一個登陸成功消息LOGIN_SUCCESS。二、客戶端聊天功能的實(shí)現(xiàn)用戶聊天界面是這樣的標(biāo)題顯示的用戶名,接下

43、來的文本框顯示的是用戶的聊天信息,以及用戶進(jìn)入聊天室和退出聊天室的提示信息,接下來的文本框是用來輸入聊天信息的右邊的列表框是用來顯示用戶頭像和用戶名的,雙擊用戶頭像獲取用戶信息,調(diào)用UpdateData(false)使單選框打鉤發(fā)送私聊消息,接下來有一個文本框和一個按鈕,按鈕的作用是點(diǎn)擊按鈕選擇要發(fā)送的文件名,通過CFile類成員變量對應(yīng)的文件路徑和文件名通過調(diào)用函數(shù)將文件路徑分配到一個文本框綁定的變量是在文本框中顯示。在文件的最底端有4個按鈕分別是發(fā)送文件按鈕、發(fā)送聊天消息按鈕、接收文件按鈕,關(guān)閉聊天頁面按鈕。三、開發(fā)環(huán)境與技術(shù)本系統(tǒng)使用C/C+作為開發(fā)語言,使用比較經(jīng)典的比較簡單的微軟的V

44、isual C+ 6.0作為開發(fā)環(huán)境進(jìn)行開發(fā)。開發(fā)過程使用原型模型,即首先開發(fā)一個比較粗糙的原型系統(tǒng)然后在基礎(chǔ)之上不斷的修正。該系統(tǒng)用到數(shù)據(jù)庫的地方使用ACCESS數(shù)據(jù)庫,采用socket技術(shù),發(fā)送消息時進(jìn)行TCP連接。更為詳細(xì)的開發(fā)環(huán)境與技術(shù)的選擇如表3.1所示。表 3.1程序開發(fā)環(huán)境與技術(shù)參數(shù)選擇技術(shù)開發(fā)語言C+開發(fā)平臺Microsoft Visual C+ 6.0 平臺軟件開發(fā)模型原型模型開發(fā)技術(shù)MFC數(shù)據(jù)庫ACCESS連接方式TCP測試平臺Windows 7 Profession(一) ODBC編程技術(shù)在程序開發(fā)過程中還運(yùn)用到了MFC的ODBD編程技術(shù),其中技術(shù)特點(diǎn)如下通過Micros

45、oft Visual C+ 6.0中類庫MFC 通過使用ODBC訪問數(shù)據(jù)庫做一個簡單講解,程序員在軟件的編寫過程中要用到很多C/C+的技術(shù),可以根據(jù)不同的需求使用相應(yīng)的方法解決問題,以到達(dá)縮減開發(fā)周期,減少工作量的目的,提高了效率和軟件的可靠性。MFC的ODBC類對于一些比較復(fù)雜的ODBC API使用類進(jìn)行了封裝,并提供了一些簡化的調(diào)用的功能接口函數(shù),從而很大程度上提高了數(shù)據(jù)庫應(yīng)用程序的開發(fā)速率。使開發(fā)人員可以不必了解ODBC API接口函數(shù)和SQL編程的具體細(xì)節(jié),利用已經(jīng)封裝好的ODBC類已經(jīng)足夠完成對數(shù)據(jù)庫的的很多操作需求。MFC的ODBC類主要包括:CDatabase類:這個類主要是完成

46、運(yùn)用程序與數(shù)據(jù)源的連接,為接下來的數(shù)據(jù)庫操作做準(zhǔn)備。CRecordset類:這個類是表示數(shù)據(jù)庫的一組數(shù)據(jù)可以成為一個記錄集,一個記錄集可以記錄一個數(shù)據(jù)表中的所有數(shù)據(jù),記錄集得獲取主要使用的是查詢(select)獲得,也可以通過多表查詢得到多個表的相關(guān)聯(lián)的記錄集,記錄集中的數(shù)據(jù)可以通過游標(biāo)進(jìn)行遍歷,也可以通過SQL語句進(jìn)行相應(yīng)的刪除,修改,插入等操作。CRecordView類:主要作用是為表單視圖和記錄集提供了一個直接相連的方法,利用數(shù)據(jù)交換機(jī)制把記錄集里面的數(shù)據(jù)顯示到表單數(shù)據(jù)的控件之上顯示出來。方便用戶對數(shù)據(jù)集的瀏覽插入刪除和更新,在關(guān)閉空間時關(guān)閉記錄集。CFieldExchange類:主要用

47、于記錄集中的字段進(jìn)行互換,就是將數(shù)據(jù)庫表中的指端與相應(yīng)的記錄集中的數(shù)據(jù)成員進(jìn)行數(shù)據(jù)交換。并且屬于CDataExchange類功能的數(shù)據(jù)交換。CDBException類:這個類主要是說明ODBC類在使用過程中發(fā)生錯誤或異常。根據(jù)以上內(nèi)容我們總結(jié)出,CDatabase針對的是數(shù)據(jù)庫本身,它的主要任務(wù)是連接數(shù)據(jù)源,開始準(zhǔn)備數(shù)據(jù)庫的操作工作;CRecordset主要作用是獲取數(shù)據(jù)源中的數(shù)據(jù)保存到記錄集之中,并且對記錄集進(jìn)行操作;CRecordView記錄集的顯示,方便觀察修改,而CFieldExchange的作用是使數(shù)據(jù)集的數(shù)據(jù)與數(shù)據(jù)源表中的相對應(yīng)數(shù)據(jù)進(jìn)行交換。(二) MFC技術(shù)MFC是在VC+6.0

48、環(huán)境下編寫的應(yīng)用程序的一個框架和引擎,是掛在C+ SDK(專業(yè)軟件開發(fā)平臺)上的一個輔助軟件開發(fā)包。MFC并不單單是一個功能簡單的界面開發(fā)系統(tǒng),雖說MFC提供的類絕大部分是用來進(jìn)行界面開發(fā)的設(shè)計(jì)的,關(guān)聯(lián)一個窗口的動作函數(shù),但是MFC還有許多類是用來在windows中內(nèi)部處理的類,比如說數(shù)據(jù)庫管理的類,還有網(wǎng)絡(luò)傳輸?shù)念惖鹊龋@些都是windows內(nèi)部處理的,并不是界面類。MFC有六大應(yīng)用機(jī)制:程序啟動機(jī)制,窗口創(chuàng)建機(jī)制,消息映射機(jī)制,運(yùn)行時類信息機(jī)制,動態(tài)創(chuàng)建機(jī)制,對象序列化機(jī)制。動態(tài)創(chuàng)建是在程序運(yùn)行時創(chuàng)建指定的類的對象。永久保存是在MFC當(dāng)中的連續(xù)存儲機(jī)制,能夠像別的容器一樣連續(xù)的存儲并且能夠

49、按順序的取出,其實(shí)它跟鏈表容器差不多。消息映射,在windows的MFC編程中我們會大量的用到,當(dāng)我們的鼠標(biāo)點(diǎn)擊某些按鈕等操作的時候就會觸發(fā)一個消息,就會出現(xiàn)消息響應(yīng)的事件讓這個時間去完成我們所需要完成的事情。消息傳遞,這就是如何去調(diào)用消息映射當(dāng)中的一個過程了,當(dāng)觸發(fā)一個消息的時候窗口處理函數(shù)是如何去獲取知道這個函數(shù)的,這就需要消息的傳遞來完成。四、性能要求對于性能的要求,首先程序必須能運(yùn)行起來,其次程序必須具有可靠性,可以對很多應(yīng)為系統(tǒng)而造成的一些錯誤進(jìn)行簡單的處理,比如應(yīng)對一些突發(fā)性的事件:網(wǎng)絡(luò)連接錯誤,對方程序出現(xiàn)錯誤突然下線,要求系統(tǒng)必須盡可能多的,竟可能正確的處理這些事件,并且采用相

50、應(yīng)的措施防止這些事件的發(fā)生,當(dāng)事件發(fā)生時盡可能向用戶反映清楚的表達(dá)出錯信息。程序的容錯性要好,當(dāng)系統(tǒng)運(yùn)行時出現(xiàn)錯誤以及,用戶操作時不小心操作錯誤,這些都有可能是程序崩潰,或者程序已經(jīng)關(guān)閉但是還是占用著內(nèi)純的假死狀況。程序的開發(fā)文檔要清晰易懂,簡潔明了,這個是為了防止如果系統(tǒng)開發(fā)到一半要,自己沒有時間要交給別人進(jìn)行開發(fā)時,或者由于各種不同因素而要重新開發(fā),那么一個好的開發(fā)文檔這時候就能起到很大的作用。對于我們開發(fā)出來的軟件,我們要盡量做到其運(yùn)行要求的硬件環(huán)境盡可能的低,對內(nèi)存的占用盡可能少,程序的運(yùn)行速率盡可能的快,并且程序運(yùn)行過程中沒有發(fā)生內(nèi)存泄露這樣的錯誤事件,并且程序要具有易維護(hù)性,具有擴(kuò)

51、展空間,所以開發(fā)是一定要使用模塊化快化開發(fā),各個模塊之間不要有太多的關(guān)系,以免造成錯誤的時候難以發(fā)現(xiàn)并修改。五、可行性研究(一) 成本可行性分析這個軟件是我們的畢業(yè)設(shè)計(jì),在這里開發(fā)的目的明顯不是為了經(jīng)濟(jì)利益,所以不用考慮成本以及銷售推廣等問題。(二) 技術(shù)可行性分析開發(fā)所需要的硬件平臺是一臺PC機(jī),機(jī)器上運(yùn)行的是Microsoft Visual C+ 6.0軟件開發(fā)平臺,使用的是C/C+語言,所用到的知識是Socket網(wǎng)絡(luò)編程技術(shù),和MFC對話框程序編程,而所用到的這些技術(shù)都是前人用過得,已經(jīng)熟練的不能再熟練的東西,而且前人也應(yīng)經(jīng)使用相應(yīng)技術(shù)開發(fā)出類似的很多軟件產(chǎn)品,因此,開發(fā)這個程序不存在什

52、么技術(shù)運(yùn)用上的難點(diǎn),完全是可行的。第四章 系統(tǒng)設(shè)計(jì)系統(tǒng)設(shè)計(jì)包括詳細(xì)設(shè)計(jì)和概要設(shè)計(jì)。概要設(shè)計(jì)完成的工作主要是程序的流程圖,數(shù)據(jù)庫設(shè)計(jì),程序詳細(xì)的數(shù)據(jù)流圖和功能模塊圖。詳細(xì)設(shè)計(jì)是在總體設(shè)計(jì)的基礎(chǔ)之上對程序?qū)崿F(xiàn)的細(xì)節(jié)問題進(jìn)行分析。第一節(jié)系統(tǒng)程序流程圖程序流程圖能夠很好的說明程序執(zhí)行過程,是程序執(zhí)行的一個過程呈現(xiàn)。結(jié)束程序結(jié)束程序啟動運(yùn)行服務(wù)器是是判斷連接請求已經(jīng)登入聊天室已近退出聊天室退出服務(wù)器程序開始否否是是圖4.1 系統(tǒng)總工作流程圖首先我們應(yīng)當(dāng)啟動聊天室軟件的服務(wù)端程序,程序里面已經(jīng)設(shè)置服務(wù)器端口并且已經(jīng)打開監(jiān)聽。然后我們打開運(yùn)行客戶端程序,并且在登陸頁面的文本框輸入服務(wù)器地址、用戶名、密碼等信

53、息點(diǎn)擊登錄,開始連接服務(wù)器并將文本框里輸入的用戶名和密碼并發(fā)送到已經(jīng)連接的服務(wù)器。服務(wù)器接收后,在本地?cái)?shù)據(jù)庫中查詢確定是否存在對應(yīng)的用戶信息。如果存在,進(jìn)入聊天室。如果不存在,想客戶端發(fā)送消息??蛻舳颂崾镜卿浭?。進(jìn)入聊天室后,服務(wù)器將就收到的登錄消息分發(fā)給各個在線用戶并做出提示,這個聊天室軟件各個客戶端可以通過服務(wù)器的消息轉(zhuǎn)發(fā)機(jī)制服務(wù)可以實(shí)現(xiàn)簡單的文在群聊和私聊的聊天功能。當(dāng)用戶發(fā)送某條特定信息以后,服務(wù)器就會就收用戶發(fā)送過來的信息,然后服務(wù)器進(jìn)行判斷消失是群發(fā)還是私聊,如果為私聊就找到相應(yīng)用戶的通信套接字并發(fā)送聊天消息,如果是群發(fā)就想每個在線用法發(fā)送一條同樣的消息。從而實(shí)現(xiàn)了進(jìn)入服務(wù)器的用

54、戶可以實(shí)現(xiàn)群聊和私聊的聊天功能。每當(dāng)有用客戶端進(jìn)入聊天室以后,客戶端就會給服務(wù)器端發(fā)送一個用戶的登陸的服務(wù)消息,服務(wù)器這邊接收到相應(yīng)的服務(wù)消息后會給所有的在線用戶發(fā)送一條用戶上線消息通知讓大家知道有人進(jìn)入聊天室。當(dāng)用戶斷開連接下線后也會給服務(wù)器發(fā)送一條消息告知服務(wù)器自己下線,服務(wù)器接收到消息后也會分發(fā)給每個在線用戶通知其下線。此外,系統(tǒng)還提供了文件發(fā)送和接收功能,一個客戶端之間的文件傳輸。這個聊天室使用的是CSocket網(wǎng)絡(luò)編程,運(yùn)用TCP的網(wǎng)絡(luò)協(xié)議,這個協(xié)議要求每個用戶建立連接之后才可以實(shí)現(xiàn)數(shù)據(jù)的接收和發(fā)送。第二節(jié) 數(shù)據(jù)庫設(shè)計(jì)當(dāng)客戶點(diǎn)擊注冊按鈕,可以注冊一個用戶,并將注冊信息發(fā)送到服務(wù)器。服

55、務(wù)器端接收到發(fā)來的信息,存入數(shù)據(jù)庫中,并發(fā)送消息告訴客戶端注冊成功??蛻舳说顷憰r發(fā)送用戶名和密碼到服務(wù)器。服務(wù)器端查詢數(shù)據(jù)庫,如果存在對應(yīng)的記錄告訴客戶端登陸成功,客戶端接收到消息后,登陸到聊天室系統(tǒng)的主界面。聊天室系統(tǒng)數(shù)據(jù)庫使微軟的ACCESS 2003進(jìn)行設(shè)計(jì)實(shí)現(xiàn)。數(shù)據(jù)庫名為Demo.mdf,數(shù)據(jù)庫表明為USER。表中包含的字段:Name,password, age。其中Name這張表的主鍵。第三節(jié) 界面設(shè)計(jì)界面是用戶和系統(tǒng)交互的唯一的通道。界面設(shè)計(jì)的好壞直接影響到用戶體驗(yàn)。因此,界面設(shè)計(jì)對于程序設(shè)計(jì)具有重要的作用。界面設(shè)計(jì)應(yīng)遵循的簡單,快捷的原則。在突出位置的主要功能。在設(shè)計(jì)的過程中界面

56、占有相當(dāng)大的一個比例,當(dāng)你掌握了程序設(shè)計(jì)的核心內(nèi)容,并且通過實(shí)踐完成的系統(tǒng)功能,接下來要面對的就是界面設(shè)計(jì)這個模塊。一個優(yōu)良美觀的用戶界面會使使用者身心愉悅,會讓功能簡單明了,也會使用戶的的到視覺的享受。一、登陸模塊界面設(shè)計(jì)客戶端啟動后展現(xiàn)給用戶的第一個界面就是登錄界面。登錄界面應(yīng)該讓用戶輸入最少的信息,因此,使用默認(rèn)端口號。輸入的信息應(yīng)該包括服務(wù)器ip地址,用戶名,密碼,登錄頭像。按鈕包括登錄,注冊和退出。登錄模塊的最終呈現(xiàn)的效果如圖6所示。圖4.2 局域網(wǎng)聊天室的主頁面二、服務(wù)器界面設(shè)計(jì)服務(wù)器只是作為客戶端登錄和發(fā)送消息的一個簡單的中轉(zhuǎn)。因此,服務(wù)器端的界面沒有必要像客戶端那樣。只需要簡單

57、的呈現(xiàn)在線用戶,用戶所做操作提示等。服務(wù)器端設(shè)計(jì)的最終界面如圖7所示。圖 4.3服務(wù)器端的界面設(shè)計(jì)三、聊天室界面設(shè)計(jì)聊天室是客戶端登陸成功后最多接觸的界面,程序的主要功能都集中在該界面。該界面應(yīng)該實(shí)現(xiàn)在線用戶提示,聊天室聊天,私聊聊天發(fā)送文件等功能。綜合以上分析,聊天室界面最后只能夠設(shè)計(jì)結(jié)果如圖8所示。圖4.4 聊天室界面設(shè)計(jì)第五章 編碼設(shè)計(jì)編碼設(shè)計(jì)是以程序最終用代碼形式展現(xiàn)出來的一個步驟。前面的需求分析和總體設(shè)計(jì)都是為了進(jìn)一步的完成編碼設(shè)計(jì)二設(shè)定。編碼設(shè)計(jì)是程序最終實(shí)現(xiàn)的最為繁瑣的一個環(huán)節(jié),為了統(tǒng)一編碼風(fēng)格,對常用的接口進(jìn)行封裝,是代碼可重用性高。編碼設(shè)計(jì)階段一班都由以下幾個原則組成。具有良

58、好的編碼風(fēng)格,變量的命名方法與傳統(tǒng)的駱駝和匈牙利命名的名字。將代碼按照不同的功能,封裝成不同放得函數(shù)。負(fù)責(zé)數(shù)據(jù)庫使用代碼的實(shí)現(xiàn)和負(fù)責(zé)Socket通信的代碼的實(shí)現(xiàn)封裝成類方便調(diào)用。為了避免多線程產(chǎn)生的時間空間不一致性,在程序編碼實(shí)現(xiàn)中不適合應(yīng)用多線程機(jī)制進(jìn)行編程。發(fā)送的消息應(yīng)該是格式化的進(jìn)行封裝的消息,將分析格式化消息和封裝格式化消息的代碼做成函數(shù)。根據(jù)上述的所說編碼規(guī)則,下文將程序?qū)崿F(xiàn)各個功能的主要代碼介紹如下。客戶端編碼設(shè)計(jì)登陸模塊編碼設(shè)計(jì)客戶端登陸模塊完成與客戶端建立連接,并將用戶名和密碼封裝成消息發(fā)送并等待接受服務(wù)器端發(fā)來的消息。登陸模塊的編碼如下所示。void CLoginDlg:On

59、OK() / TODO: Add extra validation hereUpdateData(TRUE);PicNum = m_Picture.GetCurSel();m_nIp.GetWindowText(m_strIP,16);CString Name=m_strName;if(!m_SockClient.Login(Name)MessageBox(用戶名稱錯誤,請重新登錄!);return;CDialog:OnOK();利用MFC的消息機(jī)制點(diǎn)擊登陸,獲取文然后,框里面的各種信息,然后用CReLoClient 變量m_SockClient調(diào)用Login(),函數(shù)向客戶端發(fā)送登陸信息,并

60、接受服務(wù)器返回消息,完成登陸驗(yàn)證。二、注冊模塊的編碼設(shè)計(jì)注冊模塊主要是根據(jù)填寫的注冊信息封裝消息發(fā)送到服務(wù)器,然后根據(jù)服務(wù)器的提示,給出用戶提示。具體的代碼如下。void CLoginDlg:OnRegister() / TODO: Add your control notification handler code hereCREgister Reg;Reg.DoModal();以上代碼實(shí)現(xiàn)的功能是彈出注冊頁面。void CREgister:OnYes() / TODO: Add your control notification handler code here/int flag=0;U

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論